一、发送验证码
二、验证码校验
验证码使用过后,立即删除。
三、案例源码
import redis.clients.jedis.Jedis;
import java.util.Random;
/**
* @ClassName PhoneVerifyCode
* @Author Lucky-Six
* @Date 2022/10/24 16:22
* @Version 1.0.0
*/
public class PhoneVerifyCode {
private static Jedis jedis = new Jedis("hadoop-master", 6379);
// 工作流程:前端点击发送验证码,
// 后端处理请求、生成随机验证码,调用第三方api给对应手机号发送验证码。并将code写入redis
// 当用户输入验证码、点击登录,取出redis缓存的验证码做对比、验证过后,即刻删除。
public static void main(String[] args) {
// 发送验证码-
sendVerifyCode("15078963214");
// 验证码校验- 手机号、redis中的验证码
// verificationCode("15078963214", "136896");
}
/**
* @description: 发送手机验证码
* @author: Lucky-Six
* @date: 2022/10/24 16:52
* @param: [phone]
* @return: void
**/
private static void sendVerifyCode(String phone) {
//发送验证码之前,先校验。每天只能发送3次
boolean b = verifySendCodeCount(phone + "_sendCount");
if (b) {
System.out.println("今天已发送三次验证码,请改天再来哦。");
return;
}
// 6位验证码
String verifyCode = generationVerifyCode();
// 记录本次发送验证码
jedis.incr(phone + "_sendCount");
// 验证码,3分钟内有效
jedis.setex(phone, 60 * 3, verifyCode);
System.out.println("==验证码发送成功,请注意查收==");
}
/**
* @description: 校验当天发送验证码次数
* @author: Lucky-Six
* @date: 2022/10/24 16:51
* @param: [phone]
* @return: boolean
**/
private static boolean verifySendCodeCount(String phone) {
// 15078963214_sendCount
String sendCount = jedis.get(phone);
// 如果取不到,说明今天还未发送
if (sendCount == null) {
// 并设置改手机号发送次数,有效期1天
jedis.setex(phone, 60 * 60 * 24, String.valueOf(0));
return false;
}
return Integer.parseInt(sendCount) > 2;
}
/**
* @description: 模拟验证码校验过程
* @author: Lucky-Six
* @date: 2022/10/24 16:51
* @param: [phone, code]
* @return: void
**/
private static void verificationCode(String phone, String code) {
// 对比redis缓存中的验证码
String verifyCode = jedis.get(phone);
if (verifyCode.equals(code)) {
System.out.println("验证码正确");
// 验证码使用过后,马上删除。
jedis.del(phone);
return;
}
System.out.println("验证码错误");
}
/**
* @description: 生成6位验证码
* @author: Lucky-Six
* @date: 2022/10/24 16:51
* @param: []
* @return: java.lang.String
**/
private static String generationVerifyCode() {
Random random = new Random();
int verifyCode = 99999 + random.nextInt(100000);
return String.valueOf(verifyCode);
}
}
Maven坐标:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>