基于redis的数字验证码的获取方法与流程

文档序号:11215786阅读:885来源:国知局
基于redis的数字验证码的获取方法与流程

本发明涉及数据处理技术领域,尤其涉及一种基于redis的数字验证码的获取方法。



背景技术:

随着互联网技术的蓬勃发展,用户越来越普遍地通过终端设备接入互联网获取各种资讯信息,办理各种业务等。为了保证信息的安全性,经常需要通过验证码的方式对操作进行验证。

现有技术中,用户通过移动终端获取数字验证码,具体操作步骤如下:

1、用户填写手机号码之后,点击获取验证码,服务器生成一个随机的数字序列作为数字验证码,并临时记录下来,同时将短信内容和用户的手机号码通过验证码短信接口提交到服务商。

2、服务商将短信即时发送到用户的手机,用户收到短信后,填写数字验证码,并发送到服务器,服务器将用户填写的数字验证码和服务器生成的数字序列进行比对,如果一致,则验证成功。

现有技术中的数字验证码的获取方法存在以下问题:

1、服务器在每次接收到用户获取数字验证码的请求时,都需要重新随机生成固定位数的数字验证码,增加了工作量。

2、不支持用户在规定时间内多次获取验证码,如果验证码误删除,则需要等待时间过期才能重新获取验证码,比较浪费时间。

3、由于验证码是随机生成的,因此不能保证用户获取的验证码在规定时间内的唯一性,从而影响安全性。



技术实现要素:

本发明提供了一种基于redis的数字验证码的获取方法,以解决现有技术中存在的问题。

本发明实施例提供了一种基于redis的数字验证码的获取方法,包括:

服务器获取预设时间内的用户数量;

根据所述用户数量利用随机函数生成包含第一数量个数字验证码的第一数组,所述第一数量个数字验证码按照第一顺序在所述第一数组中进行排列;

按照预设方式改变所述第一数量个数字验证码在所述第一数组中的排列顺序,生成第二数组,所述第一数量个数字验证码按照第二顺序在所述第二数组中进行排列;

将所述第二数组存储在redis链表中;

接收第一终端发送的验证码获取请求,所述验证码获取请求中包含第二终端id;

从所述redis链表中调用所述第二数组中的第一数字验证码发送给所述第二终端,所述第一数字验证码在所述redis链表中顺序排在最后位置;

所述第二终端将所述第一数字验证码发送给所述第一终端。

进一步的,在从所述redis链表中调用所述第二数组中的第一数字验证码发送给所述第二终端之后,所述方法还包括:

所述服务器将所述第一数字验证码添加在所述redis链表中的第一位置。

进一步的,所述服务器将所述第一数字验证码添加在所述redis链表中的第一位置具体包括:

所述服务器利用rpoplpush函数将第一数字验证码添加在所述redis链表中的第一位置。

进一步的,所述第一顺序具体包括:

按照所述数字验证码的数值由小到大的顺序。

进一步的,所述按照预设方式改变所述第一数量个数字验证码在所述第一数组中的排列顺序,生成第二数组具体包括:

利用shuffle函数将按照第一顺序排列的数字验证码处理成按照第二顺序排列的数字验证码。

进一步的,所述从所述redis链表中调用所述第二数组中的第一数字验证码发送给所述第二终端具体包括:

所述服务器利用rpop函数从所述第二数组中调用第一数字验证码,并生成发送信息发送给所述第二终端。

进一步的,所述接收第一终端发送的验证码获取请求之前,所述方法还包括:

所述第一终端向所述服务器发送登录信息,所述服务器对所述登录信息进行验证。

本发明实施例提供的基于redis的数字验证码的获取方法,服务器获取预设时间内的用户数量;根据用户数量利用随机函数生成包含第一数量个数字验证码的第一数组,第一数量个数字验证码按照第一顺序在第一数组中进行排列;按照预设方式改变第一数量个数字验证码在第一数组中的排列顺序,生成第二数组,第一数量个数字验证码按照第二顺序在第二数组中进行排列;将第二数组存储在redis链表中;接收第一终端发送的验证码获取请求,验证码获取请求中包含第二终端id;从redis链表中调用第二数组中的第一数字验证码发送给第二终端,第一数字验证码在redis链表中顺序排在最后位置;第二终端将第一数字验证码发送给第一终端。本发明实施例提供的方法,服务器预先生成数字验证码,且数字码长久有效;用户可以获取多个数字验证码,避免因数字码丢失,再次获取的时间等待;数字验证码根据预设时间内的用户数量生成,数量足够多,保证了在规定时间内不同用户获取数字码的唯一性。

附图说明

图1为本发明实施例提供的基于redis的数字验证码的获取方法的流程图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明技术方案中的第一终端包括具有处理和显示能力的终端设备,例如,智能电视等;第二终端包括具有处理和显示能力的移动终端设备,例如,智能手机等。

下面结合图1所示的基于redis的数字验证码的获取方法流程图,对本发明实施例提供的基于redis的数字验证码的获取方法进行详细说明。

如图1所示,本发明提供的基于redis的数字验证码的获取方法主要包括如下步骤:

