CN103257977A - 获取标识号码的方法及装置 - Google Patents
获取标识号码的方法及装置 Download PDFInfo
- Publication number
- CN103257977A CN103257977A CN2012100413861A CN201210041386A CN103257977A CN 103257977 A CN103257977 A CN 103257977A CN 2012100413861 A CN2012100413861 A CN 2012100413861A CN 201210041386 A CN201210041386 A CN 201210041386A CN 103257977 A CN103257977 A CN 103257977A
- Authority
- CN
- China
- Prior art keywords
- character
- data
- character group
- group
- cryptographic hash
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种获取标识号码的方法及装置。其中,该方法包括:获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;读取一个或多个数据,并采用相同的哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码。通过本申请,能够实现在保证ID长度短的情况下,为海量数据生成唯一的ID。
Description
技术领域
本申请涉及计算机领域,具体而言,涉及一种获取标识号码的方法及装置。
背景技术
随着计算机行业的快速发展,用于标识作用的标识号码ID在各个领域得到了广泛应用,通常情况下可以采用一种哈希HASH算法比如MD5、SHA-1,或是上述算法的演变得到的算法对任意一个数据进行处理,得到该数据对应生成的HASH值,这个值就是数据的ID值。
这里涉及到的哈希(HASH)算法是一种建立键值与数据的真实值之间的对应关系的计算方法,通常情况下,每一个真实值只能有一个键值,但是一个键值可以对应多个真实值。例如可以采用一致性哈希算法将数据分散的存储于多台独立的机器设备上,满足平衡性、单调性、分散性和负载。
以现有的标准产品单元(Standard Product Unit,简称为SPU)和库存单元(Stock KeepingUnit,简称为SKU)为例,他们是一种电子商务系统描述可售商品的维度。例如,可以采用SPU来描述诺基亚N95手机:品牌=诺基亚,型号=N95的手机,这里用了品牌和型号这2个属性来确定了一种产品。SKU是在SPU的基础上增加了规格属性,比如颜色,这样就可以区分同样配置不同颜色的N95手机,所以SKU是比SPU更精确的维度。如果有一个数据库保存了当前所售商品的所有规格属性组合,那么和SPU结合在一起就可以得到当前所有产品的SKU,系统就可以以SKU来统计商品。再比如衣服有颜色和尺寸这2种规格属性,颜色有5个值,尺寸有3个值就有15种组合。
在上述例子当中,系统在保存所有的规格属性组合的过程中,需要针对这些海量的规格属性组合采用哈希算法进行计算得到不重复而且唯一的ID,进一步用上述ID和SPU来组成了SKU。由于电子商务本身有海量商品,再加上这些规格属性是有组合的,所以ID数据是海量的。
由于哈希算法,例如MD5的长度是128位即32个字符,SHA-1更长了,因此通过哈希算法MD5对数据(例如规格属性组合)进行处理,处理得到的ID通常比数据本身还要长,而且HASH算法存在重复的概率,因此,保存的数据(例如规格属性组合)越多发生重复的概率越大,一旦发生重复,数据和ID的一一对应关系就破坏了,特别是为了缩短ID长度容易发生重复碰撞,即同一个ID可以链接查询到多个不同的数据,使得数据和ID之间的对应关系不再有存在的意义。例如,在短URL服务中,ID比URL本身还要长就失去了意义了。
目前通过相关技术对数据进行处理得到ID的过程中,由于生成的短ID常会发生重复,导致生成的ID在应用领域中的应用性能较差的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术的对数据进行处理得到ID的过程中,由于生成的短ID常会发生重复,导致生成的ID在应用领域中的应用性能较差的问题,目前尚未提出有效的解决方案而提出本申请,为此,本申请的主要目的在于提供一种获取标识号码的方法及装置,以解决上述问题。
为了实现上述目的,根据本申请的一个方面,提供了一种获取标识号码的方法,该方法包括:获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;读取一个或多个数据,并采用相同的哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码。
进一步地,获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值包括:将字符表中的所有字符按照ASCII码值进行排序,以获取字符集;在字符集中顺序提取M个字符,对排序后的M个字符进行顺序组合,以获取一个或多个字符组;将所有的字符组分别保存至对应的结果集中;采用哈希算法对每个结果集中的字符组进行计算,生成每个字符组所对应的字符哈希值。
进一步地,在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码包括:在每个数据哈希值分别与所有的字符哈希值进行匹配之后,依次获取每个数据所对应的字符组,其中,一个数据对应一个字符组,一个字符组对应一个或多个数据;其中,在一个数据匹配到唯一的一个字符组情况下,字符组为当前数据的标识号码;在多个数据匹配到唯一的一个字符组的情况下,将字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,字符排序组合为对应数据的标识号码。
进一步地,将每个数据哈希值与所有的字符哈希值进行匹配,依次得到每个数据所对应的字符组,在多个数据匹配到唯一的一个字符组的情况下,将字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,字符排序组合为对应数据的标识号码的步骤包括:步骤A,将第一数据哈希值与所有的字符哈希值进行匹配,获取与第一数据匹配的字符组为第一字符组,并对第一字符组中所有字符的当前排序结果进行标记,第一字符组的标记赋值为i;步骤B,将第二数据哈希值与所有的字符哈希值进行匹配,获取与第二数据匹配的字符组为第二字符组,当第二字符组与第一字符组相同时,检测到第一字符组的标记赋值为i,则对第一字符组的标记加1,得到第二数据所对应的第一字符组的标记赋值为i=i+1;步骤C,将第一字符组中的所有字符按照ASCII码值进行排序,对排序后的第一字符组中的每个字符依次计算阶乘,以获取阶乘结果;步骤D,采用i对阶乘结果进行整除得到整除商,根据整除商的值将第一字符组中的一个字符删除,以获取第二数据所对应的字符排序组合;步骤E,重复执行步骤B至步骤D,得到与第一字符组匹配的所有数据的标识号码。
进一步地,在步骤C之后,方法还包括:采用i对阶乘结果进行整除,将得到的余数作为第一字符组的新标记赋值。
为了实现上述目的,根据本申请的另一方面,提供了一种获取标识号码的装置,该装置包括:第一处理模块,用于获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;第二处理模块,用于读取一个或多个数据,并采用相同的哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;第三处理模块,用于在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码。
进一步地,第一处理模块包括:第一排序模块,用于将字符表中的所有字符按照ASCII码值进行排序,以获取字符集;组合模块,用于在字符集中顺序提取M个字符,对排序后的M个字符进行顺序组合,以获取一个或多个字符组;保存模块,用于将所有的字符组分别保存至对应的结果集中;第一计算模块,用于采用哈希算法对每个结果集中的字符组进行计算,生成每个字符组所对应的字符哈希值。
进一步地,第三处理模块包括:匹配处理模块,用于在每个数据哈希值分别与所有的字符哈希值进行匹配之后,依次获取每个数据所对应的字符组,其中,一个数据对应一个字符组,一个字符组对应一个或多个数据;第一获取模块,用于在一个数据匹配到唯一的一个字符组情况下,字符组为当前数据的标识号码;第二获取模块,用于在多个数据匹配到唯一的一个字符组的情况下,将字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,字符排序组合为对应数据的标识号码。
进一步地,第三处理模块包括:第一匹配模块,用于将第一数据哈希值与所有的字符哈希值进行匹配,获取与第一数据匹配的字符组为第一字符组,并对第一字符组中所有字符的当前排序结果进行标记,第一字符组的标记赋值为i;第二匹配模块,用于将第二数据哈希值与所有的字符哈希值进行匹配,获取与第二数据匹配的字符组为第二字符组,当第二字符组与第一字符组相同时,检测到第一字符的标记赋值为i,则对第一字符组的标记加1,得到第二数据所对应的第一字符组的标记赋值为i=i+1;第二计算模块,用于将第一字符组中的所有字符按照ASCII码值进行排序,对排序后的第一字符组中的每个字符依次计算阶乘,以获取阶乘结果;第三获取模块,用于采用i对阶乘结果进行整除得到整除商,根据整除商的值将第一字符组中的一个字符删除,以获取第二数据所对应的字符排序组合;循环执行模块,用于重复执行第二匹配模块、第二计算模块以及第三获取模块,以得到与第一字符组匹配的所有数据的标识号码。
进一步地,装置还包括:第四获取模块,用于采用i对阶乘结果进行整除,将得到的余数作为第一字符组的新标记赋值。
通过本申请,采用获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;读取一个或多个数据,并采用相同的哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码,上述方案通过在字符表中提取预定数目的字符之后,将数据与预定数目的字符所构成的字符组进行匹配来得到该数据所对应的ID值,由于从字符表中提取到的预定数目的字符可以构成海量的字符组,且字符组的内容不会发生重复,从而解决了在现有技术对数据进行处理得到ID的过程中,由于生成的短ID常会发生重复,导致生成的ID在应用领域中的应用性能较差的问题,进而实现在保证ID长度短的情况下,为海量数据生成唯一的ID的效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的获取标识号码的装置结构示意图;
图2是根据本申请实施例的获取标识号码方法的流程图;以及
图3是根据本申请实施例的获取标识号码方法的详细流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1是根据本申请实施例的获取标识号码的装置结构示意图。
如图1所示,该获取标识号码的装置包括:第一处理模块10,用于获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;第二处理模块30,用于读取一个或多个数据,并采用相同的哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;第三处理模块50,用于在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码,该标识号码为当前匹配到的字符哈希值所对应的字符组合。
具体的,可以以标准产品单元SPU和库存单元SKU为例来说明上述实施例。上述实施例中的字符表可以是由0-9,a-z,A-Z,+和-组成的64位字符表,本申请首先通过第一处理模块10在从字符表中获取M个字符,并将M个字符进行组合以得到多个字符组,然后采用一致性哈希算法将得到的每一个字符组进行哈希计算,得到字符哈希值,即将每一个字符组分散到一个可以包含2的60次方个元素的环中;同时,通过第二处理模块30从标准产品单元SPU中读取一个或多个数据(例如商品的规格属性组合),并利用第一处理模块10中使用的一致性哈希算法将读取到的数据进行哈希计算,得到数据哈希值,由于采用的是相同的一致性哈希算法,因此,每个数据哈希值都会得到在环中地址相同的字符哈希值,即标准产品单元SPU中的每个数据也会落到这个环中,进而与环中的字符组进行匹配,得到一个数据与一个字符组对应关系的组合,从而可以将当前对应到的字符组作为数据的ID号进行保存。
由上述实例可知,本申请上述实施例通过在字符表中提取预定数目的字符之后,将数据与预定数目的字符所构成的字符组进行匹配来得到该数据所对应的ID值,由于从字符表中提取到的预定数目的字符可以构成海量的字符组,且字符组的内容不会发生重复,从而解决了在现有技术对数据进行处理得到ID的过程中,由于生成的短ID常会发生重复,导致生成的ID在应用领域中的应用性能较差的问题,进而实现在保证ID长度短的情况下,为海量数据生成唯一的ID的效果。
具体的,由于上述实施例中M通常取值为10位,因此,得到的ID的长度比较短,只有10位,理论上约可以容纳5.5e17数据,适合海量数据的存储。而且数据和ID之间建立了特定关系(海量数据通常都是分布式存储的,如果数据和ID之间没有任何关系,根据数据分区存储数据就做不到根据ID查数据,反之亦然),因此可以实现数据的分布式存储。例如,已知从一个字符表中提取了10个字符,并对该10个字符进行组合,得到多个字符组,每个字符组中字符不会重复。在设置了一个规格属性组合之后,可以采用同一个哈希算法分别对每个字符组和每个规格属性组合进行哈希计算,分别得到每个字符组的哈希值和每个规格属性组合的哈希值,由于采用的哈希算法相同,因此,每个规格属性组合的哈希值都会对应得到地址相同的字符哈希值,即得到当前设置的规格属性组合所对应的字符组,从而得到该规格属性组合对应的ID号,该ID号就是匹配到的字符组。此时,如果存在多个规格属性组合,就对每个规格属性组合进行相同的哈希算法,都可以匹配到一个字符组,由于字符组不会重复,因此得到的ID号不会重复。
由于上述实施例可以在ID和数据之间建立特定的字符,因此,可以根据ID计算出该字符,根据数据也可以计算出该字符,可用于分布式存储和查询的功能当中(如果ID和数据没有特定关系,根据ID来分离数据就做不到用数据来查找ID,反之亦然)。
本申请上述实施例中,第一处理模块10可以包括:第一排序模块101,用于将字符表中的所有字符按照ASCII码值进行排序,以获取字符集;组合模块102,用于在字符集中顺序提取M个字符,对排序后的M个字符进行顺序组合,以获取一个或多个字符组;保存模块103,用于将所有的字符组分别保存至对应的结果集中;第一计算模块104,用于采用哈希算法对每个结果集中的字符组进行计算,生成每个字符组所对应的字符哈希值。该实施例对M个字符排序后再对M个字符进行顺序组合,从而使得到的字符组的查询效率提高,同时为数据匹配过程提供了大量的匹配依据,避免了在保存大量数据时会出现不同数据对应同一个ID号的情况。具体的,该实施例中可以对M字符按照ASCII码值由大到小或者由小到大的顺序进行排序。
本申请上述实施例中,在通过第二处理模块30从标准产品单元SPU中读取一个或多个数据(例如商品的规格属性组合),并利用第一处理模块10中使用的一致性哈希算法将读取到的数据进行哈希计算,得到数据哈希值之后,第三处理模块50可以包括:匹配处理模块501,用于在每个数据哈希值分别与所有的字符哈希值进行匹配之后,依次得到每个数据所对应的字符组,其中,一个数据对应一个字符组,一个字符组对应一个或多个数据;第一获取模块502,用于在一个数据匹配到唯一的一个字符组情况下,字符组为当前数据的标识号码;第二获取模块503,用于在多个数据匹配到唯一的一个字符组的情况下,将字符组中的所有字符进行排列组合,以得到每一个数据所对应的字符排序组合,字符排序组合为对应数据的标识号码。本申请上述实施例实现了在ID出现重复的情况下,通过将字符组中的字符进行排列组合,得到海量的字符排列组合,使得每个数据所对应的标识号码都是唯一的,且长度不会变长。
优选地,上述第三处理模块50实施过程中,具体可以包括:第一匹配模块,用于将第一数据哈希值与所有的字符哈希值进行匹配,获取与第一数据匹配的字符组为第一字符组,并对第一字符组中所有字符的当前排序结果进行标记,标记赋值为i;第二匹配模块,用于将第二数据哈希值与所有的字符哈希值进行匹配,获取与第二数据匹配的字符组为第二字符组,当第二字符组与第一字符组相同时,即第二数据匹配到的字符组与第一数据匹配到的字符组相同,此时可以检测到第一字符组的标记已经赋值为i,则对第一字符组的标记加1,得到第二数据所对应的第一字符组的标记赋值为i=i+1;第二计算模块,用于将第一字符组中的所有字符按照ASCII码值进行排序,对排序后的第一字符组中的每个字符依次计算阶乘,以获取阶乘结果;第三获取模块,用于采用i对阶乘结果进行整除得到整除商,根据整除商的值将第一字符组中的一个字符删除,以获取第二数据所对应的字符排序组合;循环执行模块,用于重复执行第二匹配模块、第二计算模块以及第三获取模块,从而得到与第一字符组匹配的所有数据的标识号码。其中,上述装置实施例还可以包括:第四获取模块,用于采用i对阶乘结果进行整除,将得到的余数作为第一字符组的新标记的赋值。
上述实施例实现了,在检测到多个数据匹配到同一个字符组的情况下,采用排列组合的方式对该字符组中的所有字符进行处理,得到了次方数量级的字符排列组合,使得在多个数据对应同一个字符组时,可以依据数据的匹配顺序得到不同的字符排列组合,避免了由于HASH算法存在重复的概率,导致在保存大量数据时会出现不同数据对应同一个ID号的情况,保证了数据和ID之间对应关系的唯一性,提高了ID在应用领域中的应用性能。
由上可知,本申请上述实施例的ID和数据之间建立了特定关系,即数据生成ID的方案可以由数据得到一个字符组合,而ID的字符排列也可以得到一个字符组合,这两个字符组合相同,所以ID和数据之间建立了特定关系,便于实现数据的分布式存储。
图2是根据本申请实施例的获取标识号码的方法的流程图;图3是根据本申请实施例的获取标识号码方法的详细流程图。
如图2所示该方法包括如下步骤:
步骤S102,通过图1中的第一处理模块10来获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值。
步骤S104,通过图1中的第二处理模块30来读取一个或多个数据,并采用相同的哈希算法对每个数据进行计算,以生成一个或多个数据哈希值。
步骤S106,通过图1中的第三处理模块50来执行在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码。
本申请上述实施例通过在字符表中提取预定数目的字符之后,将数据与预定数目的字符所构成的字符组进行匹配来得到该数据所对应的ID值,由于从字符表中提取到的预定数目的字符可以构成海量的字符组,且字符组的内容不会发生重复,从而解决了在现有技术对数据进行处理得到ID的过程中,由于生成的短ID常会发生重复,导致生成的ID在应用领域中的应用性能较差的问题,进而实现在保证ID长度短的情况下,为海量数据生成唯一的ID的效果。
具体的,本申请上述实施例中的字符表可以由0-9,a-z,A-Z,+和-组成64位字符表,并设置M值为10位,即从字符表中获取10个字符进行组合,得到多个字符组,本实施例中可以采用一致性哈希算法将得到的每一个字符组分散到一个可以包含2的60次方个元素的环中,同时对已有的数据也利用上述一致性哈希HASH算法将每个数据也落到这个环中,并与环中的字符组进行匹配,得到一个数据与一个字符组对应关系的组合,从而可以将当前对应到的字符组作为数据的ID号进行保存。其中,本申请上述实施例中的数据可以是商品的所有规格属性。
本申请上述实施例中,获取字符表中的M个字符,并采用哈希算法对由M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值的步骤可以包括:将字符表中的所有字符按照ASCII码值进行排序,以获取字符集;在字符集中顺序提取M个字符,对排序后的M个字符进行顺序组合,以获取一个或多个字符组;将所有的字符组分别保存至对应的结果集中;采用哈希算法对每个结果集中的字符组进行计算,生成每个字符组所对应的字符哈希值。由于对M个字符进行顺序组合,为数据匹配过程提供了大量的匹配依据,从而避免了在保存大量数据时会出现不同数据对应同一个ID号的情况,同时使得字符组的查询效率提高。
具体的,上述实施例为生成所有字符组的算法,可以包括如下步骤:
首先,当前字符表一共包括有N个字符,可以将字符表中的字符按照ASCII码从小到大排序得到当前字符集,预设所要生成的字符组中的字符数目为M个字符。
然后,从字符表中选取ASCII码值最大的字符,然后在剩下的N-1个字符里选取第M-1个字符,直到从N-(M-1)个数中选取第1个字符为止,由此得到一个字符组,并将该字符组保存在结果集中。
最后,从N个数中选取编号次小的一个数,继续执行上一步,直到当前字符组可选的最后一个字符为第M个字符的情况下,得到了所有的字符组。
例如以一个包括了“a”、“b”、“c”三个字符的字符表为例,在M为2的情况下执行上述步骤,则可以生成多个包括有2个字符的字符组,字符组可以为:“ab”、“bc”、“ca”。
本申请上述实施例中,在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码可以包括:在每个数据哈希值分别与所有的字符哈希值进行匹配之后,依次得到每个数据所对应的字符组,其中,一个数据对应一个字符组,一个字符组对应一个或多个数据;其中,在一个数据匹配到唯一的一个字符组情况下,字符组为当前数据的标识号码;在多个数据匹配到唯一的一个字符组的情况下,将字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,字符排序组合为对应数据的标识号码。上述实施例实现了,当有多个数据匹配到相同的一个字符组时,可以提供在不改变标志号码长度的情况下通过排列组合仍然生成唯一的ID,使得在保证短ID的情况下,每个数据所对应的标识号码仍旧都是唯一的。
具体的,本申请上述实施例仍旧以包括0-9,a-z,A-Z,+和-组成的64位字符表为例进行描述,其中,设置M值为10位,可以采用一致性哈希算法将得到的每一个字符组分散到一个可以包含2的60次方个元素的环中,即可以把环分成10段,每段属于一个字符组,同时对已有的数据也利用上述一致性哈希HASH算法将每个数据也落到这个环中,并与环中的字符组进行匹配,得到一个数据与一个字符组对应关系的组合。
在完成得到一个数据与一个字符组对应关系的组合之后,由于一个数据可以对应一个字符组,但一个字符组也可以对应一个或多个数据,在一个字符组对应了多个数据的情况下,通过本实施例提供的采用标记赋值的方式来区分每个数据对应的字符组的实际内容,即利用字符组中字符串可以有不同的排列顺序来分别得到每个数据所对应的字符串,即每个数据对应得到的字符组中的字符排列顺序并不相同,由于数据所匹配的字符组就是该数据的标识号码,从而避免了两个数据的标识号码相同的情况,一个数据得到唯一的ID。
上述实例中的标记赋值的方式可以理解为当第一个数据匹配到当前字符组时,可以对当前第一数据对应的字符组的标记给予编号1,在当第二个数据也匹配到该字符组时,将第二个数据对应的字符组的标记给予一个新的编号,该新的编号就在原来编号基础上+1。即在数据根据哈希算法计算后也分配到字符进行哈希算法得到的环中之后,如果这个数据是第一个分配到那个段上的则给对应的标记赋值为1,如果是第二个那么标记赋值为2,其他以此类推,来根据标记赋值来确定当前数据所对应的字符组中的所有字符的排列顺序,该字符的排列就是当前数据对应的唯一ID。
本申请上述实施例中,将每个数据哈希值与所有的字符哈希值进行匹配,依次得到每个数据所对应的字符组,在多个数据匹配到唯一的一个字符组的情况下,将字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,字符排序组合为对应数据的标识号码的步骤包括:步骤A,将第一数据哈希值与所有的字符哈希值进行匹配,获取与第一数据匹配的字符组为第一字符组,并对第一字符组中所有字符的当前排序结果进行标记,标记赋值为i;步骤B,将第二数据哈希值与所有的字符哈希值进行匹配,获取与第二数据匹配的字符组为第二字符组,当第二字符组与第一字符组相同时,检测到第一字符的标记赋值为i,则对第一字符组的标记加1,得到第二数据所对应的第一字符组的标记赋值为i=i+1;步骤C,将第一字符组中的所有字符按照ASCII码值进行排序,对排序后的第一字符组中的每个字符依次计算阶乘,以获取阶乘结果;步骤D,采用i对阶乘结果进行整除得到整除商,根据整除商的值将第一字符组中的一个字符删除,以获取第二数据所对应的字符排序组合;步骤E,重复执行步骤B至步骤D,得到与第一字符组匹配的所有数据的标识号码。优选地,在步骤C之后,方法还可以包括:采用i对阶乘结果进行整除,将得到的余数作为第一字符组的新标记的赋值。
具体的,本申请上述实施例中的字符组的标记赋值会根据当前的标记赋值变化,即在当前数据匹配到当前字符组时,会检测当前字符组是否已经与其他的数据匹配成功,如果标记赋值大于1则确定已经有其他数据与该字符组匹配,则对当前的标记赋值增加1,同时根据标记赋值的具体值来获取当前字符组中字符构成的排列组合,例如,标记赋值为1时,取当前字符组的第一个字符排列组合作为当前数据对应的字符排列组合,标记赋值为2时,取当前字符组的第二个字符排列组合作为当前数据对应的字符排列组合,依次类推得到所有数据的ID号,且得到的ID号不会重复,本申请实施例中的标记赋值主要用于表征当前数据匹配的字符组中的字符排列组合的编号。
如图3所示,上述实施例具体实现步骤如下:
步骤S201,将包括了M个字符的字符组的字符集合按照ASCII码从小到大进行排序,获取得到当前数据对应的字符组set,并将当前数据所对应的字符组的标记赋值为n。
步骤S202,从当前字符组set依次取得一个字符,计算它的阶乘(如果是第一个那么阶乘就是(m-1)阶乘,其他类推)。
步骤S203,用标记赋值n除以步骤S202中取得的阶乘,得到一个整数商,这个整数商如果是k就从当前字符组set取第k个字符放到结果字符集中,其他类推。
步骤S204,用标记赋值n除以步骤S202取得的阶乘得到一个余数,这个余数为当前数据对应的新标记赋值。
步骤S205,从当前字符组中去掉步骤S203计算所得的字符。
步骤S206,判断当前字符组中的字符是否处理完毕,在处理完毕的情况下,执行步骤S207,否则,重复执行步骤S202至步骤S205,直到字符组中的所有字符处理完毕,以获取当前数据对应的结果字符集,所得的结果字符集就是该数据的字符排序组合。
步骤S207,判断标记赋值是否大于1,在检测到数据所对应的字符组的标记赋值n大于1的情况下,返回重复执行步骤S201至步骤S206,直到所有数据对应的字符组都处理完毕。
步骤S208,获取所有数据所对应的字符排序组合。
上述实施例对数据进行处理生成ID的方案可以由数据得到一个字符组,而ID中字符的排列也可以得到一个字符组,两个字符组相同,所以ID和数据之间建立了特定关系。
本申请上述实施例中所利用的哈希HASH算法可以利用MD5(Message Digest AlgorithmMD5,中文名为消息摘要算法第五版),根据已知的键值生成128位数据,取前60位转成整数就是HASH值,也可以取后60位进行转换,只要算法固定即可。
通常情况下优选采用一致性哈希算法实现,具体是对已知的键值根据HASH算法计算得到HASH值,计算的HASH值做为位置编号映射到一个可以包含2的60次个元素的环中,该位置保存的就是已知的键值。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
从以上的描述中,可以看出,本申请实现了如下技术效果:根据字符集得到数据对应的唯一的ID,当ID的长度是10位时,理论上可以保存5.5e17数据,适合海量数据的存储。由于在ID和数据之间建立了特定的字符,根据ID可计算出该字符,根据数据也可以计算出该字符,因此得到的ID值可用于分布式存储和查询(如果ID和数据没有特定关系,根据ID来分离数据就做不到用数据来查找ID,反之亦然)。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种获取标识号码的方法,其特征在于,包括:
获取字符表中的M个字符,并采用哈希算法对由所述M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;
读取一个或多个数据,并采用所述哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;
在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码。
2.根据权利要求1所述的方法,其特征在于,获取字符表中的M个字符,并采用哈希算法对由所述M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值包括:
将所述字符表中的所有字符按照ASCII码值进行排序,以获取字符集;
在所述字符集中顺序提取M个字符,对排序后的所述M个字符进行顺序组合,以获取一个或多个所述字符组;
将所有的字符组分别保存至对应的结果集中;
采用所述哈希算法对每个结果集中的字符组进行计算,生成每个字符组所对应的字符哈希值。
3.根据权利要求2所述的方法,其特征在于,在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码包括:
在每个数据哈希值分别与所有的字符哈希值进行匹配之后,依次获取每个数据所对应的字符组,其中,一个数据对应一个字符组,一个字符组对应一个或多个数据;其中,
在一个数据匹配到唯一的一个字符组情况下,所述字符组为当前所述数据的标识号码;
在多个数据匹配到唯一的一个字符组的情况下,将所述字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,所述字符排序组合为对应数据的标识号码。
4.根据权利要求3所述的方法,其特征在于,将每个数据哈希值与所述所有的字符哈希值进行匹配,依次得到每个数据所对应的字符组,在多个数据匹配到唯一的一个字符组的情况下,将所述字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,所述字符排序组合为对应数据的标识号码的步骤包括:
步骤A,将第一数据哈希值与所有的字符哈希值进行匹配,获取与第一数据匹配的字符组为第一字符组,并对所述第一字符组中所有字符的当前排序结果进行标记,所述第一字符组的标记赋值为i;
步骤B,将第二数据哈希值与所有的字符哈希值进行匹配,获取与第二数据匹配的字符组为第二字符组,当所述第二字符组与所述第一字符组相同时,检测到所述第一字符组的标记赋值为i,则对所述第一字符组的标记加1,得到所述第二数据所对应的所述第一字符组的标记赋值为i=i+1;
步骤C,将所述第一字符组中的所有字符按照ASCII码值进行排序,对排序后的第一字符组中的每个字符依次计算阶乘,以获取阶乘结果;
步骤D,采用i对所述阶乘结果进行整除得到整除商,根据所述整除商的值将所述第一字符组中的一个字符删除,以获取所述第二数据所对应的字符排序组合;
步骤E,重复执行步骤B至步骤D,得到与所述第一字符组匹配的所有数据的标识号码。
5.根据权利要求4所述的方法,其特征在于,在步骤C之后,所述方法还包括:
采用i对所述阶乘结果进行整除,将得到的余数作为所述第一字符组的新标记赋值。
6.一种获取标识号码的装置,其特征在于,包括:
第一处理模块,用于获取字符表中的M个字符,并采用哈希算法对由所述M个字符构成的一个或多个字符组进行计算,以生成一个或多个字符哈希值;
第二处理模块,用于读取一个或多个数据,并采用所述哈希算法对每个数据进行计算,以生成一个或多个数据哈希值;
第三处理模块,用于在每个数据哈希值分别匹配到一个字符哈希值之后,根据匹配得到的字符哈希值来获取每个数据的标识号码。
7.根据权利要求6所述的装置,其特征在于,所述第一处理模块包括:
第一排序模块,用于将所述字符表中的所有字符按照ASCII码值进行排序,以获取字符集;
组合模块,用于在所述字符集中顺序提取M个字符,对排序后的所述M个字符进行顺序组合,以获取一个或多个所述字符组;
保存模块,用于将所有的字符组分别保存至对应的结果集中;
第一计算模块,用于采用所述哈希算法对每个结果集中的字符组进行计算,生成每个字符组所对应的字符哈希值。
8.根据权利要求7所述的装置,其特征在于,所述第三处理模块包括:
匹配处理模块,用于在每个数据哈希值分别与所有的字符哈希值进行匹配之后,依次获取每个数据所对应的字符组,其中,一个数据对应一个字符组,一个字符组对应一个或多个数据;
第一获取模块,用于在一个数据匹配到唯一的一个字符组情况下,所述字符组为当前所述数据的标识号码;
第二获取模块,用于在多个数据匹配到唯一的一个字符组的情况下,将所述字符组中的所有字符进行排列组合,以得每一个数据所对应的字符排序组合,所述字符排序组合为对应数据的标识号码。
9.根据权利要求8所述的装置,其特征在于,所述第三处理模块包括:
第一匹配模块,用于将第一数据哈希值与所有的字符哈希值进行匹配,获取与第一数据匹配的字符组为第一字符组,并对所述第一字符组中所有字符的当前排序结果进行标记,所述第一字符组的标记赋值为i;
第二匹配模块,用于将第二数据哈希值与所有的字符哈希值进行匹配,获取与第二数据匹配的字符组为第二字符组,当所述第二字符组与所述第一字符组相同时,检测到所述第一字符组的标记赋值为i,则对所述第一字符组的标记加1,得到所述第二数据所对应的所述第一字符组的标记赋值为i=i+1;
第二计算模块,用于将所述第一字符组中的所有字符按照ASCII码值进行排序,对排序后的第一字符组中的每个字符依次计算阶乘,以获取阶乘结果;
第三获取模块,用于采用i对所述阶乘结果进行整除得到整除商,根据所述整除商的值将所述第一字符组中的一个字符删除,以获取所述第二数据所对应的字符排序组合;循环执行模块,用于重复执行所述第二匹配模块、所述第二计算模块以及所述第三获取模块,以得到与所述第一字符组匹配的所有数据的标识号码。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
第四获取模块,用于采用i对所述阶乘结果进行整除,将得到的余数作为所述第一字符组的新标记赋值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210041386.1A CN103257977B (zh) | 2012-02-21 | 2012-02-21 | 获取标识号码的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210041386.1A CN103257977B (zh) | 2012-02-21 | 2012-02-21 | 获取标识号码的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103257977A true CN103257977A (zh) | 2013-08-21 |
CN103257977B CN103257977B (zh) | 2017-07-04 |
Family
ID=48961906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210041386.1A Active CN103257977B (zh) | 2012-02-21 | 2012-02-21 | 获取标识号码的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103257977B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104820710A (zh) * | 2015-05-19 | 2015-08-05 | 福建新大陆电脑股份有限公司 | 一种数据校验值生成方法及系统 |
WO2015196692A1 (zh) * | 2014-06-24 | 2015-12-30 | 中兴通讯股份有限公司 | 一种云计算系统以及云计算系统的处理方法和装置 |
CN117745299A (zh) * | 2023-10-31 | 2024-03-22 | 北京国立信科技术有限公司 | 一种基于二维码防伪的方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6474071A (en) * | 1987-09-11 | 1989-03-20 | Toshiba Corp | Static actuator |
JPH04174071A (ja) * | 1990-11-02 | 1992-06-22 | Fujitsu Ltd | ハッシュ処理装置 |
US20080034115A1 (en) * | 2006-08-01 | 2008-02-07 | Yuan-Sun Chu | Apparatus for handling hash collisions of hash searching and method using the same |
CN101533414A (zh) * | 2009-04-15 | 2009-09-16 | 阿里巴巴集团控股有限公司 | 一种数据库记录唯一标识符生成的方法及装置 |
CN101533435A (zh) * | 2009-04-16 | 2009-09-16 | 北京水晶石数字科技有限公司 | 一种序列号生成和验证的方法 |
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
-
2012
- 2012-02-21 CN CN201210041386.1A patent/CN103257977B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6474071A (en) * | 1987-09-11 | 1989-03-20 | Toshiba Corp | Static actuator |
JPH04174071A (ja) * | 1990-11-02 | 1992-06-22 | Fujitsu Ltd | ハッシュ処理装置 |
US20080034115A1 (en) * | 2006-08-01 | 2008-02-07 | Yuan-Sun Chu | Apparatus for handling hash collisions of hash searching and method using the same |
CN101533414A (zh) * | 2009-04-15 | 2009-09-16 | 阿里巴巴集团控股有限公司 | 一种数据库记录唯一标识符生成的方法及装置 |
CN101533435A (zh) * | 2009-04-16 | 2009-09-16 | 北京水晶石数字科技有限公司 | 一种序列号生成和验证的方法 |
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
Non-Patent Citations (2)
Title |
---|
SUN GUODONG 等: "content audit based on hase string matching algorithm", 《2010 INTERNATIONAL CONFERENCE ON COMPUTER, MECHATRONICS, CONTROL AND ELECTRONIC ENGINEERING (CMCE)》 * |
王后珍 等: "多变量 Hash 函数的构造理论与方法", 《中国科学》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015196692A1 (zh) * | 2014-06-24 | 2015-12-30 | 中兴通讯股份有限公司 | 一种云计算系统以及云计算系统的处理方法和装置 |
CN104820710A (zh) * | 2015-05-19 | 2015-08-05 | 福建新大陆电脑股份有限公司 | 一种数据校验值生成方法及系统 |
CN104820710B (zh) * | 2015-05-19 | 2018-05-01 | 福建新大陆电脑股份有限公司 | 一种数据校验值生成方法及系统 |
CN117745299A (zh) * | 2023-10-31 | 2024-03-22 | 北京国立信科技术有限公司 | 一种基于二维码防伪的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103257977B (zh) | 2017-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5267670B2 (ja) | 情報検索システム、情報管理装置、情報検索方法、情報管理方法、及び、記録媒体 | |
CN101404032B (zh) | 一种基于内容的视频检索方法及系统 | |
CN106326475B (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN104599160A (zh) | 商品推荐方法和装置 | |
CN103491062B (zh) | 一种生成密码的方法和装置 | |
CN105657677A (zh) | 一种短信发送方法、短信网关及业务平台 | |
CN104954329A (zh) | 一种生物特征信息的处理方法及装置 | |
CN103257977A (zh) | 获取标识号码的方法及装置 | |
US20150379524A1 (en) | Method and system for authenticating physical items | |
CN105897412A (zh) | 一种网站密码生成方法及装置 | |
CN110874365B (zh) | 一种信息查询方法及其相关设备 | |
CN110234082B (zh) | 一种移动终端的寻址方法、装置、存储介质和服务器 | |
CN111355709A (zh) | 数据验证方法、装置、电子设备及计算机可读存储介质 | |
CN112650964B (zh) | 一种业务处理方法、设备及机器可读存储介质 | |
CN106250440B (zh) | 文档管理方法和装置 | |
US20190005533A1 (en) | Signal Matching for Entity Resolution | |
CN104008136A (zh) | 一种文本查找的方法和装置 | |
US9530028B2 (en) | Identifiers for mass serialization | |
CN101196910B (zh) | 一种确定网络资源的方法和装置 | |
CN113239052B (zh) | 一种联盟链分组方法、装置、设备和介质 | |
JP2020181332A (ja) | 高精度類似画像検索方法、プログラム及び高精度類似画像検索装置 | |
CN115801228B (zh) | 交互信息加密的方法、装置、电子设备及存储介质 | |
CN111339566B (zh) | 区块摘要方法、装置、计算机设备和存储介质 | |
CN115146315A (zh) | 低代码平台的隐私数据保护方法、装置、设备及存储介质 | |
CN108021646A (zh) | 一种查找链生成方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1184576 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1184576 Country of ref document: HK |