如何使用Java redis实现发送手机验证码功能

作者:护花使者 时间:2023-11-26 17:25:00 

要求:

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();
     }
   }
 }
}

来源:https://www.cnblogs.com/chenmz1995/p/12562328.html

标签:Java,redis,手机,验证码
0
投稿

猜你喜欢

  • JAVA中SpringBoot启动流程分析

    2021-07-03 03:57:05
  • C#装箱和拆箱的原理介绍

    2022-06-18 02:33:17
  • Android中导航组件Navigation的实现原理

    2022-08-25 13:11:47
  • 详解Android Flutter中SliverAppBar的使用教程

    2023-06-23 12:11:27
  • Spring Security权限管理实现接口动态权限控制

    2022-07-03 12:25:53
  • springboot @ConfigurationProperties和@PropertySource的区别

    2023-06-12 07:18:14
  • mybatis-spring:@MapperScan注解的使用

    2021-11-22 09:58:33
  • android实现筛选菜单效果

    2022-10-22 12:41:05
  • Java深入学习图形用户界面GUI之创建窗体

    2022-11-17 02:40:36
  • springboot如何通过URL方式访问外部资源

    2022-02-07 01:10:15
  • Struts2下拉框实例解析

    2021-09-16 16:29:59
  • Android自定义带进度条WebView仿微信加载过程

    2022-05-08 04:52:46
  • C#将Unicode编码转换为汉字字符串的简单方法

    2021-06-05 02:11:38
  • c# 获取CookieContainer的所有cookies函数代码

    2023-06-17 23:11:30
  • springboot扩展MVC的方法

    2023-12-15 14:19:05
  • java如何用Processing生成马赛克风格的图像

    2023-11-07 20:52:44
  • Java判断字符串是否是整数或者浮点数的方法

    2022-04-30 10:06:20
  • C#泛型的逆变协变之个人理解

    2021-05-28 16:33:03
  • Spring MVC数据绑定方式

    2023-03-18 03:06:55
  • Flutter 仿微信支付界面

    2023-08-30 01:31:53
  • asp之家 软件编程 m.aspxhome.com