最近在做衛生局的一個考務網時需要實現一個短信發送驗證碼的功能,因此就必須使用到隨機生成6位驗證碼的功能,開始覺的簡單的,隨便寫了個
int i=(int)(Math.random()*1000000+100000);
String messageCode = String.valueOf(i);
然后測試發送了下,是發送了6位隨機數,以為是正確的,但在之后的反復測試中忽然發現這個驗證碼有時會出現7位的,然后去看代碼感覺沒問題啊,
Math.random()是產生0.0到1.0之間的doule的隨機數的,感覺不會錯啊
沒辦法測試下,寫個main函數生成100個隨機數看看
public static void main(String[] args) {
for(int j = 0; j< 100; j++){
int i=(int)(Math.random()*1000000+100000);
String messageCode = String.valueOf(i);
System.out.println(messageCode);
}
}
果然發現生成的隨機數中,既有6位又有7位,奇怪,怎么跟自己的意願不一樣呢,接着,直接測試了下
public static void main(String[] args) {
for(int j = 0; j< 100; j++){
System.out.println((Math.random()));
}
}
生成的隨機數盡然有0.0XXX的,我頓時迷惑了,趕快查了下文檔,終於有所體會了,產生的隨機數應該是0.0000...-1.00000...之間的,
開始誤認為是第一位非0的是就是位於小數點的后一位
然后就只能根據測試的結果來重新信了個方法,測試了下確實是可以了
public static void main(String[] args) {
for(int j = 0; j< 100; j++){
System.out.println((int)((Math.random()*9+1)*100000));
}
}