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