使用redis模拟验证码发送
maven引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
验证码生成到验证有三个步骤:
验证码生成:
//1.生成6位数字的验证码
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;
}
验证码发送:
//2.每个手机号每天只能发送三次验证码,验证码放到redis中,设置过期时间为2min
public static void veriftCode(String phone){
Jedis jedis = new Jedis("192.168.233.128",6379);
jedis.auth("password");
//拼接key
//手机发送次数key
String countKey = "VerifyCode" + phone + ":count";
//验证码key
String codeKey = "VerifyCode" + phone + ":code";
String count = jedis.get(countKey);
if(count == null){
//改手机号当天没有申请发送验证码,系统第一次发送验证码
jedis.setex(countKey,24*60*60,"1");
System.out.println("验证码已发送");
}else if(Integer.parseInt(count) <= 2){
jedis.incr(countKey);
System.out.println("验证码已发送");
}else if(Integer.parseInt(count) > 2){
System.out.println("今日已经发送超过三次,请明日再试");
jedis.close();
}
String code = getCode();
jedis.setex(codeKey,2*60,code);
jedis.close();
}
第一次发送后查看redis:
此时验证码还有48s的有效时间
验证码校验:
//3.校验码校验
public static void getRedisCode(String phone,String code){
Jedis jedis = new Jedis("192.168.233.128",6379);
jedis.auth("password");
String codeKey = "VerifyCode" + phone + ":code";
String redisCode = jedis.get(codeKey);
if(code.equals(redisCode)){
System.out.println("成功");
}else{
System.out.println("失败");
}
jedis.close();
}