uuid/guid 通用唯一识别码 (Universally Unique Identifier)

原创 2011年01月21日 13:16:00

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的唯一缺陷在于生成的结果串会比较长。关于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和GUID

通用惟一标识符(UUID)是128位比特的数字,用来惟一地标识因特网上的某些对象或者实体。 A Universally Unique Identifier is an identif...

UUID 和 GUID 的区别

UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000 http://gohand...

UUID生成方法总结

转自:http://puxx.blog.ustc.edu.cn/index.php/2013/06/28/uuid%E7%94%9F%E6%88%90%E6%96%B9%E6%B3%95%E6%80%...
  • yasi_xi
  • yasi_xi
  • 2013年07月11日 09:59
  • 39664

GUID UUID 生成

GUID 和 UUID 是一样的,表示全球唯一标识码。 如果要获取一个GUID,如果你非常了解GUID算法,可以自己用C++(当然可以是任何语言)写一个算法,这里我介绍两种简方法; 方法一...

Java 产生 GUID / UUID

Java 产生 GUID,利用导入类 java.util.UUID,生成的GUID为一串32位字符组成的128位数据,可以做到全球唯一。 产生GUID相当容易,以下是一次生成5条GUID代码的演示。 ...
  • joyous
  • joyous
  • 2012年02月05日 23:40
  • 28838

UUID 、GUID、COMB 的区别与联系

UUID是一个标准、GUID是UUID的实现、COMB是GUID的改进
  • doris_d
  • doris_d
  • 2015年07月08日 11:02
  • 1597

Java 产生 UUID / GUID

Java 产生 UUID / GUID,利用导入类 java.util.UUID,生成的 UUID / GUID为一串32位字符组成的128位数据,可以做到全球唯一。 产生UUID / GU...

C++的GUID的生成代码

const char* newGUID(){ static char buf[64] = {0}; GUID guid; if (S_OK == ::CoCreateGuid(&guid)) {  _...
  • lhsxsh
  • lhsxsh
  • 2008年09月22日 09:19
  • 648

guid的获取(系统下唯一标识符)

我们经常会遇到需要一些特殊的值来指定一些特殊的变量,而且这个值要绝对的唯一。在windows下被称作GUID,其实GUID是微软对Distributed coumputing environment ...

java生成UUID通用唯一识别码 (Universally Unique Identifier)

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uuid/guid 通用唯一识别码 (Universally Unique Identifier)
举报原因:
原因补充:

(最多只允许输入30个字)