UUID specification定义了4个预定义的名称空间,它描述为“可能有趣” - 其中包括“如果其他人在此命名空间中生成了UUID,则可以验证它们”:
6ba7b810-9dad-11d1-80b4-00c04fd430c8
用于DNS 6ba7b811-9dad-11d1-80b4-00c04fd430c8
的网址6ba7b812-9dad-11d1-80b4-00c04fd430c8
用于ISO OID 6ba7b814-9dad-11d1-80b4-00c04fd430c8
for X.500 DN 这些来自哪里?
具体而言;
答案 0 :(得分:42)
首先,要明确的是,整个讨论仅限于版本3& 5个UUID。在我的(轶事)经验中,最常用的是版本4(随机)UUID。
4122的命名空间UUID生成算法含糊不清地开始:
分配UUID以用作“名称空间ID”
没有其他提及“名称空间ID”的分配,我和python都没有找到超出RFC 4122中列出的四个标准空间。
第一个问题的答案,
- 如果我正在生成自己的命名空间UUID,我是否需要特别避免任何事情?
您只需要避免使用四个标准命名空间。
下一个问题,
- 我知道UUID空间有多大,但这对碰撞有什么影响吗?
有两部分:
命名空间中的UUID会发生冲突吗?从4122开始逐字逐句:
在[your]命名空间中由两个不同名称生成的UUID应该是不同的(具有非常高的概率)。
您的命名空间UUID是否会与其他命名空间冲突?我无法找到直接答案,因为“名称空间ID”分配没有标准,但section 4.1.1中的参数似乎相关:
互操作性,以任何形式,与其他变体不同 这里定义的不保证,并且不太可能成为问题 实践。
- 为什么他们选择第4个八位字节作为UUID'版本号'来增加?
这个有点神秘。幸运的是,我们有一个UUID规范,所以我们可以挖掘它们以获得一些见解。
请注意,(0-index)第8个八位位组在所有情况下均以8
开头,因此我们正在处理 RFC 4122变体 UUID。呼。
现在查看八位字节6的版本:1
,我们正在处理版本1基于时间的 UUID。
这个answer有一个方便的算法,用于从版本1 UUID中提取python日期时间。应用该算法会产生 1998年2月4日的时间。我还没有在这个日期找到意义。增加第3个八位字节会将最小的可编码时间间隔(100ns)添加到日期。
- 我的问题是否意味着我遗漏了一些关于UUID的基本信息?
不。关于UUID命名空间的讨论很少,因为随机UUID非常简单。
答案 1 :(得分:2)