随机生成验证码问题
需求:
- 随机生成验证码,验证码内容不能重复。
- 让用户使用键盘输入验证码(忽略大小写)
- 输入错误后重新生成新的验证码再次输入,直到输入成功为止
public class HomeWork2 {
public static void main(String[] args) {
/*需求:随机生成验证码,验证码内容不能重复。
让用户使用键盘输入验证码(忽略大小写),
输入错误后重新生成新的验证码再次输入,直到输入成功为止。
*/
Scanner sc = new Scanner(System.in);
while (true) {
//1.生成验证码
String authCode = getAuthCode(5);//自由定义随机生成验证码长度
System.out.println("新生成的验证码为:" + authCode);
//2.提示用户输入验证码,并接收
System.out.println("请输入验证码");
String str = sc.next();
//3.判断用户输入是否正确,忽略大小写
if (str.equalsIgnoreCase(authCode)) {
System.out.println("输入正确,验证成功");
break;
} else {
System.out.println("输入验证码错误"+"\n"+"---------------------------");
}
}
}
public static String getAuthCode(int length) {
//1.定义字符串包含验证码的内容
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
//2.创建Random对象
Random r = new Random();
//3.循环length次
String result = "";
for (int i = 0; i < length; i++) {
//4.通过随机数索引生成随机元素
char c = str.charAt(r.nextInt(str.length()));
//5.拼接前判断验证码元素是否重复
boolean flag = false;//默认没有重复
for (int j = 0; j < result.length(); j++) {
if (c == result.charAt(j)){
flag = true;//发现重复
}
}
if (flag){
i--;//flag为真,i-1重新进入循环
continue;
}else{
result += c;//flag为假,拼接成验证码
}
}
return result;
}
}