关于一个生成验证码代码的问题

yangzong1118 2017-02-16 11:09:12
public class Udf {

private static final String VERIFY_CODES = "123456789";


public static void main(String[] args) {
String s=generateVerifyCode(5,VERIFY_CODES);
System.out.println(s);
}

public static String generateVerifyCode(int verifySize, String sources)
{
if (sources == null || sources.length() == 0)
{
sources = VERIFY_CODES;
}
int codesLen = sources.length();
Random rand = new Random(System.currentTimeMillis());
StringBuilder verifyCode = new StringBuilder(verifySize);
for (int i = 0; i < verifySize; i++)
{
verifyCode.append(sources.charAt(rand.nextInt(codesLen-1)));
}
return verifyCode.toString();
}
}

这是一段生成验证码的代码 求助
问题1:verifyCode.append(sources.charAt(rand.nextInt(codesLen-1))); 这段代码后面为什么要-1 我把-1取消了 效果并没差别.
问题2:Random rand = new Random(System.currentTimeMillis()); 这里为什么要在后面获取一个当前的时间戳然后用随机 随机这个有什么作用?
问题3:verifyCode.append(sources.charAt(rand.nextInt(codesLen-1))); 这句代码看了很久 真的不懂在运行什么
求助各位高手 解我心结! 感谢
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
X元素 2017-02-17
  • 打赏
  • 举报
回复
问题1 charAt 是从0开始, 问题2 跑了个测试单元 试了一下,性能上几乎是一致的,可以忽略 问题3 就是根据rand.nextInt(codesLen-1)的结果index ,到VERIFY_CODES下取对应下标的值。
jero丶泽 2017-02-16
  • 打赏
  • 举报
回复
1:0 <= nextInt(n) < n 因为你是1到9 总共才9个字符,索引从0开始 是不是0-8 所以n应该为9。应该不需要减1,这样9这个值不是取不到了。你可以程序多跑跑,看看写了-1会不会出现9 2:random是个伪随机数,必须每次传一个不一样的种子值。这样可以认为random是个真实随机数 3:StringBuffer的append类似string的+=,就是说每次拼接一个随机的1-9里面的某个字符 手机打的,大小写勿怪
jero丶泽 2017-02-16
  • 打赏
  • 举报
回复
1:0 <= nextInt(n) < n 因为你是1到9 总共才9个字符,索引从0开始 是不是0-8 所以n应该为9。应该不需要减1,这样9这个值不是取不到了。你可以程序多跑跑,看看写了-1会不会出现9 2:random是个伪随机数,必须每次传一个不一样的种子值。这样可以认为random是个真实随机数 3:stringbuffer的append类似于string的+=。就是每一次随机选取1-9之间的一个字符拼接上去。 因为是手机书写,大小写见谅

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