JAVA中生成指定位數隨機數的方法不少,下面列舉幾種比較經常使用的方法。git
方法1、經過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的方式,是爲了防止生成的隨機數比較小,致使乘以位數後小於指定位數。app
方法2、經過Random類dom
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類其實還有一些的生成隨機數的方法,有興趣能夠了解一下。ui
方法3、經過Random類spa
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,來確保位數。code
方法4、經過指定數據源blog
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方法獲取到一個隨機整數,將這個整數做爲數據源數組的下標,再經過循環的方法來組成一個隨機數。這裏還能夠在數據源中補充上字母,就至關於生成帶字母的驗證碼。get
PS:獲取不重複的隨機值it
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了。