全球唯一标识GUID

一.GUID概念

GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。

在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。

二.GUID格式

GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。(8-4-4-4-12)例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

三.GUID特点

1.GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。  
    2.世界上的任何两台计算机都不会生成重复的 GUID 值。 
    3.需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。  
    4.GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。

四.GUID优缺点

1.优点

同 IDENTITY 列相比,uniqueidentifier 列可以通过 NewID() 函数提前得知新增加的行 ID,为应用程序的后续处理提供了很大方便。

便于数据库移植,其它数据库中并不一定具有 IDENTITY 列,而 Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的 GUID 值存入数据库,它不会对原有数据带来影响。

便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而 uniqueidentifier 列则无需任何处理,直接用 T-SQL 加载即可。

便于对某些对象或常量进行永久标识,如类的 ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。
2) 缺点

GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的,所以使用时要注意场合,最好不要尝试用它来作为你的电子邮件地址 J

GUID 的值有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着如果在数据库中使用 uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

五.GUID争议

由于GUID值产生的潜在弊端已经引起了保密性提倡者的关注。1999年3月,美国联邦商务委员会接到要求,对微软的GUID值使用进行调查。争议主要涉及Office 97和Office 2000文档对GUID值的使用。Office文档,如Word文件或Excel电子数据表,所使用的GUID值对用户是不可见的。但有很多报道宣称,文档的作者是可以通过GUID值的跟踪查到的,即使作者已经采用特殊方法,他们还是可以被追踪到。 为了回应上述问题,微软已经发布了一个Office 97修补版SR2,它禁止了GUID功能的使用,并且还可以将现存文档的GUID去除。  
      潜在的对Intel处理器序列号滥用的问题与上述GUID值的问题本质是一样的。

在 API 参数中,需要给出的往往不是类或者 DLL/EXE 文件的真是名称,而是使用他们的 GUID(全局统一ID)。GUID 是微软对 UUID(统一唯一标识)的解释,理论上在整个空间和时间维上是唯一的,因此使用 GUID 来代替真实名称,可以防止系统中有两个相同名称的对象而造成混淆。 
      一个 GUID 是一个128位长(16字节)的数,形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。其中前4字节为随机数;5-8字节为时间戳,记录了从1490年开始到该GUID的生成时间(低16位字在前,以分钟为单位),从而保证了时间上的唯一;9-10字节与机器重启次数有关;最后6字节一般为该机器的网卡地址(如果这台机器没有网卡,则使用另一常数),从而保证了空间上的唯一。 
      在系统中,GUID 保存在注册表(运行→regedit)的 HKEY_CLASSES_ROOT 项下。HKEY_CLASSES_ROOT 其实是 HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\ 的快捷键,里面有很多长长的字串命名的子项,这些字串就是 GUID。在 HKEY_CLASSES_ROOT 下的 GUID 又分为4部分:

1.程序ID

如 Access.Application 等,其中 Access 表示类所在 DLL/EXE 文件名,Application 是类的名称。虽然程序ID较类ID易用,但因为它并不一定是唯一的,因此可能造成混乱。在 VB 和 VJ++ 中程序员只能使用程序ID,不过这两种语言允许程序ID长达39个字符,因此完全可以取一个与 GUID 完全相同的程序ID,从而保证程序ID也是唯一的。

2.CLSID

在这个子键下列出了在机器上注册过的所有类ID。在每个GUID键下。可以找到所有关于这个类ID的信息。如果该类ID对应一个DLL,则DLL文件名在 InprocServer32 子键下;如果是本地的一个EXE程序,则文件名在 LocalServer32 子键下;如果是远程EXE,则有一个 AppID 子键指向 AppID 键的入口。

3. AppID

在这个子键下列出了每个远程 DLL/EXE 的启动参数,包括对象位置、文件名等。

4.Interface

在这个子键下列出了本地系统中所有注册过的类的 GUID。在其中每个 GUID 键下,都保存着代理的类ID,当其他应用程序要与它通信时就使用这个ID传入传出参数

小结:

GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的API。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生成的结果串会比较大。” 
 
1. 一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数。 
 
2. GUID 的 格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的 数字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8 即为有效的 GUID 值。 
 
3. 世界上任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。 
 
4. 在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

时间: 2024-10-12 23:41:53

全球唯一标识GUID的相关文章

GUID全球唯一标识

全球唯一标识GUID GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字.例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值. 世界上的任何两台

开发路程(3):关于全球唯一标识符GUID

在C#中的语法: Console.WriteLine(System.Guid.NewGuid()); Console.ReadKey(); System.Guid.NewGuid().ToString()全球唯一标识符,是一个字母数字标识符,用于指示产品的唯一性安装.在很多流行软件应用程序,例如浏览器媒体播放器,都使用GUID. GUID的格式: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(32个x).都是由0~9或a~f范围内的一个十六进制的数字. 世界上的任何两

全球唯一标识符:GUID在线生成

全球唯一标识符:GUID在线生成 原文地址:https://www.cnblogs.com/LittleTiger/p/8297996.html

全球唯一标识(转载)

GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字.例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值. 世界上的任何两台计算机都不会生成重复的

GUID全球唯一ID

全球唯一ID,不是自增的,比自动增值的ID好,任何时候都不会重复,与它的机制有关,如网卡芯片.时区.时间等等 对于大型的数据应用,建议使用GUID,数据合并就不存在重复的问题. 而对单据开的主从表或一些关联表,也建议采用GUID.比如采用自动增值的ID,你在主表中插入记录后还要获取这个新的ID用于从表中,而GUID你可以直接生成,应用于主表和从表,还不用考虑重复和冲突的问题 ----------------------------------------------SQL Server里可以用N

[PHP学习教程]005.全局唯一ID(GUID)

GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID 是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性. GUID 主要用于在拥有多个节点.多台计算机的网络或系统中,分配必须具有唯一性的标识符. 在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项.类及接口标识.数据库.系统目录等对象. 接口格式: GUID 的

C#中唯一标识符GUID的一些知识点

概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性.GUID 主要用于在拥有多个节点.多台计算机的网络或系统中,分配必须具有唯一性的标识符. 在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项.类及接口标识.数据库.系统目录等对象. 格式 GUID 的格式

[转]iOS设备唯一标识探讨

转自:http://www.jianshu.com/p/b83b0240bd0e iOS设备唯一标识探讨 为了统计和检测应用的使用数据,几乎每家公司都有获取唯一标识的业务需求,在iOS5以前获取唯一标识,可以获取到系统提供的方法UDID(Unique Device Identifier),后来被出于用户隐私的考虑被Apple官方禁止掉了.于是,大家开始在iOS6中使用 MAC 地址(Medium/Media Access Control) ,后来又被Apple官方在iOS7中禁止掉了.苹果及其国

ios设备唯一标识获取策略

英文原文:In iOS 7 and later, if you ask for the MAC address of an iOS device, the system returns the value 02:00:00:00:00:00. If you need to identify the device, use the identifierForVendor property of UIDevice instead. (Apps that need an identifier for