步骤101,服务器获取预设时间内的用户数量。

可以在服务器内根据业务量预先设置一定时间内的有获取验证码需求的用户终端的数量。

例如,可以预设在5分钟内用户终端的数量为70000。

步骤102,根据用户数量利用随机函数生成包含第一数量个数字验证码的第一数组。

其中,第一数量个数字验证码按照第一顺序在第一数组中进行排列。第一顺序具体包括按照数字验证码的数值由小到大的顺序。第一数量为服务器生成的数字验证码的数量,该数量与预设的一定时间内的用户数量相关。

在一个具体的实施例中,根据预设的一定时间内的用户数量,利用超级文本预处理语言(hypertextpreprocessor,php)的rang函数生成100000-999999之间的包含89999条数字验证码的数组,89999条数字验证码在数组中按照由小到大的顺序进行排列。

步骤103,按照预设方式改变第一数量个数字验证码在第一数组中的排列顺序,生成第二数组。

其中,第一数量个数字验证码按照第二顺序在第二数组中进行排列。

在一个具体的实施例中,利用shuffle函数将按照数值由小到大的顺序排列的第一数组中的数字验证码的排列次序打乱,得到第二数组。第一数组和第二数组中的数字验证码的数量相同,仅排列次序不同。

步骤104,将第二数组存储在redis链表中。

将第一数组中的全部数字验证码用shuffle函数打乱顺序之后得到第二数组,将第二数组存入redis的链表中,之后用户每次取数字验证码时从redis中获取,不用再生成了。由于根据预设时间内的用户数量来确定数字验证码的数量,则数字验证码的数量足够大,因此在规定时间内不同用户得到的数字验证码不会重复,随着一定时间内用户数量的逐渐增加,可以重新利用range函数生成更大数量的数字验证码,打乱数字验证码的排序再存入redis链表中,从而始终保证规定时间内不同用户终端得到的数字码唯一。

步骤105,接收第一终端发送的验证码获取请求,验证码获取请求中包含第二终端id。

其中,第二终端id具体可以是用户所使用的移动终端的电话号码。

第一终端在业务操作过程中,如果需要获取数字验证码,则根据用户输入的操作指令获取到第二终端id,将包含有第二终端id的验证码获取请求发送给服务器,服务器接收该验证码获取请求。

接收第一终端发送的验证码获取请求之前,第一终端向服务器发送登录信息,服务器对登录信息进行验证。

服务器对登录信息进行验证具体包括:服务器在注册信息数据库中查询是否存在该登录信息,并核对登录信息中的用户名和密码是否匹配,如果验证成功,则服务器向第一终端发送登录成功信息,否则,向第一终端发送登录失败信息。

步骤106,从redis链表中调用第二数组中的第一数字验证码发送给第二终端。

其中,第一数字验证码在redis链表中顺序排在最后位置。

服务器从验证码获取请求中提取第二终端id,利用rpop函数从第二数组中调用在redis链表中顺序排在最后的第一数字验证码,并生成发送信息,根据第二终端id发送给第二终端。

在一个具体的实施例中,服务器从redis链表中调用第一数字验证码后生成短信息,根据移动终端的电话号码将含有数字验证码的短信息发送给第二终端。

步骤107,第二终端将第一数字验证码发送给第一终端。

第二终端可以预先下载控制第一终端的应用程序app,后者也可以通过本领域技术人员无需付出创造性劳动即能够想出的其他方式将第一终端和第二终端建立数据连接,便于后续进行数据通信。

优选的,在从redis链表中调用第二数组中的第一数字验证码发送给第二终端之后,服务器将第一数字验证码添加在redis链表中的第一位置。

具体的,服务器利用rpoplpush函数将第一数字验证码添加在redis链表中的第一位置,目的是循环利用生成的数字验证码,避免了服务器每次根据验证码获取请求重复生成数字验证码。

本发明实施例提供的基于redis的数字验证码的获取方法,服务器获取预设时间内的用户数量;根据用户数量利用随机函数生成包含第一数量个数字验证码的第一数组,第一数量个数字验证码按照第一顺序在第一数组中进行排列;按照预设方式改变第一数量个数字验证码在第一数组中的排列顺序,生成第二数组,第一数量个数字验证码按照第二顺序在第二数组中进行排列;将第二数组存储在redis链表中;接收第一终端发送的验证码获取请求,验证码获取请求中包含第二终端id;从redis链表中调用第二数组中的第一数字验证码发送给第二终端,第一数字验证码在redis链表中顺序排在最后位置;第二终端将第一数字验证码发送给第一终端。本发明实施例提供的方法,服务器预先生成数字验证码,且数字码长久有效;用户可以获取多个数字验证码,避免因数字码丢失,再次获取的时间等待;数字验证码根据预设时间内的用户数量生成,数量足够多,保证了在规定时间内不同用户获取数字码的唯一性。

专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件来实现,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。具体地,所述运算和控制部分都可以通络逻辑硬件实现,其可以是使用集成电路工艺制造出来的逻辑集成电路,本实施例对此不作限定。

结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本发明实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明实施例的具体实施方式而已,并不用于限定本发明实施例的保护范围,凡在本发明实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1