本发明涉及通信技术领域,具体涉及一种全局唯一标识符guid生成方法及装置。
背景技术:
全局唯一标识符(globallyuniqueidentifier,guid),是一种由算法生成的二进制长度为128位的数字标识符。guid主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的guid。主要可以用于在拥有多个节点、多台计算机的网络或系统中,让分布式系统中的所有元素,都能有唯一的辨识资讯。
但是,现有技术中,guid二进制长度较长,占用空间较大。
技术实现要素:
本发明的目的在于提供一种guid生成方法及装置,用以解决现有技术中的guid二进制长度较长,占用空间较大的问题。
为实现上述目的,本发明的技术方案为:
第一,本发明提供一种guid生成方法,所述方法包括:
获取待标记对象的位置坐标;
根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值;
将所述二进制长度小于128位的数值,作为所述guid。
进一步的,所述位置坐标中的各维度数据,分别为经度和纬度。
进一步的,根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值,具体包括:
根据所述经度和所述纬度,获取所述经度中的度、分、秒分别对应的第一数值、第二数值和第三数值,并获取所述纬度中的度、分、秒分别对应的第四数值、第五数值和第六数值;
根据第一公式,计算出第七数值,其中,所述第七数值对应的二进制长度为16位;
根据第二公式,计算出第八数值,其中,所述第八数值对应的二进制长度为24位;
将所述第七数值排列在所述第八数值前面得到的数值,作为所述二进制长度小于128位的数值;
其中,所述第一公式为:第七数值=第一数值*180+第四数值;
所述第二公式为:第八数值=第二数值<<18|第三数值<<12|第五数值<<16|第六数值&0x00ffffff。
进一步的,将所述二进制长度小于128位的数值,作为所述guid之后,所述方法包括:
将所述guid解析为位置坐标。
第二,本发明提供一种guid生成装置,所述装置包括
获取模块,用于获取待标记对象的位置坐标;
转化模块,用于根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值;
确定模块,用于将所述二进制长度小于128位的数值,作为所述guid。
进一步的,所述位置坐标中的各维度数据,分别为经度和纬度。
进一步的,所述转化模块,具体用于:
根据所述经度和所述纬度,获取所述经度中的度、分、秒分别对应的第一数值、第二数值和第三数值,并获取所述纬度中的度、分、秒分别对应的第四数值、第五数值和第六数值;
根据第一公式,计算出第七数值,其中,所述第七数值对应的二进制长度为16位;
根据第二公式,计算出第八数值,其中,所述第八数值对应的二进制长度为24位;
将所述第七数值排列在所述第八数值前面得到的数值,作为所述二进制长度小于128位的数值;
其中,所述第一公式为:第七数值=第一数值*180+第四数值;
所述第二公式为:第八数值=第二数值<<18|第三数值<<12|第五数值<<16|第六数值&0x00ffffff。
进一步的,所述装置还包括解析模块,用于:
在所述确定模块将所述二进制长度小于128位的数值,作为所述guid之后,将所述guid解析为位置坐标。
本发明具有如下优点:
通过获取待标记对象的位置坐标,根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值,将所述二进制长度小于128位的数值,作为所述guid,其中,由于guid的二进制长度小于128位,小于现有技术中的guid的二进制的长度,因此,缩短了现有技术中guid的二进制长度,减小了占用空间。
附图说明
图1为本发明提供的一种guid生成方法的流程示意图;
图2为本发明提供的一种具体的guid生成方法的流程示意图;
图3为本发明提供的一种guid生成装置的结构示意图。
具体实施方式
以下实施例用于说明本发明,但不用来限制本发明的范围。
实施例1
为了解决现有技术中的guid二进制长度较长,占用空间较大的问题,本发明实施例1提供一种guid生成方法,该方法的流程示意图可参见图1,该方法包括下述步骤:
步骤101,获取待标记对象的位置坐标。
步骤102,根据预设规则,将位置坐标,转化为二进制长度小于128位的数值。
步骤103,将二进制长度小于128位的数值,作为guid。
上述位置坐标中的各维度数据,分别可以为经度和纬度。若待标记对象是虚拟的,非实体,则可将某一虚拟系统中的所有待标记对象,赋予不重复的位置坐标。
若上述位置坐标中的各维度数据,分别为经度和纬度,则根据预设规则,将位置坐标,转化为二进制长度小于128位的数值的实现方式如下:
(1)根据经度和纬度,获取经度中的度、分、秒分别对应的第一数值、第二数值和第三数值,并获取纬度中的度、分、秒分别对应的第四数值、第五数值和第六数值。
其中,由于东经和西经可能存在数值相同的情况,南纬和北纬可能存在数值相同的情况,为了区别开来,可以事先设定,东经在度这一精度上的取值范围为0~180度,西经在度这一精度上的取值范围为181~360度,或者,东经在度这一精度上的取值范围为181~360度,西经在度这一精度上的取值范围为0~180度;南纬在度这一精度上的取值范围为0~90度,北纬在度这一精度上的取值范围为91~180度,或者,南纬在度这一精度上的取值范围为91~180度,北纬在度这一精度上的取值范围为0~90度。
(2)根据第一公式,计算出第七数值,其中,第七数值对应的二进制长度为16位。
其中,第一公式为:第七数值=第一数值*180+第四数值。
(3)根据第二公式,计算出第八数值,其中,第八数值对应的二进制长度为24位。
第二公式为:第八数值=第二数值<<18|第三数值<<12|第五数值<<16|第六数值&0x00ffffff。
(4)将第七数值排列在第八数值前面得到的数值,作为二进制长度小于128位的数值。
综上,最终得到的二进制长度小于128位的数值,二进制长度为40位。
在执行步骤103之后,可根据guid获取到待标记对象所在的位置坐标,即可以将guid解析为位置坐标。若位置坐标中的各维度数据,分别为经度和纬度,则可采用下述方法解析:
(1)根据第三公式,获取第一数值,其中,第三公式为:第一数值=[第七数值/180]。
(2)根据第四公式,获取第三数值,其中,第四公式为:第四数值=第七数值%180。
(3)根据第五公式,获取第二数值,其中,第五公式为:第二数值=(第八数值&0xfc0000)>>18。
(4)根据第六公式,获取第四数值,其中,第六公式为:第三数值=(第八数值&0x3f000)>>12。
(5)根据第七公式,获取第五数值,其中,第七公式为:第五数值=(第八数值&0xfc0)>>6。
(6)根据第八公式,获取第三数值,其中,第八公式为:第六数值=第八数值&0x3f。
其中,根据第一数值~第三数值,便可获取到经度,根据第四数值~第六数值,便可获取到纬度。
本发明实施例1中,需要说明的是,guid的总数是2^40个,guid的产生是非随机的,和待标记对象的位置坐标有关,因为空间不能重叠,在一定的精度要求下,可保证guid具备唯一性。
guid分为两部分,第一部分和第二部分,第一部分便为上文中提及的第七数值,第二部分便为上文中提及的第八数值,guid的格式可以为:第一部分-第二部分,其中,若guid用十六进制来表示,则上述格式可表示为xxxx-xxxxx,那么每个x可以是0~9,或a~f范围内的一个十六进制的数字。
guid的第一部分,是由经度的度和纬度的度分别对应的数值生成的,用户可以根据实际需求,确定是否仅仅只计算第一部分,将第一部分确定为guid。
guid的第二部分,是有经度和纬度的分、秒分别对应的数值生成的,用户可根据实际需求,确定使用精度是否精确到秒或者更小。若用户想要将经度提高到微秒或毫秒,那么,可以用上文提及的算法,来计算出guid,此处不再进行赘述,只不过最终得到的guid的二进制长度会大于40,但是依然小于128。
其中,可将上述第一部分称为主码,将上述第二部分称为次码。那么,上述guid的格式可以为主码-次码。主码对应的经纬度中的度的数值,用于粗略定位待标记对象的位置,次码对应的经纬度中的分、秒的数值,用于精确定位待标记对象的位置,若对待标记对象的位置要求不精确,可获取精度到度的经纬度,以主码作为guid;若对待标记对象的位置要求精确,可以获取精度到秒的经纬度,以主码-次码作为guid。
guid的范围为[0x0000000000,0xfd1fefbefb]。
二进制长度为40位的最大数值为0xffffffffff,guid的保留值位于(0xfd1fefbefb,0xffffffffff)之间,用户可以根据实际情况进行设置。
另外,本发明实施例1中,位置坐标除了可以为经度和纬度外,还可以是其他任意类型的物理坐标,生成方法参见上文提及的方法,这里不再赘述,其中,需要说明的是,上述其他任意类型的物理坐标,可能不具有唯一性,所以生成的位局部的giud,用于在某一系统中进行标识使用。
通过获取待标记对象的位置坐标,根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值,将所述二进制长度小于128位的数值,作为所述guid,其中,由于guid的二进制长度小于128位,小于现有技术中的guid的二进制的长度,因此,缩短了现有技术中guid的二进制长度,减小了占用空间。
另外,现有技术中,生成guid的算法比较复杂,一般在电脑端上使用,并且因为使用了时钟计数,还要求使用guid的设备具有一定精度的时钟系统,限制了现有技术中的生成guid的算法的使用范围。现有技术中,不同的操作系统,产生的guid是不同的,无法统一使用,只能在某一系统中使用。然而,本发明实施例1中提供的guid生成方法,使用的仅仅为较为简单的运算,对设备没要求,适用范围较广。且,本发明实施例1提供的guid生成方法所生成的guid,可适用于任何操作系统。
再者,现有技术中的guid,仅仅用于唯一标识待标记的对象,除此便无其他含义,而本发明实施例1中提供的guid生成方法生成的guid,除了可唯一标识待标记对象外,还可表示该待标记对象的地理位置信息。
实施例2
本发明实施例2提供一种具体的guid生成方法,该方法的流程示意图可参见图2,该方法包括下述步骤:
步骤201,获取待标记对象的经度和纬度。
其中,经度为100度10分5秒,纬度为10度7分9秒。
步骤202,根据第一公式计算第七数值,根据第二公式计算第八数值。
步骤203,将第七数值排列在第八数值前面得到的数值作为guid。
沿用上例,则第一数值~第七数值分别为100、10、5、10、7及9。那么,第七数值=100*180+10=18001,第七数值对应的二进制数值为0100011001010001,第七数值对应的二进制长度为16位;第八数值=10<<18|5<<12|7<<6|9&0x00ffffff=2642377,第八数值对应的二进制数值为001010000101000111001001,第八数值对应的二进制长度为24位。将第七数值排在第八数值的前面得到的数值180012642377,作为二进制长度小于128位的数值,即guid。
在一种实施场景中,guid的格式可以为:第七数值-第八数值,那么沿用上例,guid可以为18001-2642377,若用二进制来表示,则可以为0100011001010001-001010000101000111001001,若用十六进制来表示,则可以为4651-2851c9,其中4651是18001对应的十六进制数值,2851c9是2642377对应的十六进制数值。
通过获取待标记对象的位置坐标,根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值,将所述二进制长度小于128位的数值,作为所述guid,其中,由于guid的二进制长度小于128位,小于现有技术中的guid的二进制的长度,因此,缩短了现有技术中guid的二进制长度,减小了占用空间。
实施例3
本发明实施例3提供一种guid生成装置,该装置的结构示意图可参见图3,该装置包括:
获取模块301,用于获取待标记对象的位置坐标。
转化模块302,用于根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值。
确定模块303,用于将所述二进制长度小于128位的数值,作为所述guid。
在一种实施场景中,所述位置坐标中的各维度数据,分别为经度和纬度。
在一种实施场景中,所述转化模块302,具体用于:
根据所述经度和所述纬度,获取所述经度中的度、分、秒分别对应的第一数值、第二数值和第三数值,并获取所述纬度中的度、分、秒分别对应的第四数值、第五数值和第六数值;
根据第一公式,计算出第七数值,其中,所述第七数值对应的二进制长度为16位;
根据第二公式,计算出第八数值,其中,所述第八数值对应的二进制长度为24位;
将所述第七数值排列在所述第八数值前面得到的数值,作为所述二进制长度小于128位的数值;
其中,所述第一公式为:第七数值=第一数值*180+第四数值;
所述第二公式为:第八数值=第二数值<<18|第三数值<<12|第五数值<<16|第六数值&0x00ffffff。
在一种实施场景中,所述装置还包括解析模块,用于:
在所述确定模块将所述二进制长度小于128位的数值,作为所述guid之后,将所述guid解析为位置坐标。
通过获取待标记对象的位置坐标,根据预设规则,将所述位置坐标,转化为二进制长度小于128位的数值,将所述二进制长度小于128位的数值,作为所述guid,其中,由于guid的二进制长度小于128位,小于现有技术中的guid的二进制的长度,因此,缩短了现有技术中guid的二进制长度,减小了占用空间。
需要说明的是,实施例1~3中提及的各技术特征可自由组合,本发明对此不进行任何限定。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。