项目简介

        已设置好的账号密码,利用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();
    }
}