Guid vs 随机字符串

11

如果我随机生成一个32个字符长的字符串,我能将其用作GUID吗?

我生成的“GUID”与“真实”的GUID相比,在碰撞的可能性上会更高还是更低?

请提供有关GUID的更具体信息以及它们与随机字符串的比较。

6个回答

6

GUID生成算法会考虑日期和时间,同时生成随机数来创建最终的128位值。

如果你只是简单地生成随机字符串而没有其他算法的话,那么碰撞的风险会更大。(计算机无法创建真正的随机数,因此必须将其他数据折叠到GUID生成算法中,以降低碰撞的风险。例如,GUID v1使用计算机的MAC地址,但这种方法已经被弃用,因为它会识别出生成计算机。)

你可以创建自己的GUID值,但为什么要重新发明一个已经很好运作的东西呢?

此外,请看Eric Lippert的回答,了解为什么使用GUID优于使用自己编写的随机ID生成器。


6
一个GUID不是一个32个字符长的字符串。因此,不能用它来替代GUID。
根据编码方式,一个char可以是一或两个字节,所以32个字符可以是32个字节或64个字节。GUID是16个字节。如果您的生成器具有相同数量的随机性,那么您的字符串将产生更少的碰撞几率。尽管如此,在16个字节中发生碰撞的概率非常小。
关键在于你必须要有至少与GUID生成器一样好的生成器才能使其值得。当你做到这一点时,请进行专利申请。

3
根据你比较的GUID不同而异:如今大多数GUID都是“版本4”,实际上只是一个带有一些浪费位的大随机数。因此,只要你的随机数生成器和用于生成GUID的那个一样好,你的解决方案就更加独特。
如果它是版本1的GUID,则可能比随机数更独特(假设它被用作预期:系统时钟没有经常重置,系统具有网络卡,并且MAC地址没有被篡改),但大多数人不再使用版本1,因为它会泄漏你的MAC地址。

1

这取决于您将使用的算法。如果您有一个好的生成器,结果将是相同的。

可能性取决于两个生成器的好坏(您的与GUID生成器)。


1
我建议使用实际的GUID。你随机字符串生成器产生唯一性的概率远小于GUID的概率。

0

Social MSDN提供了一些信息,但并没有回答你是否更有可能发生碰撞的问题。 Guid Structure告诉我们GUID不是一个字符串,而是“GUID是一个128位整数(16字节),可以在所有计算机和网络上使用,无论何时需要唯一标识符。这样的标识符重复的概率非常低。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接