本发明涉及计算机技术领域,特别是涉及一种序列号生成方法和装置。
背景技术:
随着互联网技术的发展,人们对互联网的使用越来越普遍。终端通过网络与服务器进行通信的数量也越来越大。为了便于区分管理较庞大的通信信息,需要将相关通信信息进行区分标识。比如,需要将不同的客户端与服务器之间的会话进行区分标识,或者也需要将同一客户端在不同时间与服务器之间建立的会话进行区分标识等。
一般需要通过生成不重复的序列号,来对相关通信信息进行唯一的标识。比如,生成唯一的、不重复的会话标识来唯一标识会话。
传统的生成序列号的方法中,是根据将单一数值进行递增的方式来生成不同的序列号。然而,由于数值空间是有限的,在使用一段时间后,会出现数值反转的情况,从而出现所生成的序列号重复的问题。
技术实现要素:
基于此,有必要针对上述问题,提供一种能够保证生成的序列号不重复的序列号生成方法和装置。
一种序列号生成方法,所述方法包括以下步骤:
服务器接收终端发送的序列号生成请求,根据所述序列号生成请求获取当前的系统时间;
将所述获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为所述系统时间对应的键值;
根据生成的所述键值生成对应的第二数值,其中,所述第二数值随着所述键值对应的生成次数的递增而递增;
根据所述获取的系统时间和所述第二数值生成序列号。
一种序列号生成装置,所述装置包括:
获取模块,用于接收终端发送的序列号生成请求,根据所述序列号生成请求获取当前的系统时间;
键值生成模块,用于将所述获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为所述系统时间对应的键值;
数值生成模块,用于根据生成的所述键值生成对应的第二数值,其中,所述第二数值随着所述键值对应的生成次数的递增而递增;
序列号生成模块,用于根据所述获取的系统时间和所述第二数值生成序列号。
上述序列号生成方法和装置,服务器接收终端发送的序列号生成请求,根据序列号生成请求获取当前的系统时间;将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值;根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增;根据获取的系统时间和第二数值生成序列号。即根据系统时间生成序列号的组成部分,使用时间维度上的递增特性,在一定程度上防止了序列号重复。同时,即使由于时间精度的原因在选取第一数值的前预设位数的数值来作为键值时,可能造成在一段时间范围内的系统时间先后生成的键值相同,但是先后生成的相同的键值对应的第二数值也会不一样,因为第二数值会随着同一键值对应的生成次数的递增而递增。进而,根据键值对应的第二数值和系统时间一起生成序列号也就不会重复。
附图说明
图1为一个实施例中序列号生成方法的应用环境图;
图2为一个实施例中服务器的内部示意图;
图3为一个实施例中序列号生成方法的流程示意图;
图4为一个实施例中第二数值生成方法的流程示意图;
图5为另一个实施例中序列号生成方法的流程示意图;
图6为一个实施例中序列号生成方法的系统部署图;
图7A为一个实施例中序列号生成方法的网络拓扑图;
图7B为另一个实施例序列号生成方法的网络拓扑图;
图8为一个实施例序列号生成方法的时序图;
图9为一个实施例中序列号生成装置的结构示意图;
图10为另一个实施例中序列号生成装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为一个实施例中序列号生成方法的应用环境图。如图1所示,终端110通过网络与服务器120进行通信。终端110上可安装并运行各种应用,终端110通过应用生成序列号生成请求,将序列号生成请求通过网络发送至任意一个服务器120。服务器120接收到序列号生成请求后,会根据序列号生成请求获取当前的系统时间,并将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值。进一步,服务器120根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增。接着,服务器120会根据获取的系统时间和所生成的第二数值生成序列号。进一步,服务器120还可以将生成的序列号返回至终端110。
图2示出了一个实施例中的服务器120的内部示意图,该服务器包括通过系统总线连接的处理器、非易失性存储介质、内存储器和网络接口。其中,该服务器的非易失性存储介质存储有操作系统、数据库和一种序列号生成装置,数据库用于存储数据,如存储键值、数值及生成的序列号等。该序列号生成装置用于实现一种序列号生成方法。该处理器用于提供计算和控制能力,支撑整个服务器的运行。服务器中的内存储器为非易失性存储介质中的序列号生成装置的运行提供环境,该内存储器中可储存有计算机可读指令,该计算机可读指令被所述处理器执行时,可使得所述处理器执行一种序列号生成方法。网络接口用于与终端进行网络通信。本领域技术人员可以理解,图2中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的服务器的限定,具体的服务器可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
如图3所示,在一个实施例中,提供了一种序列号生成方法,该方法以应用于服务器进行举例说明,具体包括以下步骤:
步骤302,服务器接收终端发送的序列号生成请求,根据序列号生成请求获取当前的系统时间。
本实施例中,终端会根据用户的操作,向服务器发送序列号生成请求。
具体地,可以是用户在客户端界面进行需要与服务器建立通信的相关操作时(比如,登录操作),运行客户端的终端会向服务器请求创建会话,并请求获取唯一标识所创建的会话的序列号。也可以是,用户基于终端进行相关认证操作(比如,实名认证操作),终端向服务器发送对应的认证操作请求,并请求获取唯一标识该认证操作请求的序列号。本实施例中对终端发送序列号请求的使用情景不作限定。
服务器在接收到终端发送的序列号生成请求时,会触发获取当前的系统时间。其中,当前的系统时间即为服务器在接收到序列号请求时的系统时间。
在一个实施例中,服务器根据设置的用于生成序列号的服务程序来获取系统时间,以及进行后续的序列号生成处理。可以理解,服务程序,指执行指定系统功能的程序、例程或进程。本实施例中的服务程序指用于生成序列号的程序或进程。
步骤304,将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值。
服务器会根据所获取的系统时间生成与其对应的键值。具体地,服务器会对获取的系统时间进行格式转换处理,即将获取的系统时间的格式由时间格式转换为数值格式,转换后得到第一数值。可以理解,第一数值即为将系统时间转换成数值格式得到的数值。
在一个实施例中,服务器可以将系统时间直接转换为明文形式的第一数值,然后从转换后的明文形式的第一数值中选取前预设位数的数值作为该系统时间对应的键值。其中,明文形式的第一数值,是指可以通过查看该第一数值直接获知其所对应的系统时间。比如,系统时间为2016-08-04 14:20为时间格式,将其转换成明文形式的第一数值,即为201608041420,通过查看明文形式的第一数值201608041420,即可获知其所对应的系统时间是2016-08-04 14:20。
在另一个实施例中,第一数值可以是时间戳,即服务器可以将系统时间转化成时间戳的形式,从转换后的时间戳中选取前预设位数的数值作为该系统时间对应的键值。可以理解,服务器还可以对系统时间进行其他格式转换,本实施例对此不做限定。
可以理解,由于键值是由提取将系统时间格式转换后生成的第一数值前预设位数的数值得到的,那么在预设时间范围内的系统时间所对应的键值可能相同,但不同键值所对应的系统时间则一定不同。假设,预设位数为8,则提取前8位数值,那么属于同一天的系统时间所对应的键值相同,例如,先根据一个序列号生成请求,获取的系统时间为2016-08-04 14:20,其转换后得到的第一数值为201608041420,其对应键值为20160804,同样在当天接收到又一个序列号生成请求,对应的系统时间为2016-08-04 17:30,其转换后得到的第一数值为201608041730,对应的键值也为20160804。
步骤306,根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增。
本实施例中,服务器会根据生成的键值来生成与该键值对应的第二数值。其中,第二数值随着键值对应的生成次数的递增而递增。即第二数值用于表征键值的生成次数。
在一个实施例中,与键值对应的第二数值本身即为该键值生成的次数,即表示该同一键值是第几次生成。比如,在2016-08-04 00:00时,获取了当天第一个序列号生成请求,生成与时间2016-08-04 00:00对应的键值为20160804,则这个时候生成的键值20160804是第一次生成的,其对应的第二数值为1。接着,在2016-08-04 00:30,获取了当天第二个序列号生成请求,生成与时间2016-08-04 00:30对应的键值也为20160804,则第2次生成的键值20160804所对应的第二数值为2。
在另一个实施例中,可以是当该键值为第一次生成时,其对应的第二数值为预设起始第二数值,并随着该键值生成的次数的递增,将其所对应的第二数值也进行递增。比如,第一次生成键值n时,其对应的第二数值为预设起始第二数值2,第二次生成键值n时,其对应的第二数值为在预设起始第二数值2上的递增,比如递增1,得到3,第三次生成键值n时,其对应的第二数值则在3的基础上递增1得到4,依次类推。
需要说明的是,这里的递增可以是线性递增,也可以是指数递增或等比数列等其他递增方式,本实施例对此不做限定,仅用于满足第二数值随着键值生成的次数的递增而递增即可。
进一步,预设起始数值可以是任意整数。更进一步,当对第二数值进行线性递增时,则可以每次递增的数值为1,以满足一些需要序列号连续的业务需求。可以理解,每次递增的数值也可以是不为1的任意正整数。
步骤308,根据获取的系统时间和第二数值生成序列号。
具体地,服务器可以将系统时间转换成时间戳,然后将时间戳和第二数值分别作为序列号的组成部分来生成序列号。服务器也可以将系统时间进行格式转换,转换成明文形式的第一数值,将明文形式的第一数值和键值所对应的第二数值分别作为序列号的组成部分来生成序列号。
需要说明的是,本实施例中的第一、第二仅用于对不同类型的数值进行区别,并不用作大小、顺序等方面的限定。
本实施例中,服务器接收终端发送的序列号生成请求,根据序列号生成请求获取当前的系统时间;将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值;根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增;根据获取的系统时间和与键值对应的第二数值生成序列号。即根据系统时间生成序列号的组成部分,使用时间维度上的递增特性,在一定程度上防止了序列号重复。同时,即使由于时间精度的原因在选取第一数值的前预设位数的数值来作为键值时,可能造成在一段时间范围内的系统时间先后生成的键值相同,但是先后生成的相同的键值对应的第二数值也会不一样,因为第二数值会随着同一键值对应的生成次数的递增而递增。进而,根据生成的第二数值和系统时间一起生成序列号也就不会重复。
此外,根据第二数值和系统时间生成的序列号,不需要以固定的字符串的形式进行存储,可以以数字数据类型进行存储,节省了存储资源。
在一个实施例中,在根据获取的系统时间和第二数值生成序列号的步骤之前,还包括:获取用于生成序列号的服务程序的服务程序标识,服务程序标识用于唯一标识对应的服务程序的步骤。
本实施例中,根据获取的系统时间和第二数值生成序列号的步骤,包括:根据服务程序标识、获取的系统时间以及与键值对应的第二数值生成序列号的步骤。
具体地,服务器中设置了用于生成序列号的服务程序,并对该服务程序设置了对应的服务程序标识,其中,服务程序指用于生成序列号的程序或进程。服务程序标识用于唯一标识对应的服务程序。
可以理解,可以是根据实际需求,设置分布式的多个具有序列号生成功能的服务器,每个服务器中都设置了用于生成序列号的服务程序,对各个服务器中的服务程序分别设置对应的唯一的服务程序标识。终端可以向任意服务器发送序列号生成请求。
服务器在生成序列号之前,会获取用于生成序列号的服务程序的服务程序标识。并根据所获取的服务程序标识、系统时间以及与键值对应的第二数值生成序列号。
同样地,服务器可以将系统时间转换成时间戳,然后将服务程序标识、时间戳以及与键值对应的第二数值组合生成序列号。服务器也可以将系统时间转换成明文形式的第一数值,然后将服务程序标识、明文形式的第一数值以及与键值对应的第二数值组合生成序列号。
传统的根据单一递增数值或固定长度字符串来生成序列号的方法,都是使用单一的服务程序,不容易扩展,因为如果扩展多套用于生成序列号的服务程序,这多套服务程序就是独立的根据单一递增数值或固定长度字符串来生成序列号,显然多套服务程序生成的序列号之间容易重复,因此不易扩展。本实施例中,根据用于生成序列号的服务程序的服务程序标识和系统时间以及与键值对应的第二数值一起生成序列号,服务程序标识用于唯一标识其对应的服务程序,保证了根据不同的服务程序之间所生成的序列号完全不同。此外,实现了可以根据实际业务量需求,扩展多套用于生成序列号的服务程序。提高了可扩展性。
如图4所示,在一个实施例中,根据生成的键值生成对应的第二数值的步骤(简称第二数值生成步骤),具体包括以下步骤:
步骤402,当生成的键值不存在于存储的键值中时,则将预设起始第二数值作为生成的键值对应的第二数值。
步骤404,当生成的键值存在于存储的键值中时,则根据预先存储的键值和第二数值之间的对应关系,获取该键值对应的当前第二数值,将当前第二数值进行递增处理,得到递增后的第二数值即为生成的键值对应的第二数值。
本实施例中,服务器存储有所有生成的键值。其中,所存储的键值之间完全不同。可以理解,当重复生成键值时,则对重复生成的键值不进行存储或用重复生成的键值替换掉已经存在的相同键值。
服务器在生成键值以后,会判断所生成的键值是否存在于服务器存储的键值中。进一步,服务器中设置了预设起始第二数值。当判断出所生成的键值不存在于存储的键值中时,则表明该键值是第一次生成,则会获取预设起始第二数值,将预设起始第二数值作为所生成的键值对应的第二数值。其中,预设起始第二数值为任意整数。
更进一步,服务器中预先存储了键值和第二数值之间的对应关系。当判断出所生成的键值已经存在于存储的键值中时,服务器会根据预先存储的键值和第二数值之间的对应关系,获取该键值对应的当前第二数值,并将该当前第二数值进行递增处理,得到递增后的第二数值。该递增后的第二数值即为生成的键值对应的第二数值。
其中,可以将当前第二数值进行线性递增处理,也可以将当前第二数值进行指数递增处理或者以等比数列等数列形式进行递增,本实施例对递增处理的具体方式不作限定,只要能够实现递增处理即可。
可以理解,每生成一次相同的键值,该键值对应的第二数值就会递增一次。
比如,生成的键值为n,预设起始第二数值为1,当键值n不存在于服务器存储的键值中时,则说明该键值n是第一次生成的,则将预设起始第二数值1作为该键值n对应的第二数值。当键值n存在于服务器存储的键值中时,比如,第二次生成键值n时,服务器中存储了键值和第二数值之间的对应关系,获取已存储的键值n对应的当前第二数值为1(因为第一次生成的键值n对应的第二数值为预设起始第二数值1),对当前第二数值1进行递增处理,比如递增1,则第二次生成键值n时,该键值n对应的第二数值即递增为2了。又比如第三次生成键值n时,此时服务器中存储的键值n对应的当前第二数值为2,将当前第二数值2递增1,则第三次生成键值n时,该键值n对应的第二数值即递增为3了。
本实施例中,通过判断生成的键值是否存在于存储的键值中,当不存在时,则获取预设起始第二数值为该键值对应的第二数值,当存在时,则获取该键值对应的当前第二数值,对该当前第二数值进行递增处理,得到递增后的第二数值作为该键值对应的新的第二数值。即实现了在同一段时间范围内的系统时间所生成同一键值时,其所对应的第二数值完全不同。进而,保证了根据系统时间和第二数值生成的序列号完全不重复。
此外,由于序列号不重复,使其对大数据中的数据资源及通信信息的标识更加准确。由于更加准确,保证了大数据中数据资源以及通信的顺利、有序的进行,而避免了由于标识混乱造成的各种通信错误以及数据资源获取错误,从而提高了对大数据资源管控的效率。
在一个实施例中,将当前第二数值进行递增处理,得到递增后的第二数值的步骤,包括:获取预设递加数值,将当前第二数值与预设递加数值进行线性叠加,得到递增后的第二数值的步骤。
本实施例中,服务器中设置了预设递加数值。在对当前第二数值进行递增处理时,服务器会获取预设递加数值,将键值所对应的当前数值与预设递加数值进行线性叠加,得到递增后的数值。其中,线性叠加即为直接相加。
其中,预设递加数值为任意正整数。可以根据实际需要来设置递加数值的大小。
本实施例中,采用将当前第二数值与预设递加数值进行线性叠加,得到递增后的第二数值,可以使第二数值的递增更加的平稳、连续,从而可以使数值空间能够得到更加充分的使用,提高了数值空间的利用率。
在一个实施例中,该方法还包括:将该序列号作为会话标识以唯一标识客户端和服务器之间的会话,该客户端指与序列号生成请求中包含的用户标识对应的客户端的步骤。
本实施例中,用户在客户端界面进行需要与服务器建立通信的相关操作时(比如,登录操作),运行客户端的终端会向服务器请求创建会话,并请求获取唯一标识所创建的会话的序列号。其中,序列号生成请求中包含的用户标识,该用户标识即为通过客户端进行相关通信操作的用户的唯一用户标识。
服务器会创建客户端和服务器之间的会话,并在生成序列号之后,会将生成的序列号作为会话标识以唯一标识客户端和服务器之间创建的会话。具体地,存储序列号作为的会话标识和其所对应的会话之间的对应关系。其中,客户端指与序列号生成请求中包含的用户标识对应的客户端。
本实施例中,将通过上述方法所生成的序列号作为会话标识,能够更加准确的、唯一的标识出客户端与服务器之间的会话,保证了各个会话有序、互无干扰。
在另一个实施例中,该方法还包括:将生成的序列号作为凭证流水号,用于唯一标识所接收的认证操作请求的步骤。
本实施例中,用户基于终端进行相关认证操作(比如,实名认证操作),终端向服务器发送对应的认证操作请求,并请求获取唯一标识该认证操作请求的序列号。
服务器会生成唯一序列号,将生成的序列号作为凭证流水号,用于唯一标识所接收的认证操作请求。
可以理解,服务器可以进一步对认证操作请求中包含的用户身份信息和账号信息进行认证处理,并将认证处理结果和对应的凭证流水号返回至终端。
其中,服务器在进行认证处理时,可能会调用相关的其他服务器的接口,那么,所生成的用于唯一标识认证操作请求的凭证流水号也可以起到记录调用接口次数的作用。进一步,则该凭证流水号可以起到后续结算接口调用费用的对账作用。
本实施例中,将通过上述方法所生成的序列号作为凭证流水号,能够更加准确的、唯一的标识出认证操作请求。此外,在使用该凭证流水号进行后续结算接口调用费用的对账时,能够使对账结果更加的准确。
在一个实施例中,当有多个服务器,每个服务器中分别设置了用于生成序列号的服务程序。终端发送的序列号生成请求可以是先发送到负载均衡管理器,由负载均衡管理器检测各个服务器中的服务程序当前所需要处理的序列号生成请求的数量,然后将接收到序列号生成请求分配至所需处理数量最少的服务器,由所需处理数量最少的服务器中的用于生成序列号的服务程序来进行序列号的生成处理。
也可以是,终端直接发送序列号请求给任意服务器,接收到终端发送的序列号请求的服务器可以检测、查询各个服务器中的服务程序当前所需要处理的序列号生成请求的数量,然后将序列号生成请求转发至所需处理数量最少的服务器,由所需处理数量最少的服务器中的用于生成序列号的服务程序来进行序列号的生成处理。
本实施例中,在进行序列号生成请求分配时,根据负载均衡原理,检测各个服务器中的服务程序当前所需要处理的序列号生成请求的数量,将序列号生成请求分配至所需处理数量最少的服务器,由所需处理数量最少的服务器中的用于生成序列号的服务程序来进行序列号的生成处理。能够使序列号生成资源的使用更加的充分,提高了资源的利用率,此外,也保证了各个服务程序的负载均衡,保证了各个服务程序的正常运行,提高了系统运行时的性能。
如图5所示,在一个实施例中,提供了一种序列号生成方法,该方法以应用于服务器进行举例说明,具体包括以下步骤:
步骤502,键值生成系统接收终端发送的序列号生成请求,根据序列号生成请求获取当前的系统时间。
步骤504,键值生成系统将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值,并将生成的键值发送至数值生成系统。
具体地,键值生成系统可以将系统时间直接转换为明文形式的第一数值,然后从转换后的明文形式的第一数值中选取前预设位数的数值作为该系统时间对应的数值。其中,明文形式的第一数值,是指可以通过查看该第一数值直接获知其所对应的系统时间。
键值生成系统也可以将系统时间转化成时间戳的形式,从转换后的时间戳中选取前预设位数的数值作为所述系统时间对应的键值。可以理解,服务器还可以对系统时间进行其他格式转换,本实施例对此不做限定。
步骤506,数值生成系统根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增,并将第二数值返回至键值生成系统。
具体地,可以是与键值对应的第二数值本身即为该键值生成的次数,即表示该同一键值是第几次生成。也可以是当该键值为第一次生成时,其对应的第二数值为预设起始第二数值,并随着该键值生成的次数的递增,将其所对应的第二数值也进行递增。其中,预设起始第二数值可以是任意整数。
进一步,递增可以是线性递增,也可以是指数递增或等比数列等其他递增方式,本实施例对此不做限定。
步骤508,键值生成系统根据获取的系统时间和第二数值生成序列号。
具体地,键值生成系统可以将系统时间转换成时间戳,然后将时间戳和第二数值分别作为序列号的组成部分来生成序列号。服务器也可以将系统时间进行格式转换,转换成明文形式的第一数值,将明文形式的第一数值和键值所对应的第二数值分别作为序列号的组成部分来生成序列号。
在一个实施例中,在键值生成系统根据获取的系统时间和第二数值生成序列号的步骤之前,还包括:键值生成系统获取其所属的用于生成序列号的服务程序的服务程序标识,所述服务程序标识用于唯一标识对应的服务程序的步骤。
本实施例中,键值生成系统根据获取的系统时间和第二数值生成序列号的步骤,包括:键值生成系统根据获取的服务程序标识、系统时间以及与键值对应的第二数值来生成序列号。
具体地,服务器中设置了用于生成序列号的服务程序,并对该服务程序设置了对应的服务程序标识,其中,服务程序标识用于唯一标识对应的服务程序。一个键值生成系统和一个数值生成系统共同组成一组用于生成序列号的服务程序。服务程序,指用于生成序列号的程序或进程。
进一步,键值生成系统在生成序列号之前,会获取其所属的用于生成序列号的服务程序的服务程序标识。并根据所获取的服务程序标识、系统时间以及与键值对应的第二数值生成序列号。
同样地,键值生成系统可以将系统时间转换成时间戳,然后将服务程序标识、时间戳以及与键值对应的第二数值组合生成序列号。键值生成系统也可以将系统时间转换成明文形式的第一数值,然后将获取的服务程序标识、明文形式的第一数值以及与键值对应的第二数值组合生成序列号。需要说明的是,可以是根据实际需求,设置分布式的一组或多组用于生成序列号的服务程序,对各组服务程序分别设置对应的唯一的服务程序标识。进一步,两组不同的服务程序可以共用一个数值生成系统,以节省系统资源,提高系统资源利用率。
当有多组用于生成序列号的服务程序时,终端可以向任意一组该服务程序发送序列号生成请求。如图6所示,图6为一个实施例中序列号生成方法的系统部署图。其中,终端610可以向任意一组服务程序620发送序列号生成请求。一组服务程序620中包含一个键值生成系统622和一个数值生成系统624。
在一个实施例中,键值生成系统和数值生成系统可以设置于同一服务器中,如图7A所示,图7A为一个实施例序列号生成方法的网络拓扑图。终端710通过网络与部署于服务器720中的键值生成系统进行通信,键值生成系统与数值生成系统在同一服务器720中进行相互间的通信。
在另一个实施例中,键值生成系统和数值生成系统也可以分开设置于不同的服务器中。如图7B所示,图7B为另一个实施例中序列号生成方法的网络拓扑图。其中,键值生成系统部署于服务器730中,数值生成系统部署于服务器740中,终端710通过网络与部署于服务器730中的键值生成系统进行通信,部署于服务器730中的键值生成系统通过网络与服务器740中的数值生成系统进行通信。
上述方法,相当于将键值生成系统和数值生成系统进行分离部署,在实现序列号不重复生成的同时,通过系统的分离部署,便于扩展。
在一个实施例中,数值生成系统根据生成的键值生成对应的第二数值的步骤,包括:当生成的键值不存在于存储的键值中时,数值生成系统则将预设起始第二数值作为生成的键值对应的第二数值;当生成的键值已存在于存储的键值中时,数值生成系统则根据预先存储的键值和第二数值之间的对应关系,获取键值对应的当前第二数值,数值生成系统将当前第二数值进行递增处理,得到递增后的第二数值即为生成的键值对应的第二数值。
在一个实施例中,数值生成系统将键值对应的当前第二数值进行递增处理的步骤,包括:数值生成系统获取预设递加数值;将键值对应的当前第二数值与预设递加数值进行线性叠加,得到递增后的第二数值的步骤。
其中,预设递加数值为任意正整数,可以根据实际需求来进行设置。线性叠加即为直接相加。
在一个实施例中,该方法还包括:键值生成系统将所生成的序列号作为会话标识以唯一标识客户端和键值生成系统所位于的服务器之间的会话,其中,该客户端指与序列号生成请求中包含的用户标识对应的客户端的步骤。
在另一个实施例中,该方法还包括:键值生成系统将生成的序列号作为凭证流水号,用于唯一标识所接收的认证操作请求的步骤。
图8为一个实施例中上述序列号生成方法的时序图。本实施例中,该序列号生成的具体过程如下:
1)终端发送序列号生成请求至键值生成系统。
2)键值生成系统获取其所属的用于生成序列号的服务程序的服务程序标识。
3)键值生成系统获取当前系统时间,将当前系统时间进行格式转换生成第一数值,根据第一数值生成与系统时间对应的键值。
4)键值生成系统向数值生成系统请求生成与该键值对应的第二数值。
5)数值生成系统根据键值生成与之对应的第二数值。
6)数值生成系统将生成的与键值对应的第二数值返回至键值生成系统。
7)键值生成系统根据获取的服务程序标识、系统时间以及与键值对应的第二数值生成序列号。
8)键值生成系统将生成的序列号返回至终端。
如图9所示,在一个实施例中,提供了一种序列号生成装置,该装置包括获取模块902、键值生成模块904、数值生成模块906及序列号生成模块908,其中:
获取模块902,用于接收终端发送的序列号生成请求,根据序列号生成请求获取当前的系统时间。
键值生成模块904,用于将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值。
数值生成模块906,用于根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增。
序列号生成模块908,用于根据获取的系统时间和第二数值生成序列号。
在一个实施例中,获取模块902还用于获取用于生成序列号的服务程序的服务程序标识,所述服务程序标识用于唯一标识对应的服务程序。
本实施例中,序列号生成模块908还用于根据所述服务程序标识、所述获取的系统时间以及所述第二数值生成序列号。
在一个实施例中,数值生成模块906还用于当生成的所述键值不存在于存储的键值中时,则将预设起始第二数值作为生成的所述键值对应的第二数值;当生成的所述键值已存在于存储的键值中时,则根据预先存储的键值和第二数值之间的对应关系,获取所述键值对应的当前第二数值,将所述键值对应的当前第二数值进行递增处理,得到递增后的第二数值即为生成的所述键值对应的第二数值。
在一个实施例中,数值生成模块906还用于获取预设递加数值;将所述键值对应的当前第二数值与所述预设递加数值进行线性叠加,得到所述递增后的第二数值。
在一个实施例中,如图10所示,该装置还包括:
标识模块910,用于将所述序列号作为会话标识以唯一标识客户端和所述服务器之间的会话,客户端指与所述序列号生成请求中包含的用户标识对应的客户端。
上述序列号生成装置,接收终端发送的序列号生成请求,根据序列号生成请求获取当前的系统时间;将获取的系统时间由时间格式转换为数值格式得到第一数值,从第一数值中选取前预设位数的数值作为系统时间对应的键值;根据生成的键值生成对应的第二数值,其中,第二数值随着键值对应的生成次数的递增而递增;根据获取的系统时间和第二数值生成序列号。即根据系统时间生成序列号的组成部分,使用时间维度上的递增特性,在一定程度上防止了序列号重复。同时,即使由于时间精度的原因在选取第一数值的前预设位数的数值来作为键值时,可能造成在一段时间范围内的系统时间先后生成的键值相同,但是先后生成的相同的键值对应的第二数值也会不一样,因为第二数值会随着同一键值对应的生成次数的递增而递增。进而,根据第二数值和系统时间一起生成序列号也就不会重复。
此外,根据与键值对应的第二数值和系统时间生成的序列号,不需要以固定的字符串的形式进行存储,可以以数字数据类型进行存储,节省了存储资源。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。