简介
本次模拟验证码发送的需求有三项:
输入手机号,点击发送后随机生成6位数字验证码,2分钟有效
输入验证码,点击验证,返回成功或失败
每个手机号每天只能输入3次
代码编写
利用Random函数生成6位随机数
public String generateCode() { StringBuilder code = new StringBuilder(); for (int i = 0; i < 6; i++) { int nextInt = new Random().nextInt(10); code.append(nextInt); } return code.toString(); }
输入手机号,获取验证码并将验证码存放到Redis中。同时,还需要校验验证码的发送是否超过限制。
public String setCode(String phone) { Jedis jedis = new Jedis("127.0.0.1", 6379); String code = generateCode(); String key = "code:" + phone; String code_count = "code:" + phone + ":count"; String count = jedis.get(code_count); if (count == null) { //第一次设置 jedis.setex(code_count, 24 * 60 * 60L, "1"); } else if (Integer.valueOf(count) <= 2) { //验证码的次数+1 jedis.incr(code_count); } else { System.out.println("每个手机号每天只能输入3次"); return "每个手机号每天只能输入3次"; } jedis.setex(key,2*60L, code); return code; }
这里通过设置键 "code:" + phone + ":count" 来统计每个手机号每天发送的次数,此处采用的是setex方法进行设置,设置的键是"code:" + phone , 设置的过期时间是1天,即24 * 60 * 60L秒,设置的值是"1"。
第一次设置时值count为空,需要手动设置,后面再次设置时就能获取到值了,通过incr 方法对验证码的次数进行+1操作。直到值count大于3时,则给出提示:每个手机号每天只能输入3次。
3. 设置生成的随机验证码,键是"code:" + phone,值是生成的code,过期时间是2分钟,即2*60L秒。
验证用户输入的验证码
验证用户输入的验证码就是将用户输入的验证码和Redis中保存的验证码做一个对比。如果两者一样的话则表示验证成功,否则表示验证失败。
public boolean verifyCode(String phone, String code) { Jedis jedis = new Jedis("127.0.0.1", 6379); String redis_code = jedis.get("code:" + phone); if (redis_code != null && code.equals(redis_code)) { System.out.println("验证码验证成功"); return true; } System.out.println("验证码验证失败"); return false; }
如果redis_code为空,则表示验证码已经过期,故不能在使用,如果Redis中保存的验证码redis_code和用户输入的验证码code相等则表示验证码验证成功。
总结
本文通过模拟实际场景中的验证码发送需求重温了一遍Jedis的使用,希望对读者朋友们有所帮助。