用Java redis 实现发送手机验证码的功能
要求:
1、输入手机号,点击发送后随机生成 6 位数字码,2 分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入 3 次
import redis.clients.jedis.Jedis;import java.util.Random;
public class ValidationTest {
public static void main(String[] args) {
//getValidation("15005076571");
//checkValidation("769897","15005076571");
}</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> getValidation(String tel) { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">主机、端口</span> Jedis jedis = <span style="color: rgba(0, 0, 255, 1)">new</span> Jedis("myhost", 6379<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">密码</span> jedis.auth("mypassword"<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取电话号码</span> String phoneNo =<span style="color: rgba(0, 0, 0, 1)"> tel; </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">本人用1库进行测试</span> jedis.select(1<span style="color: rgba(0, 0, 0, 1)">); String countKey </span>= phoneNo + ":count"<span style="color: rgba(0, 0, 0, 1)">; String codeKey </span>= phoneNo + ":code"<span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取指定的电话号码发送的验证码次数</span> String cnt =<span style="color: rgba(0, 0, 0, 1)"> jedis.get(countKey); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对次数进行判断</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (cnt == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">没有发送过验证码</span> jedis.setex(countKey, 60 * 60 * 24, "1"<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">发送验证码,假设生成的验证码</span> StringBuffer code = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuffer(); </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i < 6; i++<span style="color: rgba(0, 0, 0, 1)">) { code.append(</span><span style="color: rgba(0, 0, 255, 1)">new</span> Random().nextInt(10<span style="color: rgba(0, 0, 0, 1)">)); } System.out.println(</span>"code:" +<span style="color: rgba(0, 0, 0, 1)"> code); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">缓存中添加验证码</span> jedis.setex(codeKey, 60 * 2<span style="color: rgba(0, 0, 0, 1)">, code.toString()); } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (Integer.parseInt(cnt) < 3<span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">发送验证码,假设生成的验证码</span> StringBuffer code = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuffer(); </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i < 6; i++<span style="color: rgba(0, 0, 0, 1)">) { code.append(</span><span style="color: rgba(0, 0, 255, 1)">new</span> Random().nextInt(10<span style="color: rgba(0, 0, 0, 1)">)); } System.out.println(</span>"code:" +<span style="color: rgba(0, 0, 0, 1)"> code); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">缓存中添加验证码</span> jedis.setex(codeKey, 60 * 2<span style="color: rgba(0, 0, 0, 1)">, code.toString()); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">递增手机发送数量</span>
jedis.incr(countKey);
} else {
//返回超出 3 次,禁止发送
System.out.println("超出 3 次,禁止发送");
}
}
} catch (Exception e) {
//这边其实是需要回滚下 redis
e.printStackTrace();
} finally {
//关闭 redis
if (jedis != null) {
jedis.close();
}
}
}</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> checkValidation(String code, String tel) { Jedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { jedis </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Jedis("myhost", 6379<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">密码</span> jedis.auth("mypassword"<span style="color: rgba(0, 0, 0, 1)">); jedis.select(</span>1<span style="color: rgba(0, 0, 0, 1)">); String codeKey </span>= tel + ":code"<span style="color: rgba(0, 0, 0, 1)">; String validation </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.get(codeKey); </span><span style="color: rgba(0, 0, 255, 1)">if</span> (validation == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { System.out.println(</span>"验证码未发送或者失效"<span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (validation.equals(code)) { System.out.println(</span>"验证成功"<span style="color: rgba(0, 0, 0, 1)">); } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { System.out.println(</span>"验证失败"<span style="color: rgba(0, 0, 0, 1)">); } } } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e) { e.printStackTrace(); } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 0, 255, 1)">if</span> (jedis != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { jedis.close(); } } }
}