Redis——模拟手机验证码发送

使用redis模拟手机验证码发送,规定一个手机号一天只能请求三次验证码,且每次请求的验证码只有两分钟就会过期

1、首先写一个函数随机产生六位验证码,使用random函数

//随机生成六位验证码
    public static String getCode(){
        String code="";
        Random random = new Random();
        //随机函数生成验证码
        for (int i = 0; i < 6; i++) {
            code+= random.nextInt(10);
        }
        return code;
    }

2、写一个函数判断一个手机号一天验证码发送次数,流程如下:

①使用jedis连接redis,第一个参数为linux虚拟地址,第二个参数为redis默认端口号

②生成存储手机号发送次数,验证码对应的key

③判断该手机号一天发送验证码的次数,为空表明手机号未请求过,则将手机号次数存储进入,bi并设置过期时间为1天,若小于三次则自增

④存储验证码进redis,并设置过期时间为2分钟

//判断手机一天是否发送超过3次验证码
    public static Boolean Phone(String phone){
        //连接linux中的redis
        Jedis jedis = new Jedis("192.168.12.188",6379);
        //生成手机存储的key
        String phoneKey="Phone"+phone+"p";
        //生成存储验证码的key
        String codeKey="Code"+phone+"c";
        //获取key为phoneKey的值
        String key = jedis.get(phoneKey);
        //判断redis中phoneKey值是否为空
        if (key==null){
            //为空存储phoneKey,并设置过期时间为1天,值为1,代表发送过一次
            jedis.setex(phoneKey,24*60*60,"1");
        }
        //若不为空,且发送次数小于3,phoneKey++
        else if (Integer.parseInt(key)<=2){
            jedis.incr(phoneKey);
        }
        //若发送超过三次,提示不能发送
        else {
            System.out.println("今天发送次数已经超过三次,不能再获取验证码");
            jedis.close();
            return false;
        }
        //获取验证码
        String code=getCode();
        //存储验证码
        jedis.setex(codeKey,120,code);
        jedis.close();
        return true;
    }

3、判断验证码是否正确

①通过手机号拼接字符串,获取验证码的key值

②验证验证码是否正确

//验证验证码是否正确
    public static Integer Code(String code,String phone){
        //连接jedis
        Jedis jedis = new Jedis("192.168.23.129",6379);
        String codekey="Code"+phone+"c";
        String s = jedis.get(codekey);
        //判断验证码是否正确
        if (code.equals(s)){
            System.out.println("验证码正确");
            return 1;
        }else {
            System.out.println("验证码错误,请重新请求");
            return 0;
        }
    }

4、启动linux中redis服务端,找到redis.conf,启动执行下面命令即可启动

redis-server /opt/redis-6.2.1/redis.conf

5、执行函数

①输入手机号,并确认是否发送验证码

②调用判断手机号发送验证码次数函数,判断是否三次已经发完,若发完,直接退出

③输入验证码,调用验证验证码函数,若正确,直接退出程序

④若输入验证码失败,确认是否继续发送验证码

public static void main(String[] args) {
        //创建一个手机号
        String phone="";
        String tip="";
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入手机号:");
        phone=scanner.nextLine();
        System.out.print("是否获取验证码:(y/n)");
        tip=scanner.nextLine();
        if (tip.equals("y")){
            while (tip.equals("y")){
                //打印验证码到控制台
                Boolean p=Phone(phone);
                if (!p){
                    //发送超过三次,退出while
                    break;
                }
                System.out.println(getCode());
                System.out.print("请输入验证码:");
                String code=scanner.nextLine();
                if (Code(code,phone).equals(1)){
                    System.out.println("验证正确");
                    break;
                }
                System.out.print("是否重新获取验证码:(y/n)");
                tip=scanner.nextLine();
            }
        }

    }

运行结果如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAMDHvvJ8=,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swttws.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值