Redis——模拟手机验证码发送
使用redis模擬手機驗證碼發(fā)送,規(guī)定一個手機號一天只能請求三次驗證碼,且每次請求的驗證碼只有兩分鐘就會過期
1、首先寫一個函數(shù)隨機產(chǎn)生六位驗證碼,使用random函數(shù)
//隨機生成六位驗證碼public static String getCode(){String code="";Random random = new Random();//隨機函數(shù)生成驗證碼for (int i = 0; i < 6; i++) {code+= random.nextInt(10);}return code;}2、寫一個函數(shù)判斷一個手機號一天驗證碼發(fā)送次數(shù),流程如下:
①使用jedis連接redis,第一個參數(shù)為linux虛擬地址,第二個參數(shù)為redis默認端口號
②生成存儲手機號發(fā)送次數(shù),驗證碼對應(yīng)的key
③判斷該手機號一天發(fā)送驗證碼的次數(shù),為空表明手機號未請求過,則將手機號次數(shù)存儲進入,bi并設(shè)置過期時間為1天,若小于三次則自增
④存儲驗證碼進redis,并設(shè)置過期時間為2分鐘
//判斷手機一天是否發(fā)送超過3次驗證碼public static Boolean Phone(String phone){//連接linux中的redisJedis jedis = new Jedis("192.168.12.188",6379);//生成手機存儲的keyString phoneKey="Phone"+phone+"p";//生成存儲驗證碼的keyString codeKey="Code"+phone+"c";//獲取key為phoneKey的值String key = jedis.get(phoneKey);//判斷redis中phoneKey值是否為空if (key==null){//為空存儲phoneKey,并設(shè)置過期時間為1天,值為1,代表發(fā)送過一次jedis.setex(phoneKey,24*60*60,"1");}//若不為空,且發(fā)送次數(shù)小于3,phoneKey++else if (Integer.parseInt(key)<=2){jedis.incr(phoneKey);}//若發(fā)送超過三次,提示不能發(fā)送else {System.out.println("今天發(fā)送次數(shù)已經(jīng)超過三次,不能再獲取驗證碼");jedis.close();return false;}//獲取驗證碼String code=getCode();//存儲驗證碼jedis.setex(codeKey,120,code);jedis.close();return true;}3、判斷驗證碼是否正確
①通過手機號拼接字符串,獲取驗證碼的key值
②驗證驗證碼是否正確
//驗證驗證碼是否正確public static Integer Code(String code,String phone){//連接jedisJedis jedis = new Jedis("192.168.23.129",6379);String codekey="Code"+phone+"c";String s = jedis.get(codekey);//判斷驗證碼是否正確if (code.equals(s)){System.out.println("驗證碼正確");return 1;}else {System.out.println("驗證碼錯誤,請重新請求");return 0;}}4、啟動linux中redis服務(wù)端,找到redis.conf,啟動執(zhí)行下面命令即可啟動
redis-server /opt/redis-6.2.1/redis.conf5、執(zhí)行函數(shù)
①輸入手機號,并確認是否發(fā)送驗證碼
②調(diào)用判斷手機號發(fā)送驗證碼次數(shù)函數(shù),判斷是否三次已經(jīng)發(fā)完,若發(fā)完,直接退出
③輸入驗證碼,調(diào)用驗證驗證碼函數(shù),若正確,直接退出程序
④若輸入驗證碼失敗,確認是否繼續(xù)發(fā)送驗證碼
public static void main(String[] args) {//創(chuàng)建一個手機號String phone="";String tip="";Scanner scanner = new Scanner(System.in);System.out.print("請輸入手機號:");phone=scanner.nextLine();System.out.print("是否獲取驗證碼:(y/n)");tip=scanner.nextLine();if (tip.equals("y")){while (tip.equals("y")){//打印驗證碼到控制臺Boolean p=Phone(phone);if (!p){//發(fā)送超過三次,退出whilebreak;}System.out.println(getCode());System.out.print("請輸入驗證碼:");String code=scanner.nextLine();if (Code(code,phone).equals(1)){System.out.println("驗證正確");break;}System.out.print("是否重新獲取驗證碼:(y/n)");tip=scanner.nextLine();}}}運行結(jié)果如下
?
?
總結(jié)
以上是生活随笔為你收集整理的Redis——模拟手机验证码发送的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32F4 FPU浮点运算单元
- 下一篇: Redis实现手机验证码功能