微软甚至claims GUID由UUID RFC指定:"In Microsoft Windows programming and in Windows operating systems, a globally unique identifier (GUID), as specified in [RFC4122], is ... The term universally unique identifier (UUID) is sometimes used in Windows protocol specifications as a synonym for GUID."
根据RFC 4122,所有UUID变体都是"real UUIDs",然后所有GUID都是真正的UUID . 对于字面问题"is there any difference between GUID and UUID",RFC 4122 UUIDs的答案肯定是否定的: no difference (但在下面的第二部分中) .
但并非所有GUID都是变体2 UUID(例如,Microsoft COM具有变体3 UUID的GUID) . 如果问题是"is there any difference between GUID and variant 2 UUIDs",那么答案是肯定的 - 它们可以是不同的 . 有人问这个问题可能不知道变种,他们可能只考虑变量2 UUID,当他们说单词"UUID"时(例如他们模糊地知道UUID的MAC地址时间和随机数算法形式,这两个版本都是变种2) . 在这种情况下,答案是 yes different .
如果您认为这令人困惑,请阅读ITU-T X.667 ISO/IEC 9834-8:2004,它应该与RFC 4122完全技术兼容 . 它在第11.2条中有一个额外的句子,即"All UUIDs conforming to this Recommendation | International Standard shall have variant bits with bit 7 of octet 7 set to 1 and bit 6 of octet 7 set to 0" . 这意味着只有变体2 UUID符合该标准(这两个位值表示变体2) . 如果确实如此,那么并非所有GUID都符合ITU-T / ISO / IEC UUID,因为符合ITU-T / ISO / IEC UUID的只能是变量2的值 .
因此,真正的答案还取决于问题所针对的UUID规范 . 假设我们清楚地谈论所有UUID而不仅仅是变体2 UUID:GUID和IETF的UUID之间有 no difference ,但GUID和符合ITU-T / ISO / IEC的UUID之间的 yes difference !
GUID在其不一定是与UUID相同的128位值的区域中长期使用 . 例如,RSS specification defines GUIDs是您选择的任何字符串,只要它使用's unique, with an 645146 attribute to specify that the value you'只是一个永久链接回到正在联合的项目 .
7 回答
GUID是Microsoft对UUID标准的实现 .
按Wikipedia:
来自同一维基百科文章的更新引用:
simple answer 是: no difference ,它们是一回事 . 将它们视为16字节(128位)值,用作唯一值 . 在Microsoft中,它们被称为GUID,但在不使用Microsoft时称其为UUID .
甚至UUID规范的作者和微软都声称他们是同义词:
从IETF的介绍RFC 4122“通用唯一标识符(UUID)URN命名空间": " UUID的统一资源名称命名空间(通用唯一标识符),也称为GUID(全局唯一标识符) . ”
来自ITU-T Recommendation X.667, ISO/IEC 9834-8:2004 International Standard:"UUIDs are also known as Globally Unique Identifiers (GUIDs), but this term is not used in this Recommendation."
微软甚至claims GUID由UUID RFC指定:"In Microsoft Windows programming and in Windows operating systems, a globally unique identifier (GUID), as specified in [RFC4122], is ... The term universally unique identifier (UUID) is sometimes used in Windows protocol specifications as a synonym for GUID."
但 correct answer 取决于问题的含义"UUID" ...
第一部分取决于提问者在说“UUID”时的想法 .
微软的声明暗示所有UUID都是GUID . 但是所有GUID都是真正的UUID吗?也就是说,所有UUID的集合只是所有GUID集的适当子集,还是完全相同的集合?
查看RFC 4122的详细信息,有四种不同的"variants" UUID . 这主要是因为在创建UUID规范之前将这些规范集合在一起之前使用了这样的16字节标识符 . 从RFC 4122的4.1.1节开始,UUID的四个变体是:
保留,网络计算系统向后兼容
RFC 4122中指定的变体(其中有五个子变体,称为"versions")
保留,Microsoft Corporation向后兼容
保留供将来定义 .
根据RFC 4122,所有UUID变体都是"real UUIDs",然后所有GUID都是真正的UUID . 对于字面问题"is there any difference between GUID and UUID",RFC 4122 UUIDs的答案肯定是否定的: no difference (但在下面的第二部分中) .
但并非所有GUID都是变体2 UUID(例如,Microsoft COM具有变体3 UUID的GUID) . 如果问题是"is there any difference between GUID and variant 2 UUIDs",那么答案是肯定的 - 它们可以是不同的 . 有人问这个问题可能不知道变种,他们可能只考虑变量2 UUID,当他们说单词"UUID"时(例如他们模糊地知道UUID的MAC地址时间和随机数算法形式,这两个版本都是变种2) . 在这种情况下,答案是 yes different .
所以答案在某种程度上取决于当他们说“UUID”这个词时,他们的想法是什么 . 它们是指变体2 UUID(因为这是他们所知道的唯一变体)还是所有UUID?
第二部分取决于使用哪个规范作为UUID的定义 .
如果您认为这令人困惑,请阅读ITU-T X.667 ISO/IEC 9834-8:2004,它应该与RFC 4122完全技术兼容 . 它在第11.2条中有一个额外的句子,即"All UUIDs conforming to this Recommendation | International Standard shall have variant bits with bit 7 of octet 7 set to 1 and bit 6 of octet 7 set to 0" . 这意味着只有变体2 UUID符合该标准(这两个位值表示变体2) . 如果确实如此,那么并非所有GUID都符合ITU-T / ISO / IEC UUID,因为符合ITU-T / ISO / IEC UUID的只能是变量2的值 .
因此,真正的答案还取决于问题所针对的UUID规范 . 假设我们清楚地谈论所有UUID而不仅仅是变体2 UUID:GUID和IETF的UUID之间有 no difference ,但GUID和符合ITU-T / ISO / IEC的UUID之间的 yes difference !
Binary encodings could differ
当以二进制编码(而不是人类可读的文本格式)时,GUID may be stored在具有四个不同字段的结构中如下 . 此格式与UUID standard的区别仅在于前3个字段的字节顺序 .
并不是的 . GUID更加以微软为中心,而UUID的使用范围更广(例如,在urn:uuid:URN方案和CORBA中) .
GUID在其不一定是与UUID相同的128位值的区域中长期使用 . 例如,RSS specification defines GUIDs是您选择的任何字符串,只要它使用's unique, with an 645146 attribute to specify that the value you'只是一个永久链接回到正在联合的项目 .
我写了一个方法将Guid字节数组转换为Java中的UUID,希望它有所帮助:
我的实现是从Java的UUID字节顺序转换为GUID的
微软的
guid
可以是一个uuid的形式被两个花括号{}
包围...