用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");
    }

    static void getValidation(String tel) {
        //主机、端口
        Jedis jedis = new Jedis("myhost", 6379);
        //密码
        jedis.auth("mypassword");
        try {
            //获取电话号码
            String phoneNo = tel;
            //本人用1库进行测试
            jedis.select(1);
            String countKey = phoneNo + ":count";
            String codeKey = phoneNo + ":code";
            //获取指定的电话号码发送的验证码次数
            String cnt = jedis.get(countKey);
            //对次数进行判断
            if (cnt == null) {
                //没有发送过验证码
                jedis.setex(countKey, 60 * 60 * 24, "1");
                //发送验证码,假设生成的验证码
                StringBuffer code = new StringBuffer();
                for (int i = 0; i < 6; i++) {
                    code.append(new Random().nextInt(10));
                }
                System.out.println("code:" + code);
                //缓存中添加验证码
                jedis.setex(codeKey, 60 * 2, code.toString());
            } else {
                if (Integer.parseInt(cnt) < 3) {
                    //发送验证码,假设生成的验证码
                    StringBuffer code = new StringBuffer();
                    for (int i = 0; i < 6; i++) {
                        code.append(new Random().nextInt(10));
                    }
                    System.out.println("code:" + code);
                    //缓存中添加验证码
                    jedis.setex(codeKey, 60 * 2, code.toString());
                    //递增手机发送数量
                    jedis.incr(countKey);
                } else {
                    //返回超出3次,禁止发送
                    System.out.println("超出3次,禁止发送");
                }
            }
        } catch (Exception e) {
            //这边其实是需要回滚下redis
            e.printStackTrace();
        } finally {
            //关闭redis
            if (jedis != null) {
                jedis.close();
            }
        }
    }

    static void checkValidation(String code, String tel) {
        Jedis jedis = null;
        try {
            jedis = new Jedis("myhost", 6379);
            //密码
            jedis.auth("mypassword");
            jedis.select(1);
            String codeKey = tel + ":code";
            String validation = jedis.get(codeKey);
            if (validation == null) {
                System.out.println("验证码未发送或者失效");
            } else {
                if (validation.equals(code)) {
                    System.out.println("验证成功");
                } else {
                    System.out.println("验证失败");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}

原文地址:https://www.cnblogs.com/chenmz1995/p/12562328.html

时间: 2024-11-11 23:36:11

用Java redis 实现发送手机验证码的功能的相关文章

使用“互亿无线”短信验证码接口来实现发送手机验证码功能

今天 突然发神经想到要做一个发送手机验证码的功能,因为看到很多用户注册这个模块都有手机验证这个功能,于是乎,俺就上网查了很多资料,整理了一下,做了一个简单的手机验证码实现功能.不过我用的是试用账号,只可以发送30个短信,如果要更多的话,需要充值,这是我感到很遗憾的事情.下面跟着我来实现这个功能吧,大神勿喷哈. 1.首先,上互亿无线注册一个账号,http://www.ihuyi.com/,注册后你可以看到你的账号参数信息: 2.使用VS创建一个空的Web应用程序: 注册静态页面:index.htm

利用线程创建发送手机验证码的工具类

1.生成验证码类 package com.util; import java.util.Timer; import java.util.TimerTask; /** * @description 手机发送验证码工具类 */ public class MessageCode extends TimerTask{ private Timer timer; /** * @description 短信验证码的内容 */ private String messageCode; /** * @descrip

发送手机验证码

遇到困难:并没有找到在客户端直接发送验证码到邮箱的代码   解决困难:之前没有找到免费发送手机验证码的接口,所以打算用邮箱发送验证码,后来有个同学告诉我用mod可以免费发送短信,于是改成发送短信验证码.          步骤:          1. 第一步当然是注册账号          2. 点击 进入后台→选择 SecurityCodeSDK→点击 立即使用→选择应用的平台→获取App key和App Secret          3. 下载sdk,解压后是这样的: 4. 之后安装官网

layui发送手机验证码

<!DOCTYPE html> <html> <head>     <meta charset="utf-8">     <title>登入</title>     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">     <meta n

C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制

https://blog.csdn.net/IT_xiao_guang_guang/article/details/104299983 前言 ??1.发送手机验证码用的是网建的SMS接口(http://sms.webchinese.cn/) ??2.手机验证码简单的做了以下限制: ????①发送验证码1分钟只能点击发送1次 ????②相同IP手机号码1天最多提交20次(这里我用的是本地局域网IP) ????③加入图形验证码 ??注:SMS官网上的建议还有要对手机号码次数进行限制:单个手机号码30

Java调用阿里大于接口发送手机验证码

前五步可参考阿里云服务文档:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.2b152c42DoJ7Mt 一.入驻阿里云 1.阿里云注册入口:点击注册页面 2.实名认证:点击进行实名认证 二.开通短信服务 1.开通短信服务:点击开通短信服务 2.进入控制台:点击查看控制台页面 三.获取AccessKey(记得保存!) 1创建AccessKey:点击创建AccessKey 2.获取AccessKey

Java实现发送手机验证码功能

进入秒嘀科技(https://sms.miaodiyun.com/),注册一个账号. 登录账号 进行企业认证,营业执照去网上搜一个,有时候可能识别不出来,多换几张,清晰的,还在运营中的就行,证件号码就是注册号,最后点击提交. 进行新建你发送短信的模板 添加完成之后要等待审核,不通过的话记得一定要看规范,之后进行短信配置,这里边的ip要的是在河南省的,所以你可以去这里找你的ip 获取ACCOUNT SID还有AUTH TOKEN 下载demo,导入项目,进行修改代码,之后就OK了 原文地址:htt

[.NET开发] C#实现发送手机验证码功能

之前不怎么了解这个,一直以为做起来很复杂. 直到前两天公司要求要做这个功能. 做了之后才发现 这不过就是一个POST请求就能实现的东西.现在给大家分享一下,有不足之处还请多多指教. 废话不多说 直接上代码. 1.先获取一个随机数字验证码(这里是6位数),然后编辑好需要发送的内容. 这里还做了个手机号码合法性的验证. public string VerificationCode(string mobile) { if (IsHandset(mobile)) { string code = new

jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head> 5 <title></title&