模拟Redis发验证码
模拟Redis发验证码
Java操作Redis
使用jedis可以对redis进行操作,但是得关闭保护模式
模拟验证码
- 输入手机号,点击后发送随机六位数验证码,2分钟内有效
- 输入验证码,点击验证,返回成功还是失败
- 每个手机号每天只能输入3次
实现流程
- 生成6位数字验证码, Random类
- 验证码2分钟内有效 放到redis中,设置过期时间120秒
- 判断验证码是否一致 从redis中取出验证码进行比较
- 每个手机号每天3次 incr 每次发送后+1
我们创建一个PhoneCode类,在这个类里面进行模拟
首先是生成验证码
生成六位验证码,可以调用Random类的NextInt函数,生成六个10以内的正整数,进行拼接
//生成六位验证码
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中去。
拿到一个电话号码,先到redis中查找是否对它记过数,没记过数,就设其发送一次,之后生成其对应的验证码放入redis,若已发送次数不到3,就重新生成验证码,放入redis,若次数已到3,就打印”今天已发送过三次“,并关闭连接。
//让每个手机每天只能发送三次,验证码放到redis中去,设置过期时间
public static void setCode(String phone){
Jedis jedis = new Jedis("101.37.13.45",6379);
String countKey = "VerifyCode"+phone+":count";
String codeKey = "VerifyCode"+phone+":code";
String count = jedis.get(codeKey);
if(count==null){ //如果手机号还没发过请求
jedis.setex(countKey,12*60*60,"1"); //对手机发送次数计时,有效期一天
}else if(Integer.parseInt(count)<=2){
jedis.incr(countKey);
}else if(Integer.parseInt(count)>2){
System.out.println("今天已发送过三次");
jedis.close();
}
String vCode = getCode();
jedis.setex(codeKey,120, vCode); //将手机号对应的验证码放入redis,设有效期120
jedis.close();
}
校验验证码
将验证码从redis中取出,和用户提交的验证码进行比对。
//校验验证码
public static void verifyCode(String phone, String code){
Jedis jedis = new Jedis("101.37.13.45",6379);
String codeKey = "VerifyCode"+phone+":code";
String redisCode = jedis.get(codeKey);
if(redisCode == null){
System.out.println("验证码已过期");
} else if(code.equals(redisCode)){
System.out.println("成功");
}else{
System.out.println("失败");
}
jedis.close();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理