项目简介
已设置好的账号密码,利用String的equals函数进行对比验证,第一次登陆成功直接进入,第二三次登陆时需要验证码验证,三次失败冻结账号。
定义方法实现随即生成一个5位的验证码
验证码格式:长度为5、前四位是大写或者小写字母、最后一位是数字
//生成验证码
public static String verificationCode() {
//我们可以先把这些数放到数组当中再随机抽取一个索引出来
//1.大写字母和小写字母都放放到数组中去
char[] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//ASCII码表
if (i <= 25) {
//添加小写字母,小写字母由97(a)开始加26次就是a~z
chs[i] = (char) (97 + i);
} else {//27
//添加大写字母,大写字母由65(A)开始加26次就是A~Z
chs[i] = (char) (65 + i - 26);
}//else结束
}//for循环结束,英文部分结束
//此时定义一个字符串类型的变量,用来记录最终的结果
String result = " ";
//2.对数组中的索引进行随机抽取4次
Random r = new Random();
for (int i = 0; i < 4; i++) {
int random = r.nextInt(chs.length);
//利用随机索引获取对应的元素
result += chs[random];
}
//3.随机抽取一个数字0~9
int num = r.nextInt(10);
//生成最终的结果
result = result + num;
return result;
}
完整代码实现1.0
import java.util.Random;
import java.util.Scanner;
/**
* JavaLearning
* 项目简介:
* 定义方法实现随即生成一个5位的验证码
* 验证码格式:
* 长度为5、前四位是大写或者小写字母、最后一位是数字
*
* @author 心斐
* @time 2022/9/17 13:41
*/
public class userLogsIn {
public static void main(String[] args) {
//定义两个变量记录正确的用户名和密码
String rightUserName = "zhangsan";
String rightPassWord = "123456";
String result = verificationCode();
Scanner sn = new Scanner(System.in);
//键盘录入用户名与密码进行验证
for (int i = 0; i <= 3; i++) {
String userName, passWord, verificationcode = null;
System.out.println("请输入用户名:");
userName = sn.next();
System.out.println("请输入密码:");
passWord = sn.next();
if (i != 0) {
System.out.println("请输入验证码:" + result);
verificationcode = sn.next();
result = verificationCode();
}
//进行比较
if (i == 0) {
if (rightPassWord.equals(passWord) && rightUserName.equals(userName)) {
System.out.println("用户登陆成功");
break;
} else {
System.out.println("用户登陆失败,您还剩下" + (2 - i) + "次机会");
}
} else {
if (rightPassWord.equals(passWord) && rightUserName.equals(userName) && result.equalsIgnoreCase(verificationcode)) {
System.out.println("用户登陆成功");
break;
} else {
if (i == 2) {
System.out.println("您已三次输入错误,账户" + userName + "已被锁定,请联系官方客服xxx-xxxx-xxxx解封");
break;
} else {
System.out.println("用户登陆失败,您还剩下" + (2 - i) + "次机会");
}
}
}
}
}
//生成验证码
public static String verificationCode() {
//我们可以先把这些数放到数组当中再随机抽取一个索引出来
//1.大写字母和小写字母都放放到数组中去
char[] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//ASCII码表
if (i <= 25) {
//添加小写字母,小写字母由97(a)开始加26次就是a~z
chs[i] = (char) (97 + i);
} else {//27
//添加大写字母,大写字母由65(A)开始加26次就是A~Z
chs[i] = (char) (65 + i - 26);
}//else结束
}//for循环结束,英文部分结束
//此时定义一个字符串类型的变量,用来记录最终的结果
String result = " ";
//2.对数组中的索引进行随机抽取4次
Random r = new Random();
for (int i = 0; i < 4; i++) {
int random = r.nextInt(chs.length);
//利用随机索引获取对应的元素
result += chs[random];
}
//3.随机抽取一个数字0~9
int num = r.nextInt(10);
//生成最终的结果
result = result + num;
return result;
}
}
完整代码实现2.0
2.0改进了
-尝试了利用StringBuilder拼接字符串,成功实现了验证码功能
package project;
import java.util.Random;
import java.util.Scanner;
/**
* JavaLearning
* 项目简介:
* 定义方法实现随即生成一个5位的验证码
* 验证码格式:
* 长度为5、前四位是大写或者小写字母、最后一位是数字
*
* @author Fekilh
* @time 2022/9/17 13:41
*/
public class userLogsIn {
public static void main(String[] args) {
//定义两个变量记录正确的用户名和密码
String rightUserName = "Fekilh";
String rightPassWord = "123456";
String result = verificationCode();
Scanner sn = new Scanner(System.in);
//键盘录入用户名与密码进行验证
for (int i = 0; ; i++) {
String userName, passWord, verificationcode;
System.out.println("请输入用户名:");
userName = sn.next();
System.out.println("请输入密码:");
passWord = sn.next();
//进行比较
if (i == 0) {
if (rightPassWord.equals(passWord) && rightUserName.equals(userName)) {
System.out.println("用户登陆成功");
break;
} else {
System.out.println("用户登陆失败,您还剩下" + (2 - i) + "次机会");
}
} else {
System.out.println("请输入验证码:" + result);
verificationcode = sn.next();
if (rightPassWord.equals(passWord) && rightUserName.equals(userName) && result.equalsIgnoreCase(verificationcode)) {
System.out.println("用户登陆成功");
break;
} else {
if (i == 2) {
System.out.println("您已三次输入错误,账户" + userName + "已被锁定,请联系官方客服xxx-xxx-xxx解封");
break;
} else {
System.out.println("用户登陆失败,您还剩下" + (2 - i) + "次机会");
result = verificationCode();
}
}
}
}
}
//生成验证码
public static String verificationCode() {
//我们可以先把这些数放到数组当中再随机抽取一个索引出来
//1.大写字母和小写字母都放放到数组中去
char[] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//ASCII码表
if (i <= 25) {
//添加小写字母,小写字母由97(a)开始加26次就是a~z
chs[i] = (char) (97 + i);
} else {//27
//添加大写字母,大写字母由65(A)开始加26次就是A~Z
chs[i] = (char) (65 + i - 26);
}//else结束
}//for循环结束,英文部分结束
//此时定义一个字符串类型的变量,用来记录最终的结果
StringBuilder result = new StringBuilder("");
//2.对数组中的索引进行随机抽取4次
Random r = new Random();
for (int i = 0; i < 4; i++) {
int random = r.nextInt(chs.length);
//利用随机索引获取对应的元素
result.append(chs[random]);
}
//3.随机抽取一个数字0~9
int num = r.nextInt(10);
//生成最终的结果
result.append(num);
return result.toString();
}
}