首页 > 数据库 >使用redis实现验证码功能

使用redis实现验证码功能

时间:2022-11-19 17:34:10浏览次数:40  
标签:功能 code String redis 验证码 发送 jedis

redis模拟验证码发送

要求:1.输入手机号,点击发送后随即生成6位数字码,2分钟有效

​ 2.输入验证码,点击验证,返回成功或者失败

​ 3.每个手机号每天只能输入3次

分析:

​ 验证码2分钟内有效,将验证码存放在redis里面,设置过期时间为120秒

​ 判断验证码是否一致,从redis里面获取验证和输入的验证码进比较

​ incr 每次发送之后加1 大于2的时候,提示不能发送验证码

package com.atguigu.jedis.duanxin;

import redis.clients.jedis.Jedis;

import java.util.Random;

/**
 * @PROJECT_NAME: Jredis_redisdemo
 * @DESCRIPTION:
 * @USER: 28416
 * @DATE: 2022/11/19 16:43
 */
public class PhoneCode {
    public static void main(String[] args) {
        //模拟验证发送
        verifyCode("1663899xxxx");
        //校验
       //getRedisCode("1663899xxxx","935668");
    }
    //验证码的校验功能
    public static  void getRedisCode(String phone,String code){
        Jedis jedis = new Jedis("host",6380);
        //设置密码了 需要加上这个进行认证
        jedis.auth("密码");
        String codeKey = "VerifyCode"+phone +":code";
        System.out.println(codeKey);
        String s = jedis.get(codeKey);
        System.out.println(s);
        if (code.equals(s)){
            System.out.println("验证成功");
        }else {
            System.out.println("失败");
        }
    }
    public static String getCode(){
        Random random = new Random();
        String code = "";
        for (int i = 0; i < 6; i++) {
          int rand =   random.nextInt(10);
          code += rand;
        }
        return  code;
    }

    //每个手机每天只能发送三次,验证码放到redis中,设置过期时间
    public static void  verifyCode(String phone){
        Jedis jedis = new Jedis("host",6380);
        //设置密码了 需要加上这个进行认证
        jedis.auth("密码");
        //拼接key
        String countKey = "VerifyCode" +phone +":count";
        String codeKey = "VerifyCode"+phone +":code";

        String s = jedis.get(countKey);
        if (s == null) {
            //没有发送次数  证明第一次发送
            jedis.setex(countKey,24*60*60,"1");
        }else if (Integer.parseInt(s) <= 2){
            jedis.incr(countKey);
        }else if (Integer.parseInt(s) >2){
            System.out.println("手机号获取验证码的次数达到了上限");
            jedis.close();
        }

        //发送的验证码要存放在redis里面
        String code1 = getCode();
        jedis.setex(codeKey,1200,code1);
        jedis.close();
    }
}

验证流程正确

超过三次

标签:功能,code,String,redis,验证码,发送,jedis
From: https://www.cnblogs.com/wiseleer/p/16906588.html

相关文章

  • Linux与Windows功能的区别
    1.Linux模块化程度高Linux的内核分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分;其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内......
  • redis三种新的数据结构
    redis新数据类型bitmaps操作Ascii码的数据类型,能够有效的提高内存使用效率和开发效率setbit:设置初始值gebit:取值bitcount:统计数据被设置为1饿数量bitmaps和set数......
  • Edge浏览器额外功能
    1.在百度文库没法复制的时候,网址前面添加:read://或http://read://即可进入阅读模式,然后任意复制。2.将Edge浏览器提升为多线程下载时,在网址输入:Edg......
  • redis配置文件详解
    redis配置文件详解1、开头说明这里没什么好说的,需要注意的是后面需要使用内存大小时,可以指定单位,通常是以k,gb,m的形式出现,并且单位不区分大小写。2、INCLUDE......
  • Java——Collection集合——Collection集合概述&集合框架介绍&Collection集合常用功能
                                                        ......
  • Redis学习(五)之redis中的数据类型之Set类型
      1、set是字符串无序集合,可以执行交集,并集,差集运算。 2、sismember可以判断元素是否存在。  1、比如给新闻添加标签。就可以在点开新闻的时候,看到它有哪些标签......
  • 篇(13)-Asp.Net Core入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击
    入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击关于Asp.NetCore的新特性Async,异步,还是需要掌握的,这个特性,按微软官方的说法是可以提高你服务器的负荷,可以......
  • NET 6 实现滑动验证码(一)、创建工程
    目录实现滑动验证码的目的创建.NET6工程实现滑动验证码的目的传统验证码实现起来比较简单,但在OCR技术越来越成熟的情况下,验证码的破解难度越来越低,但如果将验证码难度加......
  • 传奇服务端各文件名字功能
    传奇服务端各文件名字功能一、传奇常见的引擎:GOM单职业or三职业GEE单职业or三职业or合击LEG合击or三职业or复古HERO合击or三职业or复古BLUE合击or三职......
  • Redis 常见问题
    Redis常见问题落叶他乡树,寒灯独夜人。一、什么是Redis?Redis是一个使用C语言写成的,开源的高性能key-value非关系缓存数据库;Redis的数据都基于缓存的,......