本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展,用戶(hù)越來(lái)越普遍地通過(guò)終端設(shè)備接入互聯(lián)網(wǎng)獲取各種資訊信息,辦理各種業(yè)務(wù)等。為了保證信息的安全性,經(jīng)常需要通過(guò)驗(yàn)證碼的方式對(duì)操作進(jìn)行驗(yàn)證。
現(xiàn)有技術(shù)中,用戶(hù)通過(guò)移動(dòng)終端獲取數(shù)字驗(yàn)證碼,具體操作步驟如下:
1、用戶(hù)填寫(xiě)手機(jī)號(hào)碼之后,點(diǎn)擊獲取驗(yàn)證碼,服務(wù)器生成一個(gè)隨機(jī)的數(shù)字序列作為數(shù)字驗(yàn)證碼,并臨時(shí)記錄下來(lái),同時(shí)將短信內(nèi)容和用戶(hù)的手機(jī)號(hào)碼通過(guò)驗(yàn)證碼短信接口提交到服務(wù)商。
2、服務(wù)商將短信即時(shí)發(fā)送到用戶(hù)的手機(jī),用戶(hù)收到短信后,填寫(xiě)數(shù)字驗(yàn)證碼,并發(fā)送到服務(wù)器,服務(wù)器將用戶(hù)填寫(xiě)的數(shù)字驗(yàn)證碼和服務(wù)器生成的數(shù)字序列進(jìn)行比對(duì),如果一致,則驗(yàn)證成功。
現(xiàn)有技術(shù)中的數(shù)字驗(yàn)證碼的獲取方法存在以下問(wèn)題:
1、服務(wù)器在每次接收到用戶(hù)獲取數(shù)字驗(yàn)證碼的請(qǐng)求時(shí),都需要重新隨機(jī)生成固定位數(shù)的數(shù)字驗(yàn)證碼,增加了工作量。
2、不支持用戶(hù)在規(guī)定時(shí)間內(nèi)多次獲取驗(yàn)證碼,如果驗(yàn)證碼誤刪除,則需要等待時(shí)間過(guò)期才能重新獲取驗(yàn)證碼,比較浪費(fèi)時(shí)間。
3、由于驗(yàn)證碼是隨機(jī)生成的,因此不能保證用戶(hù)獲取的驗(yàn)證碼在規(guī)定時(shí)間內(nèi)的唯一性,從而影響安全性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng),以解決現(xiàn)有技術(shù)中存在的問(wèn)題。
本發(fā)明實(shí)施例提供了一種基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng),包括:服務(wù)器、第一終端和第二終端;
所述服務(wù)器包含獲取模塊、生成模塊、排序模塊、存儲(chǔ)模塊、接收模塊和調(diào)用模塊;
所述獲取模塊用于,獲取預(yù)設(shè)時(shí)間內(nèi)的用戶(hù)數(shù)量;
所述生成模塊用于,根據(jù)所述用戶(hù)數(shù)量利用隨機(jī)函數(shù)生成包含第一數(shù)量個(gè)數(shù)字驗(yàn)證碼的第一數(shù)組,所述第一數(shù)量個(gè)數(shù)字驗(yàn)證碼按照第一順序在所述第一數(shù)組中進(jìn)行排列;
所述排序模塊用于,按照預(yù)設(shè)方式改變所述第一數(shù)量個(gè)數(shù)字驗(yàn)證碼在所述第一數(shù)組中的排列順序,生成第二數(shù)組,所述第一數(shù)量個(gè)數(shù)字驗(yàn)證碼按照第二順序在所述第二數(shù)組中進(jìn)行排列;
所述存儲(chǔ)模塊用于,將所述第二數(shù)組存儲(chǔ)在redis鏈表中;
所述接收模塊用于,接收第一終端發(fā)送的驗(yàn)證碼獲取請(qǐng)求,所述驗(yàn)證碼獲取請(qǐng)求中包含第二終端id;
所述調(diào)用模塊用于,從所述redis鏈表中調(diào)用所述第二數(shù)組中的第一數(shù)字驗(yàn)證碼發(fā)送給所述第二終端,所述第一數(shù)字驗(yàn)證碼在所述redis鏈表中順序排在最后位置;
所述第一終端用于,向所述服務(wù)器發(fā)送驗(yàn)證碼獲取請(qǐng)求;
所述第二終端用于,將所述第一數(shù)字驗(yàn)證碼發(fā)送給所述第一終端。
進(jìn)一步的,所述服務(wù)器還包括添加模塊;
所述添加模塊用于,將所述第一數(shù)字驗(yàn)證碼添加在所述redis鏈表中的第一位置。
進(jìn)一步的,所述添加模塊具體用于:
利用rpoplpush函數(shù)將第一數(shù)字驗(yàn)證碼添加在所述redis鏈表中的第一位置。
進(jìn)一步的,所述第一順序具體包括:
按照所述數(shù)字驗(yàn)證碼的數(shù)值由小到大的順序。
進(jìn)一步的,所述排序模塊具體用于:
利用shuffle函數(shù)將按照第一順序排列的數(shù)字驗(yàn)證碼處理成按照第二順序排列的數(shù)字驗(yàn)證碼。
進(jìn)一步的,所述調(diào)用模塊具體用于:
利用rpop函數(shù)從所述第二數(shù)組中調(diào)用第一數(shù)字驗(yàn)證碼,并生成發(fā)送信息發(fā)送給所述第二終端。
進(jìn)一步的,所述第一終端還用于:
向所述服務(wù)器發(fā)送登錄信息,以使所述服務(wù)器對(duì)所述登錄信息進(jìn)行驗(yàn)證。
本發(fā)明實(shí)施例提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng),服務(wù)器預(yù)先生成數(shù)字驗(yàn)證碼,且數(shù)字碼長(zhǎng)久有效;用戶(hù)可以獲取多個(gè)數(shù)字驗(yàn)證碼,避免因數(shù)字碼丟失,再次獲取的時(shí)間等待;數(shù)字驗(yàn)證碼根據(jù)預(yù)設(shè)時(shí)間內(nèi)的用戶(hù)數(shù)量生成,數(shù)量足夠多,保證了在規(guī)定時(shí)間內(nèi)不同用戶(hù)獲取數(shù)字碼的唯一性。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)的示意圖。
圖2為本發(fā)明提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)的具體工作過(guò)程流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明技術(shù)方案中的第一終端包括具有處理和顯示能力的終端設(shè)備,例如,智能電視等;第二終端包括具有處理和顯示能力的移動(dòng)終端設(shè)備,例如,智能手機(jī)等。
下面結(jié)合圖1所示的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)示意圖,對(duì)本發(fā)明實(shí)施例提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)進(jìn)行詳細(xì)說(shuō)明。
如圖1所示,本發(fā)明提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)主要包括:服務(wù)器1、第一終端2和第二終端3;
服務(wù)器1包含獲取模塊11、生成模塊12、排序模塊13、存儲(chǔ)模塊14、接收模塊15和調(diào)用模塊16;
獲取模塊11用于,獲取預(yù)設(shè)時(shí)間內(nèi)的用戶(hù)數(shù)量;
生成模塊12用于,根據(jù)用戶(hù)數(shù)量利用隨機(jī)函數(shù)生成包含第一數(shù)量個(gè)數(shù)字驗(yàn)證碼的第一數(shù)組,第一數(shù)量個(gè)數(shù)字驗(yàn)證碼按照第一順序在第一數(shù)組中進(jìn)行排列;
排序模塊13用于,按照預(yù)設(shè)方式改變第一數(shù)量個(gè)數(shù)字驗(yàn)證碼在第一數(shù)組中的排列順序,生成第二數(shù)組,第一數(shù)量個(gè)數(shù)字驗(yàn)證碼按照第二順序在第二數(shù)組中進(jìn)行排列。
其中,第一順序具體包括:按照數(shù)字驗(yàn)證碼的數(shù)值由小到大的順序。
具體的,排序模塊13利用shuffle函數(shù)將按照第一順序排列的數(shù)字驗(yàn)證碼處理成按照第二順序排列的數(shù)字驗(yàn)證碼。
存儲(chǔ)模塊14用于,將第二數(shù)組存儲(chǔ)在redis鏈表中;
接收模塊15用于,接收第一終端發(fā)送的驗(yàn)證碼獲取請(qǐng)求,驗(yàn)證碼獲取請(qǐng)求中包含第二終端id;
調(diào)用模塊16用于,從redis鏈表中調(diào)用第二數(shù)組中的第一數(shù)字驗(yàn)證碼發(fā)送給第二終端,第一數(shù)字驗(yàn)證碼在redis鏈表中順序排在最后位置;
具體的,利用rpop函數(shù)從第二數(shù)組中調(diào)用第一數(shù)字驗(yàn)證碼,并生成發(fā)送信息發(fā)送給第二終端。
第一終端2用于,向服務(wù)器發(fā)送驗(yàn)證碼獲取請(qǐng)求。
另外,第一終端2還用于:向服務(wù)器1發(fā)送登錄信息,以使服務(wù)器1對(duì)登錄信息進(jìn)行驗(yàn)證。
第二終端3用于,將第一數(shù)字驗(yàn)證碼發(fā)送給第一終端。
另外,服務(wù)器1還包括添加模塊17;
添加模塊17用于,將第一數(shù)字驗(yàn)證碼添加在redis鏈表中的第一位置。
具體的,利用rpoplpush函數(shù)將第一數(shù)字驗(yàn)證碼添加在redis鏈表中的第一位置。
圖2為本發(fā)明提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng)的具體工作過(guò)程流程圖。如圖2所示,包括如下步驟:
步驟201,服務(wù)器獲取預(yù)設(shè)時(shí)間內(nèi)的用戶(hù)數(shù)量。
可以在服務(wù)器內(nèi)根據(jù)業(yè)務(wù)量預(yù)先設(shè)置一定時(shí)間內(nèi)的有獲取驗(yàn)證碼需求的用戶(hù)終端的數(shù)量。
例如,可以預(yù)設(shè)在5分鐘內(nèi)用戶(hù)終端的數(shù)量為70000。
步驟202,根據(jù)用戶(hù)數(shù)量利用隨機(jī)函數(shù)生成包含第一數(shù)量個(gè)數(shù)字驗(yàn)證碼的第一數(shù)組。
其中,第一數(shù)量個(gè)數(shù)字驗(yàn)證碼按照第一順序在第一數(shù)組中進(jìn)行排列。第一順序具體包括按照數(shù)字驗(yàn)證碼的數(shù)值由小到大的順序。第一數(shù)量為服務(wù)器生成的數(shù)字驗(yàn)證碼的數(shù)量,該數(shù)量與預(yù)設(shè)的一定時(shí)間內(nèi)的用戶(hù)數(shù)量相關(guān)。
在一個(gè)具體的實(shí)施例中,根據(jù)預(yù)設(shè)的一定時(shí)間內(nèi)的用戶(hù)數(shù)量,利用超級(jí)文本預(yù)處理語(yǔ)言(hypertextpreprocessor,php)的rang函數(shù)生成100000-999999之間的包含89999條數(shù)字驗(yàn)證碼的數(shù)組,89999條數(shù)字驗(yàn)證碼在數(shù)組中按照由小到大的順序進(jìn)行排列。
步驟203,按照預(yù)設(shè)方式改變第一數(shù)量個(gè)數(shù)字驗(yàn)證碼在第一數(shù)組中的排列順序,生成第二數(shù)組。
其中,第一數(shù)量個(gè)數(shù)字驗(yàn)證碼按照第二順序在第二數(shù)組中進(jìn)行排列。
在一個(gè)具體的實(shí)施例中,利用shuffle函數(shù)將按照數(shù)值由小到大的順序排列的第一數(shù)組中的數(shù)字驗(yàn)證碼的排列次序打亂,得到第二數(shù)組。第一數(shù)組和第二數(shù)組中的數(shù)字驗(yàn)證碼的數(shù)量相同,僅排列次序不同。
步驟204,將第二數(shù)組存儲(chǔ)在redis鏈表中。
將第一數(shù)組中的全部數(shù)字驗(yàn)證碼用shuffle函數(shù)打亂順序之后得到第二數(shù)組,將第二數(shù)組存入redis的鏈表中,之后用戶(hù)每次取數(shù)字驗(yàn)證碼時(shí)從redis中獲取,不用再生成了。由于根據(jù)預(yù)設(shè)時(shí)間內(nèi)的用戶(hù)數(shù)量來(lái)確定數(shù)字驗(yàn)證碼的數(shù)量,則數(shù)字驗(yàn)證碼的數(shù)量足夠大,因此在規(guī)定時(shí)間內(nèi)不同用戶(hù)得到的數(shù)字驗(yàn)證碼不會(huì)重復(fù),隨著一定時(shí)間內(nèi)用戶(hù)數(shù)量的逐漸增加,可以重新利用range函數(shù)生成更大數(shù)量的數(shù)字驗(yàn)證碼,打亂數(shù)字驗(yàn)證碼的排序再存入redis鏈表中,從而始終保證規(guī)定時(shí)間內(nèi)不同用戶(hù)終端得到的數(shù)字碼唯一。
步驟205,接收第一終端發(fā)送的驗(yàn)證碼獲取請(qǐng)求,驗(yàn)證碼獲取請(qǐng)求中包含第二終端id。
其中,第二終端id具體可以是用戶(hù)所使用的移動(dòng)終端的電話號(hào)碼。
第一終端在業(yè)務(wù)操作過(guò)程中,如果需要獲取數(shù)字驗(yàn)證碼,則根據(jù)用戶(hù)輸入的操作指令獲取到第二終端id,將包含有第二終端id的驗(yàn)證碼獲取請(qǐng)求發(fā)送給服務(wù)器,服務(wù)器接收該驗(yàn)證碼獲取請(qǐng)求。
接收第一終端發(fā)送的驗(yàn)證碼獲取請(qǐng)求之前,第一終端向服務(wù)器發(fā)送登錄信息,服務(wù)器對(duì)登錄信息進(jìn)行驗(yàn)證。
服務(wù)器對(duì)登錄信息進(jìn)行驗(yàn)證具體包括:服務(wù)器在注冊(cè)信息數(shù)據(jù)庫(kù)中查詢(xún)是否存在該登錄信息,并核對(duì)登錄信息中的用戶(hù)名和密碼是否匹配,如果驗(yàn)證成功,則服務(wù)器向第一終端發(fā)送登錄成功信息,否則,向第一終端發(fā)送登錄失敗信息。
步驟206,從redis鏈表中調(diào)用第二數(shù)組中的第一數(shù)字驗(yàn)證碼發(fā)送給第二終端。
其中,第一數(shù)字驗(yàn)證碼在redis鏈表中順序排在最后位置。
服務(wù)器從驗(yàn)證碼獲取請(qǐng)求中提取第二終端id,利用rpop函數(shù)從第二數(shù)組中調(diào)用在redis鏈表中順序排在最后的第一數(shù)字驗(yàn)證碼,并生成發(fā)送信息,根據(jù)第二終端id發(fā)送給第二終端。
在一個(gè)具體的實(shí)施例中,服務(wù)器從redis鏈表中調(diào)用第一數(shù)字驗(yàn)證碼后生成短信息,根據(jù)移動(dòng)終端的電話號(hào)碼將含有數(shù)字驗(yàn)證碼的短信息發(fā)送給第二終端。
步驟207,第二終端將第一數(shù)字驗(yàn)證碼發(fā)送給第一終端。
第二終端可以預(yù)先下載控制第一終端的應(yīng)用程序app,后者也可以通過(guò)本領(lǐng)域技術(shù)人員無(wú)需付出創(chuàng)造性勞動(dòng)即能夠想出的其他方式將第一終端和第二終端建立數(shù)據(jù)連接,便于后續(xù)進(jìn)行數(shù)據(jù)通信。
優(yōu)選的,在從redis鏈表中調(diào)用第二數(shù)組中的第一數(shù)字驗(yàn)證碼發(fā)送給第二終端之后,服務(wù)器將第一數(shù)字驗(yàn)證碼添加在redis鏈表中的第一位置。
具體的,服務(wù)器利用rpoplpush函數(shù)將第一數(shù)字驗(yàn)證碼添加在redis鏈表中的第一位置,目的是循環(huán)利用生成的數(shù)字驗(yàn)證碼,避免了服務(wù)器每次根據(jù)驗(yàn)證碼獲取請(qǐng)求重復(fù)生成數(shù)字驗(yàn)證碼。
本發(fā)明實(shí)施例提供的基于redis的數(shù)字驗(yàn)證碼的獲取系統(tǒng),服務(wù)器預(yù)先生成數(shù)字驗(yàn)證碼,且數(shù)字碼長(zhǎng)久有效;用戶(hù)可以獲取多個(gè)數(shù)字驗(yàn)證碼,避免因數(shù)字碼丟失,再次獲取的時(shí)間等待;數(shù)字驗(yàn)證碼根據(jù)預(yù)設(shè)時(shí)間內(nèi)的用戶(hù)數(shù)量生成,數(shù)量足夠多,保證了在規(guī)定時(shí)間內(nèi)不同用戶(hù)獲取數(shù)字碼的唯一性。
專(zhuān)業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件來(lái)實(shí)現(xiàn),在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明實(shí)施例的范圍。具體地,所述運(yùn)算和控制部分都可以通絡(luò)邏輯硬件實(shí)現(xiàn),其可以是使用集成電路工藝制造出來(lái)的邏輯集成電路,本實(shí)施例對(duì)此不作限定。
結(jié)合本文中所公開(kāi)的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(ram)、內(nèi)存、只讀存儲(chǔ)器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤(pán)、可移動(dòng)磁盤(pán)、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上所述的具體實(shí)施方式,對(duì)本發(fā)明實(shí)施例的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本發(fā)明實(shí)施例的具體實(shí)施方式而已,并不用于限定本發(fā)明實(shí)施例的保護(hù)范圍,凡在本發(fā)明實(shí)施例的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明實(shí)施例的保護(hù)范圍之內(nèi)。