一种产生标识符的方法

文档序号:7625665阅读:133来源:国知局
专利名称:一种产生标识符的方法
技术领域
本发明涉及通信领域的标识符产生技术,特别涉及一种产生标识符的方法。
背景技术
在通信技术领域中,标识符(ID)的应用非常广泛。例如电话卡、充值卡或银行卡等各种卡的卡号都是一个ID,用于唯一标识一张卡;电话会议接入码、网络会议接入码等也都是一个ID,用于唯一标识一个电话会议或网络会议。上述各种ID应满足以下要求1、ID为数字的组合,使用户能够在通信终端上输入。
2、ID具有唯一性,一个ID只能标识一个对象,不能与已有的ID重复。
3、ID具有随机性,每次产生的ID没有任何规律,任何人任何时候都不能通过已知的ID,推导出新产生的ID。
4、ID具有长度可配置性,用户可根据被标识对象数量的变化来配置ID的长度。
现有技术中,一般利用以下两种方式来产生满足上述要求的ID一种是利用每位随机并组合的方式;另一种是利用系统当前时间戳与随机数组合的方式。
其中,利用每位随机并组合的方式产生ID的原理如下如果要产生一个N位的ID,则对于N位中每一位分别产生
之间的随机数,将产生的随机数组合在一起形成一个N位的ID,然后判断已有的ID中是否包含有新产生的这个ID,如果有,则说明新产生的ID与已有的ID重复,需要再次产生一个ID,直至新产生的ID与已有的ID不重复为止。
利用系统当前时间戳与随机数组合的方式产生ID的原理如下计算机编程语言可以提供获取系统当前时间戳的方法及产生随机数的随机函数,利用计算机编程语言提供的获取系统当前时间戳的方法获取系统的当前时间戳,利用计算机编程语言提供的产生随机数的随机函数产生一个一位或几位的随机数,然后将获取的时间戳设置在高位,将产生的随机数设置在低位,二者组合在一起形成一个ID。
这里,利用计算机编程语言提供的获取系统当前时间戳的方法所获取的系统当前时间戳,一般是从1970年1月1日0时0分0秒起到现在某一时刻所经过的秒数,该秒数在计算机中一般用4字节的整型数来存储。
对于第一种产生ID的方式而言,虽然产生的ID满足全部数字、唯一、随机和长度可配置的要求,但是已有ID的数量越多,已有ID中包含有新产生的ID的概率就越大,对于新产生的ID包含在已有ID的情况,又要重新生成ID,……,如此反复,产生ID的效率很低,无法满足一些对产生ID的效率要求高的场合。
对于第二种产生ID的方式而言,由于在现有的计算机系统中,时间戳一般使用四字节的整型数来表示,其长度已达到10个字符,如果在其后再加上一个一位或几位的随机数,将导致产生ID的位数过长,不能很好地满足用户根据被标识对象数量的变化来配置ID长度的要求。另外,由于利用随机函数产生的随机数是可能发生重复的,如果每秒钟允许产生多个ID,则产生的ID就可能发生重复,这样仍需要同第一种产生ID的方式一样,判断新产生的ID是否重复,所以第二种产生ID的方式限制了每秒钟只能产生一个ID,显然无法满足大数据量业务应用的要求。

