首页 > 数据库 >Redis(二) -- 练习

Redis(二) -- 练习

时间:2023-06-03 23:57:07浏览次数:45  
标签:regex String -- phoneNum 练习 Redis 验证码 matches 170

模拟手机验证码

需求:使用redis模拟手机验证码发送,验证码有效期60s,验证验证码输入不能超过3次,超过3次今天就没机会了

//验证手机号
/**
 * 判断字符串是否符合手机号码格式
 * 移动号段:   134 135 136 137 138 139 147 148 150 151 152 157 158 159  165 172 178 182 183 184 187 188 198
 * 联通号段:   130 131 132 145 146 155 156 166 170 171 175 176 185 186
 * 电信号段:   133 149 153 170 173 174 177 180 181 189  191  199
 * 虚拟运营商: 170
 */
// "[1]"代表下一位为数字可以是几,"[0-9]"代表可以为0-9中的一个,"[5,7,9]"表示可以是5,7,9中的任意一位,[^4]表示除4以外的任何一个,\\d{8}"代表后面是可以是0~9的数字,有8位。
String regex = "^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
public class PhoneDemo {
    public static void main(String[] args) throws InterruptedException {
        JedisPool pool = new JedisPool("linux01", 6379);
        Jedis jedis = pool.getResource();


        Scanner sc = new Scanner(System.in);
        System.out.print("请输入您的手机号:");
        String phoneNum = sc.nextLine();

        String regex="^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
        boolean matches = phoneNum.matches(regex);
        if (matches){
            //造验证码
            String code = getCode();

            //将验证码写到redis中  key:手机号  value:验证码
            jedis.setex(phoneNum,6,code);

            int count = 1;

            while (count <=3){
                //输入验证码
		System.out.print("请输入验证码:");
                String yourCode = sc.next();
                if(yourCode.equals(jedis.get(phoneNum))){
                    System.out.println("登录成功!!!");
                    //成功了就退出去
                    break;
                }else{
                    if (count == 3){
                        System.out.println("3次机会已经用完了!");
                    }else{
                        System.out.println("输入错误,请重新输入:");
                    }
                    count++;
                }
            }
        }else {
            System.out.println("手机号不正确");
        }
    }

    public static String getCode(){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int num = new Random().nextInt(10);
            sb.append(num);
        }
        return sb.toString();
    }
}

标签:regex,String,--,phoneNum,练习,Redis,验证码,matches,170
From: https://www.cnblogs.com/paopaoT/p/17455043.html

相关文章

  • 2023-6-3
    今天没有自律成功,发现欲望对自律的破坏性太强了,全身都很烫很热一样,晚上运动完喝了冻饮料后才算真正的冷静下来。我不知道以后还要怎么去控制这种欲望,感觉有另一个人在操控身体一样,但是还是要忍住,重新再一次计时,不要让欲望的恶魔占据自己的身体,有人还在盼望我的成功。今天浑浑噩......
  • property 用于以访问属性的方式调用函数
    property是Python内置的功能,常用来修饰类方法,用于以访问属性的方式调用函数。描述符对象为了能够实现访问属性就调用某个函数,这里将利用描述符对象作为本文的实现起点,当某个类定义了__get__方法后,通过其方法名称可以直接调用__get__proptery主要依赖于描述符的机制。p......
  • xgplayer的使用案例
    Tomyself:引用的相关类库见个人文件上传列表=>xgplayer.zip<template><divclass="video-player"><divclass="title"><a-icontype="close"class="close"@click="closeVideo"/>&......
  • AntDesign中a-menu的使用案例
    <template><divclass="nav-bar":class="{collapsed:collapsed}"><divclass="collapse-btn"@click="toggleCollapsed"><a-icon:type="collapsed?'menu-unfold':'......
  • 【论文】Crazyswarm论文
    《Crazyswarm:大型纳米四轴飞行器群》论文总结论文名称:Crazyswarm:ALargeNano-QuadcopterSwarm摘要为大量在室内密集编队飞行的微型四轴飞行器定义了一个系统架构。对于状态估计(stateestimation),我们开发了一种方法来可靠地跟踪具有相同运动捕捉标记排列的许多小刚体(无......
  • 6.6 数组排序案例分析
    冒泡排序classArrayUtil{publicstaticvoidsort(intdata[]){for(intx=0;x<data.length;x++){for(inty=0;y<data.length-x-1;y++){//注意这里的-x-1含义;if(data[y]<data[y+1]){......
  • 通过DSL实现Elasticsearch数据排序功能
    普通字段排序语法:点击查看代码GET /indexName/_search{  "query": {    "match_all": {}  },  "sort": [    {      "FIELD": "desc"  // 排序字段、排序方式ASC、DESC    }  ]}示例:点击查看代码GET/hotel/_search{"q......
  • TypeScript编程 读书笔记
    @目录TypeScript编程读书笔记TypeScript概述关于编译器类型系统javascript和typescript类型系统比较类型全解什么是类型类型术语类型浅谈anyunknownbooleannumberbigintstringsymbol对象类型别名、并集、交集类型别名并集类型和交集类型数组元组null、undefined、void和never枚举......
  • 【ROS学习】初学ROS的小项目
    ROS学习:turtle控制turtle旋转首先查看turtlesim里面的节点,使用rqt_graph查看节点流图/**@Description:这是一个让turtle旋转的rospublisher*@Version:*@Autor:copy*@Date:2022-03-1217:28:55*@LastEditors:copy*@LastEditTime:2022-03-1217:42:00......
  • 【ROS学习】配置rotors-simulator
    本文按照https://github.com/ethz-asl/rotors_simulator一步一步搭建并且踩坑记录。雷第一个坑:尽量不要在虚拟机上跑,因为你在catkinmake的时候就会卡住。在原文中也提到了,第一次加载gazebo的时候会出现超时error,不要慌,关闭当前gazebo窗口再次输入用法的1命令。好像用不......