发明内容
(一)要解决的技术问题
本发明所要解决的技术问题是:解决用户在支付或者其它身份验证活动时由于待验证端网络不可接入等原因造成的不便,使得待验证端在离线状态下生成动态验证码实现身份验证,即可完成支付等活动,并且能够提高账户的安全。
(二)技术方案
为了解决上述问题,本发明提供了一种离线动态验证码的生成方法,终端软件在待验证端通过动态验证码生成方法生成动态的验证码,通过BS端交由Webservice服务器验证,在验证通过后即可进行交易或者帐号登录,这便完成动态验证码的作用。图1为动态验证码的一种应用场景。
所述离线动态验证码的生成方法是一种数字序列生成方法,生成的数字位数为可按照实际需要设定,如可设定为8位,更新间隔可按照实际需要设定,如可设定为30s。
具体包括以下步骤:
A、获取待验证端的ID码和待验证端的系统时间;
B、对步骤A中获取的待验证端的系统时间进行预处理,实现设定时间间隔内动态码验证码的自动更换功能;
C、将步骤A获取的待验证端的ID码数字串与步骤B中预处理后的系统时间数字串求和;
D、计算步骤C中求和后所得数字串的下标变量i;
E、根据步骤D中下标变量i截取步骤C中求和后所得数字串的子数字串,此截取的子数字串即为动态验证码。
其中步骤A中具体包含以下步骤:
A1、获取所述待验证端的ID码,存储到变量k中;获取所述待验证端的系统时间,存储到变量t中;
A2、当步骤A1中存储到变量k中的ID码的数字串位数﹥14时,从后向前截取n位数字串,n≤14,将这n位数字串再次存储到变量k中;
A3、将步骤A1中存储到变量t中的系统时间的数字串从后向前截取n位数字串,n≤14,将这n位数字串存储到变量t1中。
其中步骤B中具体包含以下步骤:
B1、截取变量t1中所存储的系统时间数字串的最后两位值,将此值存储到变量temp中;将变量temp与30比较,判断的结果存储到变量flag中,大于或等于30时变量flag的值为真,小于30时变量flag的值为假;
B2、取步骤B1的变量flag,当flag值为真时,将变量temp值重置为30;当flag值为假时,将变量temp值重置为00;
B3、截取变量t1中的前n-2位数字串,将此值存储到变量temp1中,将步骤B2中重置后temp中的两位数字串置于temp1后,得到n位的数字串;将此n位数字串存储到变量t2中。
其中步骤C中具体包含以下步骤:
C1、将变量k和t2中的数字串分别从最低位依次取对应的每位数值,然后求和,若求和结果大于9则置变量carryflag为真,小于或等于9时则置变量carryflag为假;并将当前位的数值置为每位求和结果的个位数;
C2、按照步骤C1对应位求和并且每位求和前都判断carryflag是否为真,若为真则在当前位取和时加1,最高位求和进位不考虑;将数字串K和T2的求和值置于变量s中。
其中步骤D中具体包含以下步骤:
D1、截取变量s中n位数字串中的最后m位数字,分别存储到变量s1、s2到sm中,m≤n;
D2、将步骤D1中的m位变量s1、s2到sm求和;
D3、截取步骤D2中的求和值的个位数值,将其存储于下标变量i中。
其中步骤E中具体包含以下步骤:
E1、对变量s中的数字串从左到右数到下标变量i位,即从第i位开始截取子数字串;
E2、在从变量s中自第i位开始截取子数字串时,若到串尾,不够子数字串的位数时,则循环回串首继续截取。
此刻截取到的子数字串即为动态验证码。
(三)有益效果
本发明动态验证码的生成方法并不十分复杂,但破解难度较高,安全性高;并且待验证端上安装终端软件后,以此作为便携移动终端系统,使用时根据待验证端ID码和系统时间就可产生动态验证码,在待验证端有信号或无信号离线状态照样使用。将产生的验证码手动输入到BS端,待同webservice服务器验证,匹配的话即验证通过,这样很大程度上给用户的支付或者其它身份验证活动时提供方便。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例适于说明本发明,但不用来限制本发明的范围。
本实施例以手机端为待验证端,需获取的ID码为手机号码
图2是离线动态验证码的生成方法流程图,如图2所示,所述方法包括如下步骤:
步骤S100:获取待验证端的ID码和待验证端的系统时间。
此种生成验证码的方法是基于待验证端的手机号码和系统时间这两个数字序列。
获取待验证端的手机号码,存储到变量k中。
如ID码数字串多于14位,因为时间的数字串只有14位,此时对n的取值需要≤14方可。此时就需要分别对变量k和t中的字符串进行截取n位,将这n位数字串存储到变量k和t1中。
如ID码数字串少于14位,n值可以为此ID码数字串的位数,此时值只需要对系统时间进行截取n位。
例如手机号码为12345678901,因为手机号码是11位的数字串,此时n的取值可为11,即变量k中存储的为11位数字串;
获取待验证端的系统时间,存储到变量t中,例如时间为2012年11月10日11点23分12秒,则系统时间的原始数字序列为20121110112312的14位数字串;
终端软件默认的系统时间为标准时间,以此和BS服务器端时间相一致。
由于n取值为11,设定将系统时间数字串从后向前截取11位,此刻截取后的时间数字串为21110112312,这个即是t1的值;
步骤S200:对步骤S100获取的待验证端的系统时间进行预处理,实现设定时间间隔内动态码验证码的自动更换功能;。
获得手机号码和系统时间这两项本算法的输入数据后,需要进行系统时间预处理,以此来实现给定时间间隔内动态码的自动更换功能;
该动态码的自动更换的时间间隔可依据实际应用在30-60秒之间动态设定,本实施例的自动更换时间间隔为30秒。
判断系统时间数字串的秒数值:
取出之前存储的时间串t,判断其秒数值,即最后两位的值12,将此值取出存为另一变量temp,将其与30比较,判断出的结果大于、等于或小于存储到变量flag中,大于或等于时flag的值为真,小于时flag的值为假;
重置系统时间数字串的秒数值:
取出变量flag,若flag是真,即秒数值大于等于30,则置秒数值为30;若flag为假,即秒数值小于30,则置秒数值为00;此例中置位后的秒数值为00;
获取新的系统时间数字串:
在判断时间串秒数值后,重新组装系统时间串。此过程需要以下几步:
从时间串t中截取除两位秒数值外的n-2位即9位字符串211101123,将此值存储到变量temp1中;
将重置后temp中的两位数字串置于temp1后面,即得21110112300;
将调整后的系统时间21110112300存储到t2中。
步骤S300:将步骤S100中获取的待验证端的手机号码数字串与步骤S200中调整后的系统时间数字求和。
将变量k和t2中的数字串分别从最低位依次取对应的每位数值,然后求和,若求和结果大于9则置变量carryflag为真,小于或等于9时则置变量carryflag为假;并将当前位的数值置为每位求和结果的个位数。
按照步骤S300对应位求和并且每位求和前都判断carryflag是否为真,若为真则在当前位取和时加1,最高位求和进位不考虑;将数字串k和t2的求和值置于变量s中;此时便得到手机号码和系统时间的求和值s,即33455791201;
步骤S400:计算截取步骤S300中求和后所得数字串s的下标变量i。
由于生成的子数字串位数为可按照实际需要在1-n之间设定,此处为1-11之间设定,如本实施例可设定为8位,故需要对11位的s数字串进行截取,i即为截取的子字符串在s串中的开始下标;
取出之前存储到s中的求和值33455791201,从最低位开始依次取后m位,分别存到m个变量中,通常只要满足m≤n即可,此处优选m=4,即选择后四位,分别为是s1为1,s2为2,s3为0,s4为1;
将所取的四个位数求和,本实施例中即和为4;
对上一步求和的结果截取个位数,此例为4,存储为变量i中;
步骤S500:截取子数字串,获得验证码的步骤;
本实施例截取的子数字串优选为8位。
在获得求和值S和截取下标i后,即可进行字串截取;
以i为下标,从左往右数到第i位,从第i位开始截取8位;
在截取时若到串尾,则循环回串首继续。对本例S33455791201截取,i为4,即从第4位开始截取,截取结果为55791201。
在完成以上的步骤后,便达到了该算法的目的,获得验证码55791201。
此验证码不依赖于待验证端的网络情况,如此按以上五个步骤执行后,所得的动态验证码便是可离线产生的动态验证码。
以上实施方式仅适于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。