发明内容
有鉴于此,本发明的主要目的在于提供一种产生ID的方法,以提高产生满足全部数字、唯一、随机和长度可配置要求ID的效率,并满足大数据量业务应用的要求。
为达到上述目的,本发明提供了一种产生ID的方法,包括以下步骤A、配置ID的取值范围,根据ID的可用性划分ID的取值区间;
B、在所划分的任意一个取值区间中任取一个ID作为新产生的ID。
上述方案中,步骤A中所述的根据ID的可用性划分ID的取值区间为在配置的ID的取值范围中根据所有已用的ID确定当前所有可用的ID,将当前所有可用的ID划分为ID值连续的至少一个取值区间。
上述方案中,所述的步骤B包括B1、对所划分的所有取值区间进行编号;B2、利用随机函数产生编号数目范围内的一个随机数,选择编号与产生的随机数相同的取值区间,判断所选择用于产生ID的取值区间内ID的个数,如果该取值区间内只有一个ID,则取该ID作为新产生的ID;如果该取值区间内有一个以上的ID,则执行步骤B3;B3、利用随机函数产生该取值区间中ID数目范围内的一个随机数,取该取值区间中与该随机数对应的ID作为新产生的ID。
上述方案中,所述ID需产生多个,该方法进一步包括根据ID的可用性更新ID的取值区间,在更新后的任意一个取值区间中任取一个ID作为新产生的ID。
上述方案中,所述产生上一个ID时选择用于产生ID的取值区间内只有一个ID;所述更新ID的取值区间为删除该取值区间,并对剩余的取值区间重新编号。
上述方案中,所述产生上一个ID时选择用于产生ID的取值区间内有一个以上的ID,且将该取值区间的一个边界ID作为新产生的ID;所述更新ID的取值区间为删除该取值区间中作为新产生ID的边界ID,更新该取值区间。
上述方案中,所述产生上一个ID时选择用于产生ID的取值区间内有一个以上的ID,且将该取值区间的一个非边界ID作为新产生的ID;所述更新ID的取值区间为删除该取值区间中作为新产生ID的非边界ID,将该取值区间划分为两个取值区间,并对所有取值区间重新编号。
因此,本发明提供的这种产生ID的方法,通过配置ID的取值范围,根据ID的可用性划分ID的取值区间,并利用随机函数在所划分的任意一个取值区间中任取一个ID作为新产生的ID,能够产生满足全部数字、唯一、随机和长度可配置要求的ID。
利用本发明,由于ID的取值范围可以由用户根据实际需要来配置,设定ID的最大值和最小值,所以能够保证产生的ID为全部数字且长度可配置的ID。在需要产生多个ID时,由于每次产生ID后都要更新ID的取值区间,使每次都在未用ID的范围内产生ID,所以能够保证产生ID的唯一性。由于本发明是利用随机函数来随机选择产生ID的取值区间,并在该取值区间中利用随机函数来随机选择一个ID作为产生的ID,所以能够在最大程度上保证产生ID的随机性。因此,本发明能够产生满足全部数字、唯一、随机和长度可配置要求的ID。
由于每次都在未用ID的范围内产生ID,保证产生的ID满足唯一性要求,在产生ID时不必判断产生的ID是否会发生重复,所以大大提高了产生满足全部数字、唯一、随机和长度可配置要求ID的效率。
由于产生满足全部数字、唯一、随机和长度可配置要求的ID与计算机系统的当前时间戳无关,在单位时间内可以产生大量满足要求的ID,所以能够满足大数据量业务应用的要求。


