使用redis实现验证码功能
redis模拟验证码发送
要求:1.输入手机号,点击发送后随即生成6位数字码,2分钟有效
2.输入验证码,点击验证,返回成功或者失败
3.每个手机号每天只能输入3次
分析:
验证码2分钟内有效,将验证码存放在redis里面,设置过期时间为120秒
判断验证码是否一致,从redis里面获取验证和输入的验证码进比较
incr 每次发送之后加1 大于2的时候,提示不能发送验证码
package com.atguigu.jedis.duanxin;
import redis.clients.jedis.Jedis;
import java.util.Random;
/**
* @PROJECT_NAME: Jredis_redisdemo
* @DESCRIPTION:
* @USER: 28416
* @DATE: 2022/11/19 16:43
*/
public class PhoneCode {
public static void main(String[] args) {
//模拟验证发送
verifyCode("1663899xxxx");
//校验
//getRedisCode("1663899xxxx","935668");
}
//验证码的校验功能
public static void getRedisCode(String phone,String code){
Jedis jedis = new Jedis("host",6380);
//设置密码了 需要加上这个进行认证
jedis.auth("密码");
String codeKey = "VerifyCode"+phone +":code";
System.out.println(codeKey);
String s = jedis.get(codeKey);
System.out.println(s);
if (code.equals(s)){
System.out.println("验证成功");
}else {
System.out.println("失败");
}
}
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中,设置过期时间
public static void verifyCode(String phone){
Jedis jedis = new Jedis("host",6380);
//设置密码了 需要加上这个进行认证
jedis.auth("密码");
//拼接key
String countKey = "VerifyCode" +phone +":count";
String codeKey = "VerifyCode"+phone +":code";
String s = jedis.get(countKey);
if (s == null) {
//没有发送次数 证明第一次发送
jedis.setex(countKey,24*60*60,"1");
}else if (Integer.parseInt(s) <= 2){
jedis.incr(countKey);
}else if (Integer.parseInt(s) >2){
System.out.println("手机号获取验证码的次数达到了上限");
jedis.close();
}
//发送的验证码要存放在redis里面
String code1 = getCode();
jedis.setex(codeKey,1200,code1);
jedis.close();
}
}
验证流程正确
超过三次
本文来自博客园,作者:wiselee/,转载请注明原文链接:https://www.cnblogs.com/wiseleer/p/16906588.html