公司产生6位随机短信验证码的功能 产生了 5.0835这样的不科学验证码
打开代码 发现是这样写的
private String randomCode() {
return Double.toString(Math.random()).replace("0.", "").substring(0, 6);
}
乍一看 好像没什么问题
测试一下 问题真的蛮多的 Math.random产生 [0.0,1.0) 的数字
当产生的小数足够小时 产生出来的数就直接是 3.290305281000716E-4 逻辑不适用了 出错了
修改策略也很简单
生成6位随机数
System.out.println((int)((Math.random()*9+1)*100000));
生成5位随机数:
System.out.println((int)((Math.random()*9+1)*10000));
生成4位随机数
System.out.println((int)((Math.random()*9+1)*1000));