图1为本发明产生ID总体技术方案的实现流程图;图2为本发明一个实施例中产生ID的方法流程图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例,并参照附图,对本发明进一步详细说明。
本发明的核心内容是通过配置ID的取值范围,根据ID的可用性划分ID的取值区间,并利用随机函数在所划分的任意一个取值区间中任取一个ID作为新产生的ID,能够产生满足全部数字、唯一、随机和长度可配置要求的ID。
如图1所示,图1为本发明产生ID总体技术方案的实现流程图,该方法包括以下步骤步骤101配置ID的取值范围,根据ID的可用性划分ID的取值区间;步骤102在所划分的任意一个取值区间中任取一个ID作为新产生的ID。
在上述步骤101中,所述配置ID的取值范围是用户根据实际需要设定ID的最大值和最小值进行的。例如,如果用户根据实际需要希望ID的长度为5,则可以设定ID的最小值为10000,设定ID的最大值为99999,将ID的取值范围配置为[10000,99999]。
所述根据ID的可用性划分ID的取值区间,是在配置的ID的取值范围中根据所有已用的ID确定当前所有可用的ID,将当前所有可用的ID划分为ID值连续的至少一个取值区间。
例如,如果配置的ID的取值范围为[10000,99999],假设在该取值范围中没有已用的ID,所有的ID都是可用的ID,则将所有可用的ID划分为ID值连续的取值区间为[10000,99999]。假设在该取值范围中10010、11001、25001、33001、52002、68005和95608为全部已用的ID,为了保证产生的ID与已用的ID不发生重复,将ID的取值范围[10000,99999]划分为[10000,10009]、[10011,11000]、[11002,25000]、[25002,33000]、[33002,52001]、[52003,68004]、[68006,95607]和[95609,99999]几个ID值连续的取值区间。
在上述步骤102中,所述在所划分的任意一个取值区间中任取一个ID作为新产生的ID包括先对所划分的所有取值区间进行编号,然后利用随机函数产生编号数目范围内的一个随机数,选择编号与产生的随机数相同的取值区间,判断该取值区间内ID的个数,如果该取值区间内只有一个ID,则取该ID作为新产生的ID;如果该取值区间内有一个以上的ID,则利用随机函数产生该取值区间中ID数目范围内的一个随机数,取该取值区间中与该随机数对应的ID作为新产生的ID。
利用上述产生ID的方法,可以产生一个满足全部数字、唯一、随机和长度可配置要求的ID。如果需要产生多个满足全部数字、唯一、随机和长度可配置要求的ID,该方法进一步包括根据ID的可用性更新ID的取值区间,在更新后的任意一个取值区间中任取一个ID作为新产生的ID。其中,所述根据ID的可用性更新ID的取值区间包括以下几种情况情况1、如果步骤102中利用随机函数选择的取值区间内只有一个ID,则取该ID作为新产生的ID后,该ID就成为已用的ID,为了保证在下一次产生ID时不会产生与该ID重复的ID,需要将该取值区间直接删除,并对剩余的取值区间重新编号,实现对ID取值区间的更新。
情况2、如果步骤102中利用随机函数选择的取值区间内有一个以上的ID,则利用随机函数在该取值区间中任意选取一个ID作为新产生的ID后,选取的这个ID就成为已用的ID,为了保证在下一次产生ID时不会产生与该ID重复的ID,需要将取值区间中的这个ID删除,实现对ID取值区间的更新。此时又有两种情形情形a、如果在选择的取值区间中将取值区间的一个边界ID作为新产生的ID,则直接删除该取值区间中作为新产生ID的边界ID,即可实现对ID取值区间的更新;情形b、如果在选择的取值区间中将取值区间的一个非边界ID作为新产生的ID,则删除该取值区间中作为新产生ID的非边界ID,同时将该取值区间划分为两个取值区间,并对所有的取值区间重新编号。
为了能够更加清楚地说明本发明提供的这种产生ID的方法,以下结合一个具体的实施例,并参照附图对此进行详细说明。
如图2所示,图2为本发明一个实施例中产生ID的方法流程图。在本实施例中需要产生多个ID,假设用户根据实际需要配置的ID的取值范围为
,在该取值范围内已用的ID为3、5、6、7、12、14和55,该方法包括以下步骤步骤201为了保证产生的ID与已用的ID不发生重复,根据配置的ID的取值范围
,以及已用的ID 3、5、6、7、12、14和55,将ID的取值范围
划分为
、[4,4]、[8,11]、[13,13]、[15,54]、[56,2147483648]等ID值连续的取值区间。
步骤202对划分的取值区间
、[4,4]、[8,11]、[13,13]、[15,54]、[56,2147483648]进行编号,得到表1。

表1步骤203利用随机函数产生编号数目范围
内的一个随机数,选择编号与产生的随机数相同的取值区间。
步骤204判断选择的用于产生ID的取值区间内ID的个数,如果所选择的取值区间内只有一个ID,则执行步骤205;如果所选择的取值区间内有一个以上的ID,则执行步骤206。
步骤205取该取值区间内的ID作为新产生的ID,更新表1所述ID的取值区间,然后执行步骤207。
例如,如果利用随机函数产生编号数目范围
内的随机数为3,则选择编号为3的取值区间[13,13]作为用于产生ID的取值区间,由于该取值区间中只有一个ID 13,则将13作为新产生的ID;在产生该ID后,直接删除编号为3的取值区间,并对剩余的取值区间重新编号,更新后的取值区间如表2所示。

