码迷,mamicode.com
首页 > 移动开发 > 详细

用Java redis 实现发送手机验证码的功能

时间:2020-03-25 01:04:06      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:stat   ringbuf   生成   失效   import   try   class   password   new   

要求:

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

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

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

 

import redis.clients.jedis.Jedis;

import java.util.Random;

public class ValidationTest {
    public static void main(String[] args) {
        //getValidation("15005076571");
        //checkValidation("769897","15005076571");
    }

    static void getValidation(String tel) {
        //主机、端口
        Jedis jedis = new Jedis("myhost", 6379);
        //密码
        jedis.auth("mypassword");
        try {
            //获取电话号码
            String phoneNo = tel;
            //本人用1库进行测试
            jedis.select(1);
            String countKey = phoneNo + ":count";
            String codeKey = phoneNo + ":code";
            //获取指定的电话号码发送的验证码次数
            String cnt = jedis.get(countKey);
            //对次数进行判断
            if (cnt == null) {
                //没有发送过验证码
                jedis.setex(countKey, 60 * 60 * 24, "1");
                //发送验证码,假设生成的验证码
                StringBuffer code = new StringBuffer();
                for (int i = 0; i < 6; i++) {
                    code.append(new Random().nextInt(10));
                }
                System.out.println("code:" + code);
                //缓存中添加验证码
                jedis.setex(codeKey, 60 * 2, code.toString());
            } else {
                if (Integer.parseInt(cnt) < 3) {
                    //发送验证码,假设生成的验证码
                    StringBuffer code = new StringBuffer();
                    for (int i = 0; i < 6; i++) {
                        code.append(new Random().nextInt(10));
                    }
                    System.out.println("code:" + code);
                    //缓存中添加验证码
                    jedis.setex(codeKey, 60 * 2, code.toString());
                    //递增手机发送数量
                    jedis.incr(countKey);
                } else {
                    //返回超出3次,禁止发送
                    System.out.println("超出3次,禁止发送");
                }
            }
        } catch (Exception e) {
            //这边其实是需要回滚下redis
            e.printStackTrace();
        } finally {
            //关闭redis
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    static void checkValidation(String code, String tel) {
        Jedis jedis = null;
        try {
            jedis = new Jedis("myhost", 6379);
            //密码
            jedis.auth("mypassword");
            jedis.select(1);
            String codeKey = tel + ":code";
            String validation = jedis.get(codeKey);
            if (validation == null) {
                System.out.println("验证码未发送或者失效");
            } else {
                if (validation.equals(code)) {
                    System.out.println("验证成功");
                } else {
                    System.out.println("验证失败");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}

 

用Java redis 实现发送手机验证码的功能

标签:stat   ringbuf   生成   失效   import   try   class   password   new   

原文地址:https://www.cnblogs.com/chenmz1995/p/12562328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!