如何使用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