GUID的唯一性

时间:2012-04-26 08:50:26

标签: c++ windows coding-style registry guid

GUID是MSFT生成的128位唯一标识符。

我怀疑GUID是否是全球唯一的。我的意思是我生成的GUID,在任何系统中使用任何应用程序的人都没有其他人可以生成?真的吗?

我很惊讶微软如何知道或追踪这种独特性。

此外,生成的唯一GUID可以链接到任何实体吗?应用,变量,系统,?

GUOD所有实体可以链接到什么?任何人都可以澄清GUID的概念吗?编程语言是独立的吗?

5 个答案:

答案 0 :(得分:5)

这两篇文章可能对您有用,应该可以帮助您理解这些ID背后的概念。


  

UUID的目的是使分布式系统具有唯一性   识别信息而无需重要的中央协调[...]   “独特”这个词应该被理解为“实际上是独一无二的”   比“保证独特”。 [...]它   两个不同的项目可以共享相同的标识符。

     

需要选择标识符大小和生成过程   在实践中使这个充分不可能。

     

任何人都可以创建   UUID并用它来确定具有合理信心的东西   任何人都不会无意中创建相同的标识符   找出别的东西。因此,标有UUID的信息可以   稍后组合成一个数据库而无需解决   标识符(ID)冲突。

非常简单:它基本上是一种创建标识符的方法 (具有特定格式)具有非常高的独特概率。

答案 1 :(得分:1)

它基本上是各种信息位的哈希值,其总组合很可能是唯一的或非常罕见的。与任何哈希一样,冲突是可能的,它们实际发生的可能性非常低,可以忽略不计。

哈希函数利用保证或预期唯一的各种信息(例如,它可以使用MAC地址),或者其他选项将随机生成数字(128位,可能随机生成相同的数字......嗯,你可以计算,相当低: - ))

答案 2 :(得分:0)

您可能希望阅读非常相似的问题Is a GUID unique 100% of the time?的答案,其中包含维基百科的以下引用:

  

虽然不保证每个生成的GUID都是唯一的,但总数   唯一键的数量(2 ^ 128或3.4×10 ^ 38)是如此之大   两次生成相同数字的概率非常小。   例如,考虑包含about的可观察Universe   5×10 ^ 22颗星;那么每颗星都可以拥有6.8×10 ^ 15的独特性   的GUID。

请参阅 lx

给出的答案中的链接

然后,请关注Raymond Chen GUIDs are globally unique, but substrings of GUIDs aren't的博文,了解更多详情。

一个有趣的讨论跟随另一个SO问题Simple proof that GUID is not unique,值得检查。

答案 3 :(得分:0)

可以生成全局唯一标识符。例如,MAC地址(唯一)+当前时间。当然,GUID生成器使用更复杂的算法。

答案 4 :(得分:0)

我可以想到一个简单的反例,证明即使在一个系统上GUID也不是唯一的,更不用说全球了:

for i = 0 : 2^128
   generateGUID();

确实生成2^128 GUID是不可行的,但这表明在闭区间内数学上不可能存在唯一性。

但是你很可能不会遇到两个相同的GUID。