UUID详解

来源:互联网 发布:steam登录网络错误 编辑:程序博客网 时间:2024/06/05 04:10

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。

 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字  UUID由以下几部分的组合:  (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。  (2)时钟序列  (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单的生成UUID,其格式为:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显。根据使用的特定机制,UUID不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用惟一标识符有非常大的区别。
通用惟一标识符还可以用来指向大多数的可能的物体。微软和其他一些软件公司都倾向使用全球惟一标识符(GUID),这也是通用惟一标识符的一种类型,可用来指向组建对象模块对象和其他的软件组件。第一个通用惟一标识符是在网罗计算机系统(NCS)中创建,并且随后成为开放软件基金会(OSF)的分布式计算环境(DCE)的组件。

 

Linux操作系统下取得UUID的方法


    Linux下面,有专门生成UUID的命令:uuidgen [-r] [-t]。即可以生成一个32位的字符串。这个是在命令行得到。在/usr/include/lib里面有个/uuid/uuid.h,其中定义了个数据uuid,无符号的字符指针。同时有专门生成UUID的函数:uuid_generate(uuid_t uu),生成的UUID放在参数UU里面。此时得到的结果是一个8位数的16进制数。
在UUID生成函数的过程中经过了一些处理,才生成的是8位的16进制数,原因在于,在它生成的过程中,本来生成的是32位的长整形,结果经过uuid_parse进行转换变成8位的16进制数。相反,我们有uuid_unparse函数,可以反向将16进制数转换为32位的整形。
注意的是:
在linux下要编译生成uuid函数的时候,我们要进行库的连接也就是最后要加上一个 –luuid。完全形式为:gcc –o uuid uuid.c –luuid。同时在定义保存变换的32位长整形的字符串时,我们要合理分配空间。最不安全的办法就是,申请一个指针去存放一个字符传,切忌避免这样做!

描述

uuid_generate函数创建一个新的通用唯一标识符(UUID)。 从/ dev / urandom的 ,如果可用的随机性高品质的基础上,将产生的UUID。 如果不可用,,然后uuid_generate将使用另一种算法,它使用当前时间,本地以太网的MAC地址(如果可用),并随机数据产生,使用伪随机数发生器。

uuid_generate_random功能强制使用的所有随机UUID格式,高质量的随机数发生器(例如,/ dev / urandom的 ),即使是不提供的,在这种情况下,伪随机发生器将被换掉。 需要注意的是一个伪随机数发生器的使用可能危及以这种方式产生的UUID的唯一性。

uuid_generate_time功能强制使用的替代算法,它使用当前的时间和本地以太网的MAC地址(如果可用)。 该算法使用的是默认的用于生成的UUID,但因为使用的以太网MAC地址,它可以泄漏约在何时何地产生的UUID的信息。 这可能会导致在某些应用中的隐私问题,因此,uuid_generate功能只使用该算法的随机性高品质的来源无法使用。

UUID是16字节(128位),从而使约3.4x10 ^ 38(根据卡尔·萨根的宇宙,有大约10 ^ 80宇宙elemntary的粒子)独特的价值观。 可以合理地被视为新的UUID,其中在本地系统上创建的所有独特的UUID,在过去和未来之间的其他系统上创建的UUID。 


参考资料:http://blog.csdn.net/zhoubl668/article/details/6156758

                  http://blog.csdn.net/bytxl/article/details/8289509?locationNum=8&fps=1