表2
步骤206利用随机函数产生所选择的取值区间中ID数目范围内的一个随机数,取该取值区间中与该随机数对应的ID作为新产生的ID,并更新ID的取值区间。
例如,如果利用随机函数产生编号数目范围
内的随机数为4,则选择编号为4的取值区间[15,54]为产生ID的取值区间,由于该取值区间中有40个ID,则利用随机函数产生该取值区间中ID数目范围
内的一个随机数。
此时,如果利用随机函数产生该取值区间中ID数目范围
内的随机数为0,则将取该取值区间中与该随机数0对应的ID作为新产生的ID,这里由于与该随机数0对应的ID为15,即开始区间值15+随机数值0=15,所以将15作为新产生的ID;在产生该ID后,删除该取值区间[15,54]中作为新产生ID的边界ID 15,更新该取值区间为[16,54],更新后的取值区间如表3所示。

表3如果利用随机函数产生该取值区间中ID数目范围
内的随机数为12,则将取该取值区间中与该随机数12对应的ID作为新产生的ID,这里由于与该随机数12对应的ID为27,即开始区间值15+随机数值12=27,所以将27作为新产生的ID;在产生该ID后,删除该取值区间[15,54]中作为新产生ID的非边界ID 27,将该取值区间[15,54]划分为两个取值区间[15,26]和[28,54],并对所有取值区间重新编号,更新后的取值区间如表4所示。

表4步骤207在更新后的ID的取值区间中,重复执行步骤203~206,产生下一个满足要求的ID,如此反复多次,可以产生多个满足要求的ID。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种产生标识符的方法,其特征在于,包括以下步骤A、配置标识符ID的取值范围,根据ID的可用性划分ID的取值区间;B、在所划分的任意一个取值区间中任取一个ID作为新产生的ID。
2.根据权利要求1所述的方法,其特征在于,步骤A中所述的根据ID的可用性划分ID的取值区间为在配置的ID的取值范围中根据所有已用的ID确定当前所有可用的ID,将当前所有可用的ID划分为ID值连续的至少一个取值区间。
3.根据权利要求1所述的方法,其特征在于,所述的步骤B包括B1、对所划分的所有取值区间进行编号;B2、利用随机函数产生编号数目范围内的一个随机数,选择编号与产生的随机数相同的取值区间,判断所选择用于产生ID的取值区间内ID的个数,如果该取值区间内只有一个ID,则取该ID作为新产生的ID;如果该取值区间内有一个以上的ID,则执行步骤B3;B3、利用随机函数产生该取值区间中ID数目范围内的一个随机数,取该取值区间中与该随机数对应的ID作为新产生的ID。
4.根据权利要求3所述的方法,其特征在于,所述ID需产生多个,该方法进一步包括根据ID的可用性更新ID的取值区间,在更新后的任意一个取值区间中任取一个ID作为新产生的ID。
5.根据权利要求4所述的方法,其特征在于,所述产生上一个ID时选择用于产生ID的取值区间内只有一个ID;所述更新ID的取值区间为删除该取值区间,并对剩余的取值区间重新编号。
6.根据权利要求4所述的方法,其特征在于,所述产生上一个ID时选择用于产生ID的取值区间内有一个以上的ID,且将该取值区间的一个边界ID作为新产生的ID;所述更新ID的取值区间为删除该取值区间中作为新产生ID的边界ID,更新该取值区间。
7.根据权利要求4所述的方法,其特征在于,所述产生上一个ID时选择用于产生ID的取值区间内有一个以上的ID,且将该取值区间的一个非边界ID作为新产生的ID;所述更新ID的取值区间为删除该取值区间中作为新产生ID的非边界ID,将该取值区间划分为两个取值区间,并对所有取值区间重新编号。
全文摘要
本发明公开了一种产生ID的方法,包括以下步骤A.配置ID的取值范围,根据ID的可用性划分ID的取值区间;B.在所划分的任意一个取值区间中任取一个ID作为新产生的ID。利用本发明,能够产生满足全部数字、唯一、随机和长度可配置要求的ID,大大提高了产生满足全部数字、唯一、随机和长度可配置要求ID的效率,并能够满足大数据量业务应用的要求。
文档编号H04L29/12GK1874357SQ20051011252
公开日2006年12月6日 申请日期2005年9月30日 优先权日2005年9月30日
发明者李阳林 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1