Redis实现手机验证码功能

举报
兮动人 发表于 2022/02/25 13:02:03 2022/02/25
【摘要】 完成一个手机验证码功能要求:1、输入手机号,点击发送后随机生成6位数字码,2分钟有效2、输入验证码,点击验证,返回成功或失败3、每个手机号每天只能输入3次流程分析代码实现public class PhoneCode { public static void main(String[] args) { //模拟验证码发送 verifyCode("123456...

完成一个手机验证码功能

要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次

  • 流程分析
    在这里插入图片描述

  • 代码实现

public class PhoneCode {
    public static void main(String[] args) {
        //模拟验证码发送
        verifyCode("12345678910");
    }
    //1.生成6位数字验证码
    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;
    }

    //2. 每个手机每天只能发送三次,验证放在redis中,设置过期时间
    public static void verifyCode(String phone) {
        //连接redis
        Jedis jedis = new Jedis("47.107.53.146", 6379);

        //拼接key
        //手机发送次数
        String countKey = "VerifyCode" + phone + ":count";
        //验证码key
        String codeKey = "VerifyCode" + phone + ":code";
        //每个手机只能发送三次
        String count = jedis.get(countKey);
        if (count == null){
            //没有发送次数,说明是第一次发送
            //设置发送次数是1
            jedis.setex(countKey, 24*60*60, "1");
        }else if (Integer.parseInt(count) <= 2) {
            //发送次数 +1
            jedis.incr(countKey);
        }else if (Integer.parseInt(count) > 2) {
            //发送三次,不能再发送了
            System.out.println("今天的发送次数已经超过三次");
            jedis.close();
            return;
        }

        //发送验证码放到 redis 中
        String vscode = getCode();
        jedis.setex(codeKey, 120, vscode);
        jedis.close();
    }
    //3.验证码校验
    public static void getRedisCode(String phone,String code) {
        //从redis获取验证码
        Jedis jedis = new Jedis("47.107.53.146",6379);
        //验证码key
        String codeKey = "VerifyCode"+phone+":code";
        String redisCode = jedis.get(codeKey);
        //判断
        if(redisCode.equals(code)) {
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
        jedis.close();
    }
}
  • 运行后:
    在这里插入图片描述

  • 查看服务器上的 key
    在这里插入图片描述

  • 验证码校验
    在这里插入图片描述
    输出:成功

  • 第二次发送验证码后:
    在这里插入图片描述

  • 第三次后:
    在这里插入图片描述

  • 第四次后就会出现
    在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。