用JavaSE知识写生成验证码功能

来源:互联网 发布:vscode markdown 预览 编辑:程序博客网 时间:2024/06/07 04:07

生成验证码案例,写一个程序生成一个四位的验证码,验证码取值范围大写字母与数字。
验证码需要的数字和字母存储到数组中,随机数作为数组的索引使用,随机4次,即获取到4个字符,4个字符连接为一个字符串.
用户输入验证码,和已经生成的验证码进行比较判断
分析:
1.定义一个字符数组,内容是所有验证码中可能出现的字符(26个大写字母和10个数字字符)
如何初始化?可以使用静态初始化{‘A’,’B’,….’9’},这么太麻烦
可以使用动态初始化,然后通过for循环进行赋值
2.因为要产生随机的字符,所以要创建Random
3.要进行字符的拼接,创建StringBuilder
4.因为总共要生成4个字符进行拼接,所以使用for
(1)生成随机的int数字,范围[0,35]
(2)用该随机数作为索引获取对应的字符
(3)将字符拼接到StringBuilder对象当中
5.将StringBuilder对象变成String,最终就是生成的正确的验证码,打印输出
6.创建键盘录入对象
7.获取用户输入的验证码
8.进行比较
(1)如果输入的验证码和生成的验证码相同,提示”验证成功”
(2)如果输入的验证码和生成的验证码不相同,提示”验证失败,请重试”
9.所谓的重试,指的是重复执行步骤4-步骤8


代码片
public static void main(String[] args) {
while(true){
//调用booleanValidCode(),判断用户输入的验证码,和系统随机生成的验证码是否相同,返回Boolean值
boolean b =booleanValidCode();
if(b){
System.out.println("亲!验证成功");
break;
}else{
System.out.println("亲!验证失败,请重试");
System.out.println("=============================");
//continue;(这个可以省略)
}
}
}
//定义一个方法判断用户输入的验证码,和系统随机生成的验证码是否相同,返回Boolean值
public static boolean booleanValidCode() {
char[] chas = new char[36];
//调用getDict()方法得到一个装满验证码取值范围的字符数组
chas = getDict(chas);
//调用validCodeStr()方法,得到随机生成的验证码字符串
String ValidCode = validCodeStr(chas);
System.out.println("验证码 :"+ValidCode);
//调用userScanner()方法,传入验证码字符串,与用户输入的字符串作比较,返回Boolean值
boolean b = userScanner(ValidCode);
return b;
}
//传入验证码字符串,与用户输入的字符串作比较,返回Boolean值
public static boolean userScanner(String validCode) {
Scanner sc = new Scanner(System.in);
System.out.print("请用户输入验证码(亲!区分大小写哦):");
String userStr = sc.nextLine();
return userStr.equals(validCode);
}
//传入装满验证码取值范围的字符数组,返回随机生成的验证码字符串
public static String validCodeStr(char[] chas) {
Random r = new Random();
StringBuilder sb = new StringBuilder();
//int tempNum=0;
for (int i = 0; i < 4; i++) {
//tempNum=r.nextInt(36);
char ch = chas[r.nextInt(36)];
sb.append(ch);//append()//此方法通过重载,里面可以传入任何类型
}
return sb.toString();
}
//传入字符数组,返回一个装满验证码取值范围的字符数组
public static char[] getDict(char[] chas) {
for (int i = 0; i < 26; i++) {
chas[i] = (char)('A'+i);
}
for(int i = 0;i<10;i++){
chas[26+i] = (char)('0'+i);
}
//System.out.println(chas);//验证数据是否录入正确
return chas;
}
![此程序原理图](http://img.blog.csdn.net/20171029164234471?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFja2V0X3N0YXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

原创粉丝点击