guid和uuid有什么区别吗?

Is there any difference between a GUID and a UUID?

我看到了这两个首字母缩略词,我想知道guid和uuid之间是否有什么区别?


简单的答案是:没有区别,它们是一样的。将它们视为一个16字节(128位)的值,该值用作唯一值。在Microsoft Speak中,它们被称为guid,但在不使用Microsoft Speak时,它们被称为uuid。好的。

甚至UUID规范和Microsoft的作者都声称它们是同义词:好的。

  • 从IETF RFC 4122"通用唯一标识符(UUID)URN命名空间"的介绍中可以看出:"UUID(通用唯一标识符)的统一资源名称命名空间,也称为guid(全局唯一标识符)。"好的。

  • 根据ITU-T建议X.667,ISO/IEC 9834-8:2004国际标准:"UUID也称为全球唯一标识符(guid),但本建议中不使用此术语。"好的。

  • 微软甚至声称UUID RFC指定了一个guid:"在微软Windows编程和Windows操作系统中,如[rfc4122]中指定的全局唯一标识符(guid)是……在Windows协议规范中,术语"通用唯一标识符(UUID)"有时用作guid的同义词。"好的。

但是正确的答案取决于当问题说"uuid"是什么意思…好的。

第一部分取决于提问者在说"uuid"时的想法。好的。

微软的声明暗示所有UUID都是guid。但是所有的guid都是真正的uuid吗?也就是说,所有uuid的集合只是所有guid集合的一个子集,还是完全相同的集合?好的。

查看RFC4122的细节,UUID有四个不同的"变体"。这主要是因为这样的16字节标识符在创建UUID规范之前就已经被使用了。根据RFC 4122第4.1.1节,UUID的四个变体是:好的。

  • 保留,网络计算系统向后兼容
  • RFC 4122中指定的变体(其中有五个子变体,称为"版本")。
  • 保留,Microsoft Corporation向后兼容性
  • 为将来的定义保留。
  • 根据RFC4122,所有的uuid变体都是"真正的uuid",那么所有的guid都是真正的uuid。对于字面上的问题"guid和uuid之间是否有任何区别",对于rfc 4122 uuid,答案肯定是否定的:没有区别(但以下面的第二部分为准)。好的。

    但并非所有的guid都是变体2 uuid(例如,Microsoft com有变体3 uuid的guid)。如果问题是"guid和变量2 uuid之间有什么区别",那么答案是肯定的——它们可以是不同的。问这个问题的人可能不知道变种,他们可能只是在说"uuid"这个词时才想到变种2 uuid(例如,他们模糊地知道mac地址+时间和uuid的随机数算法形式,这两种形式都是变种2的版本)。在这种情况下,答案是肯定的不同。好的。

    因此,答案在某种程度上取决于被问者在说"UUID"这个词时的想法。它们是指变体2 UUID(因为这是它们唯一知道的变体)还是所有UUID?好的。

    第二部分取决于将哪个规范用作UUID的定义。好的。

    如果您认为这令人困惑,请阅读ITU-T X.667 ISO/IEC 9834-8:2004,该标准应与RFC 4122保持一致并在技术上完全兼容。在第11.2条中有一句额外的话:"符合本建议的所有UUID国际标准应具有八位字节7的位7设置为1,八位字节7的位6设置为0的变量位。"这意味着只有变量2 UUID符合该标准(这两个位值意味着变量2)。如果这是真的,那么不是所有的guid都符合itu-t/iso/iec uuids,因为符合itu-t/iso/iec uuids只能是变量2的值。好的。

    因此,真正的答案还取决于问题所询问的uuid的规范。假设我们清楚地讨论了所有UUID,而不仅仅是变体2 UUID:guid和ietf的UUID之间没有区别,但是guid和符合的itu-t/iso/iec的UUID之间是有区别的!好的。

    二进制编码可能不同好的。

    当以二进制(而不是人类可读的文本格式)编码时,guid可以存储在具有以下四个不同字段的结构中。此格式与UUID标准的区别仅在于前3个字段的字节顺序。好的。

    1
    2
    3
    4
    5
    6
    7
    Bits  Bytes Name   Endianness  Endianness
                       (GUID)      RFC 4122

    32    4     Data1  Native      Big
    16    2     Data2  Native      Big
    16    2     Data3  Native      Big
    64    8     Data4  Big         Big

    好啊。


    guid是微软对uuid标准的实现。

    维基百科:

    The term GUID usually refers to Microsoft's implementation of the Universally Unique Identifier (UUID) standard.

    来自维基百科文章的最新引用:

    RFC 4122 itself states that UUIDs"are also known as GUIDs". All this suggests that"GUID", while originally referring to a variant of UUID used by Microsoft, has become simply an alternative name for UUID…


    不是真的。guid更以Microsoft为中心,而uuid的使用更广泛(例如,在urn:uuid:urn方案和corba中)。


    guid在不一定是128位值的地区有着长期的使用,其使用方式与uuid相同。例如,RSS规范将guid定义为您选择的任何字符串,只要它是唯一的,并具有"is permalink"属性,以指定您使用的值只是指向要联合的项目的permalink。


    微软的guid可以是一个uuid,由两个大括号{}包围…