其实验证码在我们的生活中很经常见到的,比如某些网站登录的时候,需要输入4位的验证码,注册时候收到的6位纯数字的短信验证码,银行相关app在支付的时候收到的6位数字+字母格式的短信验证码等等
今天呢,通过对手头上项目的基础代码的查看,总结一下,对于各种格式的验证码要怎么生成
纯数字的验证码生成方式
基础类中,length不用多说,是验证码的长度
public static String genNumericVerifyCode(int length) {
return RandomUtil.genNumericRandomString(length);
}
进入这个方法查看
public static String genNumericRandomString(int length) {
return genRandomString("0123456789", length);
}
这里可以看出,是用字符串“0123456789”中的元素作为验证码的组成部分,然后生成length长度的验证码
public static String genRandomString(String dict, int length) {
return genRandomString(dict, length, (Random)null);
}
public static String genRandomString(String dict, int length, Random random) {
int dictLength = dict.length();
if (null == random) {
random = ThreadLocalRandom.current();
}
StringBuilder sBuilder = new StringBuilder(length);
for(int i = 0; i < length; ++i) {
char c = dict.charAt(((Random)random).nextInt(dictLength));
sBuilder.append(c);
}
return sBuilder.toString();
}
具体的生成方法是genRandomString,其中random是用来生成随机数,取指定字符串中的某一位
这里可以看出,使用的ThreadLocalRandom.current().nextInt(dictLength)的方式来生成一个整数,来获取指定字符串中的某一位,然后将取出的字符进行拼接返回。
同样的,如果要生成其他格式的验证码,只要将指定字符串换成其他的格式即可,例如
全大写 --> "ABCDEFGHIJKLMNOPQRSTUVWXWZ"
全小写 --> "abcdefghijklmnopqrstuvwxyz"
大写+小写 --> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXWZ"
数字+大写+小写 --> "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXWZ"