具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种标识信息生成方法的流程图,本实施例可适用于生成随机且不重复的标识信息的情况,尤其是可以用于生成离散且不重复的流水号的应用场景中。该方法可以由信息生成装置来执行,该装置可以由软件和/或硬件的方式来实现,集成于服务器中。如图1所示,该方法具体包括以下步骤:
S110、接收标识信息生成请求,标识信息是用于唯一标识目标对象的信息。
其中,目标对象可以是指需要进行唯一标识的对象。例如,目标对象可以是但不限于用户、产品和订单。本实施例中的标识信息是指可转换为二进制进行表征的信息。例如,标识信息可以是32位INT整型类型的流水号信息。也就是说,标识信息的取值范围为32位INT型整数,即[-231,231-1]。
具体地,当客户端或者其他设备需要生成标识信息时,可以向服务器发送标识信息生成请求,以使服务器基于该请求生成随机的一个标识信息进行返回。
S120、基于标识信息生成请求,根据每个数据区间对应的数值随机队列和当前遍历位置信息,确定每个数据区间对应的当前数值,其中,每个数据区间是预先根据标识信息对应的二进制数据位进行划分获得的。
其中,数据区间可以是指由预设个数的二进制数据位所组成的数据。数值随机队列可以是随机生成的离散不重复的数值集合。每个数据区间对应的数值随机队列可以相同,也可以不同。通过设置不同的数值随机队列,可以进一步提高生成的标识信息的随机性。当前遍历位置信息可以用于表征数值随机队列中当次取值的位置。例如,假设数据区间是由8个二进制数据位组成,该数据区间对应的数值可以是0到28-1的具体数字。
具体地,若服务器仅可以生成一种对象的标识信息,则可以在接收到标识信息生成请求时,直接基于当前遍历位置信息,从预先生成的每个数据区间对应的数值随机队列中确定出每个数据区间对应的当前数值。若服务器可以用于生成多种对象的标识信息,则可以从接收到的标识信息生成请求中获得待生成的目标对象标识,并根据对象标识与数值随机队列之间的对应关系,确定目标对象标识所对应的各个数值随机队列,并从这些数值随机队列中确定出每个数据区间对应的当前数值。
示例性地,根据标识信息对应的二进制数据位进行划分获得每个数据区间,可以包括:基于预设划分方式,对标识信息对应的各个二进制数据位进行平均划分,获得各个包含预设个数的数据位的数据区间以及每个数据区间与二进制数据位之间的对应关系。
其中,预设划分方式可以是指将所有二进制数据位中的哪个数据位划分为一个数据区间的方式。预设个数可以是预先基于业务需求设置的每个数据区间所包含的数据位数量。具体地,本实施例可以获取利用二进制表示标识信息时所需要的各个二进制数据位,并可以按照二进制数据位的排列先后顺序,将每预设个数的数据位划分为一个数据区间,也可以随机地取出预设个数的数据位作为一个数据区间,以提高标识信息的随机性。在划分数据区间的同时,需要建立每个数据区间与划分的二进制数据位之间的对应关系,以便后续进行数据位拼接恢复。
示例性地,基于预设划分方式,对标识信息对应的各个二进制数据位进行平均划分,获得各个包含预设个数的数据位的数据区间,可以包括:根据预设个数和标识信息对应的二进制数据位总数,确定切分后的数据区间个数;按照数据区间的划分顺序,依次将标识信息对应的二进制数据位逐个划分至相应的数据区间,获得每个包含预设个数的数据位的数据区间。
具体地,可以将标识信息对应的二进制数据位总数除以预设个数,获得的计算结果作为切分后的数据区间个数,并可以设置这些数据区间的划分顺序。按照该划分顺序,依次将所有二进制数据位逐个划分至相应的数据区间。例如,图2给出了一种数据区间划分的示例。如图2所示,标识信息对应的二进制数据位总数为32位,预设个数为8位,从而可以划分为4个数据区间,按照划分顺序分别记作A1、A2、A3和A4。将32个二进制数据位轮流交替地划分至4个数据区间中,即A1为:(1、5、9、13、17、21、25、29),A2为:(2、6、10、14、18、22、26、30),A3为:(3、7、11、15、19、23、27、31),A4为:(4、8、12、16、20、24、28、32)。通过对二进制数据位进行交替划分,可以进一步提高生成的标识信息的随机性。
S130、根据当前数值和每个数据区间与二进制数据位之间的对应关系,生成目标对象的当前标识信息。
具体地,基于每个数据区间与二进制数据位之间的对应关系,对每个数据区间对应的当前数值进行二进制拼接,并将拼接结果转换为符合数据类型要求的标识信息,即获得目标对象的当前标识信息。由于每个当前数值是基于数值随机队列确定的,并且对每个数据区间又进行了数值拼接,从而可以生成伪随机的当前标识信息,不具备可预见性,大大降低了被暴力爬数据的风险。
示例性地,S130可以包括:将每个数据区间对应的当前数值进行二进制转换,获得转换后的当前二进制信息;根据当前二进制信息和每个数据区间与二进制数据位之间的对应关系进行二进制拼接,并根据拼接结果确定目标对象的当前标识信息。例如,对于图2的情况而言,可以将每个数据区间对应的当前数值转换为二进制编码,并按照A1(1、5、9、13、17、21、25、29),A2(2、6、10、14、18、22、26、30),A3(3、7、11、15、19、23、27、31),A4(4、8、12、16、20、24、28、32)的数据位顺序拼接成32位二进制编码,转换生成32位INT值,从而获得目标对象的当前标识信息。
本实施例的技术方案,通过接收标识信息生成请求,标识信息是用于唯一标识目标对象的信息,基于标识信息生成请求,根据每个数据区间对应的数值随机队列和当前遍历位置信息,确定每个数据区间对应的当前数值,其中,每个数据区间是预先根据标识信息对应的二进制数据位进行划分获得的;根据当前数值和每个数据区间与二进制数据位之间的对应关系,生成目标对象的当前标识信息,从而利用每个数据区间对应的数值随机队列,可以生成随机的标识信息,降低被暴力爬数据的风险。
在上述技术方案的基础上,在S120之前还可以包括:基于约瑟夫环算法,根据设置的随机循环数和随机队列长度,生成每个数据区间对应的数值随机队列。
其中,随机队列长度可以基于每个数据区间所包含的数据位的个数确定。例如,若数据区间是由8个二进制数据位组成,则数据区间对应的随机队列长度为28,也就是说,该随机队列由28个数值组成。
具体地,针对每个数据区间对应的所有数值,比如0到28-1这28个数值,基于约瑟夫环算法,通过设置不同的随机循环数,可以生成每个数据区间对应的数值随机队列。例如,随机循环数可以是1到1024之间的正整数。随机循环数可以人工设置,也可以随机选取1到1024之间的任意一个数值。对于每个数据区间,可以设置不同的随机循环数,以保证生成不同的数值随机队列,进一步提高标识信息生成的随机性。
实施例二
图3为本发明实施例二提供的一种标识信息生成方法的流程图,本实施例在上述各实施例的基础上,对步骤每个数据区间对应的当前数值的确定方式进行了详细描述。其中与上述各实施例相同或相应的术语的解释在此不再赘述。
参见图3,本实施例提供的标识信息生成方法具体包括以下步骤:
S310、接收标识信息生成请求,标识信息是用于唯一标识目标对象的信息。
S320、基于标识信息生成请求,将每个数据区间对应的数值随机队列中的当前指针所指向的数值确定为相应数据区间对应的当前数值,并基于各个数值随机队列对应的遍历顺序,对每个数值随机队列中的当前指针进行更新。
其中,每个数据区间对应的数值随机队列均利用一个指针来指向当次取值的队列位置。本实施例中的每个数值随机队列的长度有限,使得各个数值随机队列的遍历次数有限,从而可以设置各个数值随机队列对应的遍历顺序,并按照该遍历顺序对每个数值随机队列中的当前指针所指向的位置进行更新,以便实现遍历取值,使得每次遍历可以生成不同的标识信息。本实施例通过利用每个数值随机队列中的当前指针可以更加快速地获得每个数据区间对应的当前数值,从而提高标识信息的生成效率。
示例性地,数据区间和数值随机队列的数量均为四个,各个数值随机队列对应的遍历顺序为:按照每个数据区间对应的数值随机队列的顺序进行循环取值,并按照四个数据区间的预设排列顺序依次检测;若检测到第一数据区间对应的当前取值位置返回到第一数值随机队列的第一位,则将第二数据区间对应的当前取值位置向后移动一位之后再进行顺序取值;若检测到第一数据区间和第二数据区间对应的当前取值位置同时返回到相应数值随机队列的第一位,则将第三数据区间对应的当前取值位置向后移动一位之后再进行顺序取值;若检测到第一数据区间、第二数据区间和第三数据区间对应的当前取值位置同时返回到相应数值随机队列的第一位,则将第四数据区间对应的当前取值位置向后移动一位之后再进行顺序取值;若检测到四个数据区间对应的当前取值位置均同时返回到相应数值随机队列的第一位,则终止遍历。
例如,对于图2的情况而言,划分为4个数据区间A1、A2、A3和A4,对应4个数值随机队列J1、J2、J3和J4,每个数据区间包含8个二进制数据位,即每个数据区间对应的数值可以有256种可能,即可以是0到255之间的任一数字,从而每个数据区间对应的数值随机队列均是由256个数值随机组成,也就是将0到255这256个数值随机排列。每个数据区间均是按照数值随机队列中的元素排列顺序进行依次循环取值。例如,第一次取值时,将每个数值随机队列中的第一位数值作为相应数据区间对应的当前数值,即A1=J1(1),A2=J2(1),A3=J3(1),A4=J4(1)。第二次取值时,将每个数值随机队列中的第二位数值作为相应数据区间对应的当前数值,即A1=J1(2),A2=J2(2),A3=J3(2),A4=J4(2),同理依次遍历,并按照四个数据区间的预设排列顺序(即按照A1、A2、A3和A4的顺序)依次进行检测,以保证每次获得的遍历结果不同。
对于第一数据区间A1,当轮巡到J1队列最后一个数值后,下一次取值位置返回到J1队列第一位,以此往复。如图4所示,当第256+1次取值时,将J1队列的第一位作为A1的当前取值位置,此时可以检测到A1的当前取值位置返回到J1队列的第一位,针对本次取值,需要将A2对应的当前取值位置向后移动一位之后再进行顺序取值,也就是将J2队列的第二位作为A2的当前取值位置,而不是将J2队列的第一位作为A2的当前取值位置(如图5所示),并且A3和A4仍按照队列顺序循环取值,以便保证每次遍历结果不同。如图5所示,当第n*256+1次取值时(n为大于等于1且小于256的整数),均会检测到A1的当前取值位置返回到J1队列的第一位,此时需要将第二数据区间对应的当前取值位置在原有队列上向后移动一位之后再进行顺序取值。对于第三数据区间A3,如图6所示,当检测到A1和A2的当前取值位置均返回到相应队列的第一位时,也就是当第n*256*256+1次取值时(n为大于等于1且小于256的整数),需要将A3对应的当前取值位置在原有队列上向后移动一位之后再进行顺序取值。对于第四数据区间A4,如图7所示,当检测到A1、A2和A3的当前取值位置均返回到相应队列的第一位时,也就是当第n*256*256*256+1次取值时(n为大于等于1且小于256的整数),需要将A4对应的当前取值位置在原有队列上向后移动一位之后再进行顺序取值。当检测到四个数据区间对应的当前取值位置均同时返回到相应数值随机队列的第一位,即A1、A2、A3和A4均分别返回至J1、J2、J3和J4的第一位时,可以终止遍历,此时遍历总次数为28*28*28*28,即232,完成了全部遍历。
S330、根据当前数值和每个数据区间与二进制数据位之间的对应关系,生成目标对象的当前标识信息。
本实施例的技术方案,通过将每个数据区间对应的数值随机队列中的当前指针所指向的数值确定为相应数据区间对应的当前数值,并基于各个数值随机队列对应的遍历顺序,对每个数值随机队列中的当前指针进行更新,从而可以利用每个数值随机队列中的当前指针更加快速地获得每个数据区间对应的当前数值,提高了标识信息的生成效率。
在上述技术方案的基础上,本实施例可以将当前遍历序号作为当前遍历位置信息,通过公式运算的方式,更加快速地确定出每个数据区间对应的当前数值。例如,按照上面给出的遍历顺序的方式,在每次取值时可以基于当前遍历序号N(即第N次取值)确定出每个数据区间对应的当前数值。例如,可以通过公式A1(N)=J1(((N-1)mod28)+1)确定第一数据区间A1对应的当前数值。可以通过公式确定第二数据区间A2对应的当前数值。可以通过公式/>确定第三数据区间A3对应的当前数值;可以通过公式/>确定第四数据区间A4对应的当前数值。其中,mod为取余数。Int(x)为向下取整函数。通过上述公式运算,可以更加快速地获得每个数据区间对应的当前数值,进一步提高标识信息的生成效率。
以下是本发明实施例提供的信息生成装置的实施例,该装置与上述各实施例的信息生成方法属于同一个发明构思,在信息生成装置的实施例中未详尽描述的细节内容,可以参考上述信息生成方法的实施例。
实施例三
图8为本发明实施例三提供的一种标识信息生成装置的结构示意图,本实施例可适用于生成随机且不重复的标识信息的情况,该装置具体包括:生成请求接收模块810、当前数值确定模块820和当前标识信息生成模块830。
其中,生成请求接收模块810,用于接收标识信息生成请求,标识信息是用于唯一标识目标对象的信息;当前数值确定模块820,用于基于标识信息生成请求,根据每个数据区间对应的数值随机队列和当前遍历位置信息,确定每个数据区间对应的当前数值,其中,每个数据区间是预先根据标识信息对应的二进制数据位进行划分获得的;当前标识信息生成模块830,用于根据当前数值和每个数据区间与二进制数据位之间的对应关系,生成目标对象的当前标识信息。
可选地,该装置还包括:
数据位划分模块,用于基于预设划分方式,对标识信息对应的各个二进制数据位进行平均划分,获得各个包含预设个数的数据位的数据区间以及每个数据区间与二进制数据位之间的对应关系。
可选地,数据位划分模块,具体用于:根据预设个数和标识信息对应的二进制数据位总数,确定切分后的数据区间个数;按照数据区间的划分顺序,依次将标识信息对应的二进制数据位逐个划分至相应的数据区间,获得每个包含预设个数的数据位的数据区间。
可选地,该装置还包括:
数值随机队列生成模块,用于在基于标识信息生成请求,根据每个数据区间对应的数值随机队列和当前遍历位置信息,确定每个数据区间对应的当前数值之前,基于约瑟夫环算法,根据设置的随机循环数和随机队列长度,生成每个数据区间对应的数值随机队列。
可选地,当前数值确定模块820,具体用于:将每个数据区间对应的数值随机队列中的当前指针所指向的数值确定为相应数据区间对应的当前数值,并基于各个数值随机队列对应的遍历顺序,对每个数值随机队列中的当前指针进行更新。
可选地,数据区间和数值随机队列的数量均为四个,各个数值随机队列对应的遍历顺序为:
按照每个数据区间对应的数值随机队列的顺序进行循环取值,并按照四个数据区间的预设排列顺序依次检测;若检测到第一数据区间对应的当前取值位置返回到第一数值随机队列的第一位,则将第二数据区间对应的当前取值位置向后移动一位之后再进行顺序取值;若检测到第一数据区间和第二数据区间对应的当前取值位置同时返回到相应数值随机队列的第一位,则将第三数据区间对应的当前取值位置向后移动一位之后再进行顺序取值;若检测到第一数据区间、第二数据区间和第三数据区间对应的当前取值位置同时返回到相应数值随机队列的第一位,则将第四数据区间对应的当前取值位置向后移动一位之后再进行顺序取值;若检测到四个数据区间对应的当前取值位置均同时返回到相应数值随机队列的第一位,则终止遍历。
可选地,当前标识信息生成模块830,具体用于:
将每个数据区间对应的当前数值进行二进制转换,获得转换后的当前二进制信息;根据当前二进制信息和每个数据区间与二进制数据位之间的对应关系进行二进制拼接,并根据拼接结果确定目标对象的当前标识信息。
可选地,标识信息为32位INT整型类型的流水号信息。
本发明实施例所提供的标识信息生成装置可执行本发明任意实施例所提供的标识信息生成方法,具备执行标识信息生成方法相应的功能模块和有益效果。
值得注意的是,上述信息生成装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例四
图9是本发明实施例四提供的一种服务器的结构示意图。参见图9,该服务器包括:
一个或多个处理器910;
存储器920,用于存储一个或多个程序;
当一个或多个程序被一个或多个处理器910执行,使得一个或多个处理器910实现如上述实施例中任意实施例所提供的标识信息生成方法,该方法包括:
接收标识信息生成请求,标识信息是用于唯一标识目标对象的信息;
基于标识信息生成请求,根据每个数据区间对应的数值随机队列和当前遍历位置信息,确定每个数据区间对应的当前数值,其中,每个数据区间是预先根据标识信息对应的二进制数据位进行划分获得的;
根据当前数值和每个数据区间与二进制数据位之间的对应关系,生成目标对象的当前标识信息。
图9中以一个处理器910为例;服务器中的处理器910和存储器920可以通过总线或其他方式连接,图9中以通过总线连接为例。
存储器920作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的信息生成方法对应的程序指令/模块(例如,标识信息生成装置中的生成请求接收模块810、当前数值确定模块820和当前标识信息生成模块830)。处理器910通过运行存储在存储器920中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述的标识信息生成方法。
存储器920主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器920可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器920可进一步包括相对于处理器910远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本实施例提出的服务器与上述实施例提出的标识信息生成方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行标识信息生成方法相同的有益效果。
实施例五
本实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的标识信息生成方法步骤,该方法包括:
接收标识信息生成请求,标识信息是用于唯一标识目标对象的信息;
基于标识信息生成请求,根据每个数据区间对应的数值随机队列和当前遍历位置信息,确定每个数据区间对应的当前数值,其中,每个数据区间是预先根据标识信息对应的二进制数据位进行划分获得的;
根据当前数值和每个数据区间与二进制数据位之间的对应关系,生成目标对象的当前标识信息。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。