为了账号安全,请及时绑定邮箱和手机立即绑定

java产生随机验证码,有惑

java产生随机验证码,有惑

犯罪嫌疑人X 2019-01-19 20:45:46
import java.util.Arrays; import java.util.Random; public class VerificationCode { public static void main(String[] args) { String[] CHARS = { "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y" }; boolean[] charFlags = new boolean[CHARS.length]; String[] verifyCodes = new String[6]; Random ran = new Random(); for (int i = 0; i < verifyCodes.length; i++) { int index; do { index = ran.nextInt(CHARS.length); } while (charFlags[index]); verifyCodes[i] = CHARS[index]; charFlags[index] = true; } //这段代码求解释 看不懂 System.out.print("验证码为:"); for (int i = 0; i < verifyCodes.length; i++) { System.out.print(verifyCodes[i]); } } }
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

具体是哪一行看不懂呢?
这个就是声明了一个验证码可取值数组CHARS
charFlags 的每个值对应了每个char是否已经用到过。(这里的目的是生成的验证码不会出现重复字符比如AA1234,两个A重复了)
verifyCodes是最终生成的验证码数组。
代码逻辑翻译过来就是:
每次从CHARS里面取一个字符,看这个字符是否已经用过,没有用过就放到最终的验证码数组verifyCodes中。然后取下一个,如果从CHARS中取出的字符已经用过,则再随机生成一个下标,重新取一个字符。直到取到6个不重复的字符为止。

查看完整回答
反对 回复 2019-02-12
?
墨色风雨

TA贡献1853条经验 获得超6个赞

搞双重循环是很低效的一个事, 如果验证码再长点, 某一位可能会长时间不出现, 不知作者为什么这么做? 为了更好的随机性? 原代码的核心是避免同一个字符重复出现

改成这样就会好理解:

import java.util.Arrays;
import java.util.Random;

public class VerificationCode {
    public static void main(String[] args) {
        char[] CHARS = { '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L',
                'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y' };
        char[] verifyCodes = new char[6];

        Random ran = new Random();
        for (int i = 0; i < verifyCodes.length; i++) {
            verifyCodes[i] = CHARS[ran.nextInt(CHARS.length)];
        }

        System.out.print("验证码为:");
        System.out.print(new String(verifyCodes));
    }
}
查看完整回答
反对 回复 2019-02-12
  • 2 回答
  • 0 关注
  • 538 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号