Java连接Redis模拟手机号短信验证
2022/2/1 19:09:39
本文主要是介绍Java连接Redis模拟手机号短信验证,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
需求分析: 输入手机号,点击发送后返回6位数字码,2分钟有效。用户输入验证码,点击验证,返回成功或失败,每个手机号每天只能输入3次,0点刷新次数。
package com.wenbin.jedis; import redis.clients.jedis.Jedis; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Random; import java.util.Scanner; /** * 1、输入手机号,点击发送后随机生成6位数字码,2分钟有效 * 2、输入验证码,点击验证,返回成功或失败 * 3、每个手机号每天只能输入3次 * * @author wenbin */ public class PhoneCode { //随机数 private static final Random random = new Random(); public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入您的手机号"); String photo = input.next(); String code = sendCode(photo); //次数用完 退出 不再执行验证操作 if (code.length() == 0) { System.out.println("您今天的验证码发送次数已经用完"); return; } System.out.println("您收到的验证码是" + code); System.out.println("请输入您的验证码"); String inCode = input.next(); boolean flag = checkCode(photo, inCode); System.out.println((flag) ? "验证码正确" : "验证码错误"); } /** * 检查输入的验证码是否与发送的一致 * * @param photo 手机号 * @param inCode 输入的验证码 * @return true正确 false错误 */ private static boolean checkCode(String photo, String inCode) { //获取redis链接 Jedis jedis = getJedis(); //该手机号验证码key String codeKey = photo + "code"; //拿出redis中存入的验证码 String codeValue = jedis.get(codeKey); //关闭redis连接 closeJedis(jedis); //返回两个是否相等 return inCode.equals(codeValue); } /** * 发送验证码 一天最多三次 * * @param photo 手机号 * @return 返回验证码 */ private static String sendCode(String photo) { //获取redis链接 Jedis jedis = getJedis(); //该手机号已发送次数key String countKey = photo + "count"; //该手机号已发送次数value,如果没有返回null把他改为0 有则返回已发送次数 String countValue = (jedis.get(countKey) == null) ? "0" : jedis.get(countKey); if (Integer.parseInt(countValue) >= 3) { return ""; } //下面代码表示正常发送验证码 //计算当前时间还有多少秒到24点 用作每天验证次数刷新 存储redis中设置key有效时间 Calendar nowDate = Calendar.getInstance(); Calendar nextDayDate = new GregorianCalendar(nowDate.get(Calendar.YEAR), nowDate.get(Calendar.MONTH), nowDate.get(Calendar.DATE) + 1); long s = (nextDayDate.getTimeInMillis() - nowDate.getTimeInMillis()) / 1000; //在redis中设置到24.过期的key 值为每日验证码发送次数 jedis.setex(countKey, (int) s, String.valueOf(Integer.parseInt(countValue) + 1)); //该手机号验证码key String codeKey = photo + "code"; //该手机号验证码value,六位数随机生成 String codeValue = getCode(); //在redis中设置120s过期的key 值为验证码 jedis.setex(codeKey, 2 * 60, codeValue); //关闭redis连接 closeJedis(jedis); return codeValue; } /** * 生成六位数字验证码 * * @return 六位数字验证码 */ private static String getCode() { //生成1000000-99999左闭右闭的随机数 int code = random.nextInt(1000000) % (1000000 - 99999 + 1) + 99999; return String.valueOf(code); } /** * 获取redis连接 * * @return redis连接 */ public static Jedis getJedis() { return new Jedis("192.168.188.100", 6379); } /** * 关闭redis连接 * * @param jedis 要关闭的redis连接 */ public static void closeJedis(Jedis jedis) { jedis.close(); } }
这篇关于Java连接Redis模拟手机号短信验证的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14后台交互资料入门指南
- 2024-11-14如何轻松创建项目环境:新手入门教程
- 2024-11-14如何抽离公共代码:初级开发者指南
- 2024-11-14Python编程入门指南
- 2024-11-14Python编程入门:如何获取参数
- 2024-11-14JWT 用户校验:简单教程与实践
- 2024-11-14Pre-commit 自动化测试入门指南
- 2024-11-14Python编程基础
- 2024-11-14Server Action入门教程:轻松掌握服务器操作
- 2024-11-14Server Component入门教程:轻松搭建服务器组件