测试demo-手机验证码
功能的要求
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
思路:
第一步:生成一个验证码,然后用手机号拼出一个key,再把验证码做value,设置有效期120s;
第二步:通过函数传过来的手机号拼接一个key,去redis中取出value;然后用取出的这个value和用户输入的验证码(函数传进来的那个code)做比较,如果相等,则输出成功,反之,输出失败
第三步:用手机号拼出一个key,若取出的value为null,则为这个手机号第一次发送验证码,然后设置这个key的value为1,时间为24h×60min×60s
/**
* 功能描述
*
* @author: Ocean
* @date: 2023年06月27日 10:57
*/
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Demo01 {
public static void main(String[] args) {
// 1.发送验证码
// verifyCode("18211828162");
// 2.模拟验证码校验
// getRedisCode("18211828162","915341");
}
//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中,设置过期时间120
public static void verifyCode(String phone) {
//连接redis
Jedis jedis = new Jedis("127.0.0.1",6379);
//拼接key
//手机发送次数key
String countKey = "VerifyCode"+phone+":count";
System.out.println("手机发送次数key-countKey:"+countKey);
//验证码key
String codeKey = "VerifyCode"+phone+":code";
System.out.println("验证码key-codeKey:"+codeKey);
//每个手机每天只能发送三次
String count = jedis.get(countKey);
if(count == null) {
//没有发送次数,第一次发送
//设置发送次数是1
//key,时间,value
jedis.setex(countKey,24*60*60,"1");
} else if(Integer.parseInt(count)<=2) {
//发送次数+1
jedis.incr(countKey);
} else if(Integer.parseInt(count)>2) {
//发送三次,不能再发送
System.out.println("今天发送次数已经超过三次");
jedis.close();
}
//发送验证码放到redis里面
String vcode = getCode();
System.out.println("验证码:"+vcode);
jedis.setex(codeKey,120,vcode);
jedis.close();
}
//3 验证码校验
public static void getRedisCode(String phone,String code) {
//从redis获取验证码
Jedis jedis = new Jedis("127.0.0.1",6379);
//验证码key
String codeKey = "VerifyCode"+phone+":code";
System.out.println("验证码key-codeKey:"+codeKey);
String redisCode = jedis.get(codeKey);
System.out.println("redisCode:"+redisCode);
//判断
if(redisCode.equals(code)) {
System.out.println("成功");
}else {
System.out.println("失败");
}
jedis.close();
}
}