JAVA中生成指定位數隨機數的方法很多,下面列舉幾種比較常用的方法。
方法一、通過Math類
1 public static String getRandom1(int len) { 2 int rs = (int) ((Math.random() * 9 + 1) * Math.pow(10, len - 1)); 3 return String.valueOf(rs); 4 }
該方法是通過Math.random()獲取[0.0, 1.0)的隨機數,再乘以需要的位數。這里用乘9,再加1,而沒有用乘10的方式,是為了防止生成的隨機數比較小,導致乘以位數后小於指定位數。
方法二、通過Random類
1 public static String getRandom2(int len) { 2 Random r = new Random(); 3 StringBuilder rs = new StringBuilder(); 4 for (int i = 0; i < len; i++) { 5 rs.append(r.nextInt(10)); 6 } 7 return rs.toString(); 8 }
該方法是通過Random類的nextInt(9)方法可以直接獲取一個[0,9]的隨機整數,然后通過指定次數的循環,來拼接隨機數。Random類其實還有一些的生成隨機數的方法,有興趣可以了解一下。
方法三、通過Random類
1 public static String getRandom3(int len) { 2 int digit = (int) Math.pow(10, len - 1); 3 int rs = new Random().nextInt(digit * 10); 4 if (rs < digit) { 5 rs += digit; 6 } 7 return String.valueOf(rs); 8 }
該方法也是通過Random類,不同的是,通過指定隨機數的最大值,來生成指定位數的隨機整數,因為有可能位數不足,所以當小於指定位數的時候需要加上指定位數的值。舉例:要生成一個4位數的隨機值,那么就是生成一個小於10000的隨機整數,當隨機數小於1000時,加上1000,來確保位數。
方法四、通過指定數據源
1 public static String getRandom4(int len) { 2 String source = "0123456789"; 3 Random r = new Random(); 4 StringBuilder rs = new StringBuilder(); 5 for (int j = 0; j < len; j++) { 6 rs.append(source.charAt(r.nextInt(10))); 7 } 8 return rs.toString(); 9 }
該方法是預設一個數據源,然后通過Random類的nextInt方法獲取到一個隨機整數,將這個整數作為數據源數組的下標,再通過循環的方法來組成一個隨機數。這里還可以在數據源中補充上字母,就相當於生成帶字母的驗證碼。
PS:獲取不重復的隨機值
1 public static List<String> getDistinctRandom(int len, int num) { 2 Set<String> s = new HashSet<>(); 3 while (s.size() < num) { 4 s.add(getRandom4(len)); 5 } 6 return new ArrayList<>(s); 7 }
前面幾種方法獲取指定個數的隨機數,其中是有可能有重復值的。如果想要獲取不重復的隨機值,也很簡單,獲取隨機值的方式可以不變,只要把獲取到的隨機值都放進Set集合,直到達到需要的個數就ok了。