使用redis实现验证码功能

redis模拟验证码发送

要求:1.输入手机号,点击发送后随即生成6位数字码,2分钟有效

​ 2.输入验证码,点击验证,返回成功或者失败

​ 3.每个手机号每天只能输入3次

分析:

​ 验证码2分钟内有效,将验证码存放在redis里面,设置过期时间为120秒

​ 判断验证码是否一致,从redis里面获取验证和输入的验证码进比较

​ incr 每次发送之后加1 大于2的时候,提示不能发送验证码

package com.atguigu.jedis.duanxin;

import redis.clients.jedis.Jedis;

import java.util.Random;

/**
 * @PROJECT_NAME: Jredis_redisdemo
 * @DESCRIPTION:
 * @USER: 28416
 * @DATE: 2022/11/19 16:43
 */
public class PhoneCode {
    public static void main(String[] args) {
        //模拟验证发送
        verifyCode("1663899xxxx");
        //校验
       //getRedisCode("1663899xxxx","935668");
    }
    //验证码的校验功能
    public static  void getRedisCode(String phone,String code){
        Jedis jedis = new Jedis("host",6380);
        //设置密码了 需要加上这个进行认证
        jedis.auth("密码");
        String codeKey = "VerifyCode"+phone +":code";
        System.out.println(codeKey);
        String s = jedis.get(codeKey);
        System.out.println(s);
        if (code.equals(s)){
            System.out.println("验证成功");
        }else {
            System.out.println("失败");
        }
    }
    public static String getCode(){
        Random random = new Random();
        String code = "";
        for (int i = 0; i < 6; i++) {
          int rand =   random.nextInt(10);
          code += rand;
        }
        return  code;
    }

    //每个手机每天只能发送三次,验证码放到redis中,设置过期时间
    public static void  verifyCode(String phone){
        Jedis jedis = new Jedis("host",6380);
        //设置密码了 需要加上这个进行认证
        jedis.auth("密码");
        //拼接key
        String countKey = "VerifyCode" +phone +":count";
        String codeKey = "VerifyCode"+phone +":code";

        String s = jedis.get(countKey);
        if (s == null) {
            //没有发送次数  证明第一次发送
            jedis.setex(countKey,24*60*60,"1");
        }else if (Integer.parseInt(s) <= 2){
            jedis.incr(countKey);
        }else if (Integer.parseInt(s) >2){
            System.out.println("手机号获取验证码的次数达到了上限");
            jedis.close();
        }

        //发送的验证码要存放在redis里面
        String code1 = getCode();
        jedis.setex(codeKey,1200,code1);
        jedis.close();
    }
}

验证流程正确

超过三次

posted @ 2022-11-19 17:28  wiselee/  阅读(524)  评论(0编辑  收藏  举报