package com.atguigu.jedis.verifyDemo;
import redis.clients.jedis.Jedis;
import java.util.Random;
import java.util.Scanner;
public class phoneVerify {
public static final String IP = "192.168.19.128";
public static final Integer PORT = 6379;
/**
* 1.输入手机号,点击发送后随机生成6位数字码,2分钟有效
* 2.输入验证码,验证
* 3.每天只能输入三次
*/
public static String generateCode() {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6; i++) {
int nextInt = random.nextInt(10);
sb.append(nextInt);
}
return sb.toString();
}
/**
* 验证码
* @param phoneNumber 手机号
*/
public static void verifyCode(String phoneNumber) {
Jedis jedis = new Jedis(IP, PORT);
// 手机号次数
String numberKey = "verify:" + phoneNumber + "count";
// 获取用户手机获取验证码次数
String count = jedis.get(numberKey);
if (count == null) {
// 没有获取验证码
jedis.setex(numberKey, 24*60*60, "1");
} else if (Integer.parseInt(count) <= 2) {
// 次数++
jedis.incr(numberKey);
} else if (Integer.parseInt(count) > 2) {
// 已过期
System.out.println("已超过最大获取次数");
jedis.close();
}
// 验证码存入,2分钟过期时间
String codeKey = "verify:" + phoneNumber + "code";
String verifyCode = generateCode();
jedis.setex(codeKey, 120, verifyCode);
jedis.close();
}
/**
* 验证是否匹配
* @param phoneNumber 手机号
* @param code 输入的号码
*/
public static boolean compareVerifyCode(String phoneNumber, String code) {
Jedis jedis = new Jedis(IP, PORT);
String codeKey = "verify:" + phoneNumber + "code";
String verifyCode = jedis.get(codeKey);
if (verifyCode.equals(code)) {
System.out.println("验证成功");
return true;
} else {
System.out.println("验证码错误");
return false;
}
}
public static void main(String[] args) {
String s = generateCode();
System.out.println("验证码已发送:"+s);
verifyCode("178");
String code = "";
Scanner scanner = new Scanner(System.in);
code = scanner.next();
compareVerifyCode("178",code);
}
}
03.1案例模拟手机验证码
最新推荐文章于 2026-01-01 19:31:50 发布
本文介绍了一个基于Java和Redis实现的手机号验证码系统。该系统能够生成并验证六位数字验证码,支持每日三次获取限制及两分钟有效期。通过使用Redis进行数据存储,确保了验证码的有效性和时效性。
4572

被折叠的 条评论
为什么被折叠?



