随机生成验证码的方法
// 随机生成验证码的方法
private String getCode(int len) {
String code = "";
for (int i = 0; i < len; i++) {
int rand = new Random().nextInt(10);
code += rand;
}
return code;
}
获取当天剩余秒数的方法
//获取当天剩余秒数的方法
private long getTheLeftSeconds(){
//获取现在的时间
LocalTime now = LocalTime.now();
//获取当日23点59分59秒的时间
LocalTime end = LocalTime.of(23, 59, 59);
//获取end与now相差的秒数
long millis = Duration.between(now, end).toMillis()/1000;
return millis;
}
1.输入手机号,点击发送后随机生成6位数字码,2分钟有效
相关代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户的手机号
String phoneNo = request.getParameter("phone_no");
//判断用户的手机号是否为空
if(phoneNo == null || "".equals(phoneNo)){
return;
}
//获取验证码
String code = getCode(6);
//拼接向Redis中保存的验证码的key,必须保证唯一性
String phoneKey = phoneNo + ":code";
//向redis中保存验证码,时效为120秒
jedis.setex(phoneKey,120,code);
//给前台响应一个true
response.getWriter().write("true");
//关闭jedis
jedis.close();
}
2.输入验证码,点击验证,返回成功或失败
相关代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户输入的手机号和验证码
String phoneNo = request.getParameter("phone_no");
String verify_code = request.getParameter("verify_code");
//验空
if(phoneNo == null | verify_code == null | "".equals(phoneNo) | "".equals(verify_code)){
return;
}
String phoneKey = phoneNo + ":code";
//连接Linux上的redis
Jedis jedis = new Jedis("192.168.6.165", 6379);
//获取redis中的value值
String phoneValue = jedis.get(phoneKey);
if(verify_code.equals(phoneValue)){
//如果验证码和redis中的验证码一样,使用后删除redis中的验证码
jedis.del(phoneKey);
//向前台响应为true
response.getWriter().write("true");
}
jedis.close();
}
3.每个手机号每天只能发送3次验证码
相关代码:
//获取用户的手机号
String phoneNo = request.getParameter("phone_no");
//判断用户的手机号是否为空
if(phoneNo == null || "".equals(phoneNo)){
return;
}
//拼接向redis中保存发送验证码的次数的计数器的key
String countKey = phoneNo + ":count";
//连接linux上的redis
Jedis jedis = new Jedis("192.168.6.165",6379);
//向redis中获取计数器的值
String count = jedis.get(countKey);
//判断计数器的值是否为空
if(count == null){
//证明该手机号今日还没有发送过验证码
//获取今日剩余的秒数
long theLeftSeconds = getTheLeftSeconds();
//向redis中保存一个计数器,并设置它的值为1,有效时间为当日剩余的时间
jedis.setex(countKey,(int)theLeftSeconds,"1");
}else if("3".equals(count)){
//证明今日发送超过次数,向前台响应limit
response.getWriter().write("limit");
//关闭jedis
jedis.close();
return;
}else {
//证明今日发送还未超过3次,计数器的值加1即可
jedis.incr(countKey);
}
整合后的代码:
发送验证码的代码:
//处理发送验证码的Servlet
@WebServlet("/SendCodeServlet")
public class SendCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户的手机号
String phoneNo = request.getParameter("phone_no");
//判断用户的手机号是否为空
if(phoneNo == null || "".equals(phoneNo)){
return;
}
//拼接向redis中保存发送验证码的次数的计数器的key
String countKey = phoneNo + ":count";
//连接linux上的redis
Jedis jedis = new Jedis("192.168.6.165",6379);
//向redis中获取计数器的值
String count = jedis.get(countKey);
//判断计数器的值是否为空
if(count == null){
//证明该手机号今日还没有发送过验证码
//获取今日剩余的秒数
long theLeftSeconds = getTheLeftSeconds();
//向redis中保存一个计数器,并设置它的值为1,有效时间为当日剩余的时间
jedis.setex(countKey,(int)theLeftSeconds,"1");
}else if("3".equals(count)){
//证明今日发送超过次数,向前台响应limit
response.getWriter().write("limit");
//关闭jedis
jedis.close();
return;
}else {
//证明今日发送还未超过3次,计数器的值加1即可
jedis.incr(countKey);
}
//获取验证码
String code = getCode(6);
//拼接向Redis中保存的验证码的key,必须保证唯一性
String phoneKey = phoneNo + ":code";
//向redis中保存验证码,时效为120秒
jedis.setex(phoneKey,120,code);
//给前台响应一个true
response.getWriter().write("true");
//关闭jedis
jedis.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
// 随机生成验证码的方法
private String getCode(int len) {
String code = "";
for (int i = 0; i < len; i++) {
int rand = new Random().nextInt(10);
code += rand;
}
return code;
}
//获取当天剩余秒数的方法
private long getTheLeftSeconds(){
//获取现在的时间
LocalTime now = LocalTime.now();
//获取当日23点59分59秒的时间
LocalTime end = LocalTime.of(23, 59, 59);
//获取end与now相差的秒数
long millis = Duration.between(now, end).toMillis()/1000;
return millis;
}
}
验证验证码的代码:
//处理验证验证码请求的Servlet
@WebServlet("/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户输入的手机号和验证码
String phoneNo = request.getParameter("phone_no");
String verify_code = request.getParameter("verify_code");
//验空
if(phoneNo == null || verify_code == null || "".equals(phoneNo) || "".equals(verify_code)){
return;
}
String phoneKey = phoneNo + ":code";
//连接Linux上的redis
Jedis jedis = new Jedis("192.168.6.165", 6379);
//获取redis中的value值
String phoneValue = jedis.get(phoneKey);
if(verify_code.equals(phoneValue)){
//如果验证码和redis中的验证码一样,使用后删除redis中的验证码
jedis.del(phoneKey);
//向前台响应为true
response.getWriter().write("true");
}
jedis.close();
}