Guid vs随机字符串

时间:2011-05-18 12:38:22

标签: random char guid

如果我随机生成一个32个字符的字符串 - 我可以将此字符串用作所有意图和目的的GUID吗?

我生成的“GUID”是否会比“真正的”GUID具有更多或更少的碰撞可能性?

有关GUID的更多具体信息以及它们与随机字符串的比较表示赞赏。

6 个答案:

答案 0 :(得分:5)

GUID-generation algorithms考虑​​日期和时间以及生成随机数以创建最终的128位值。

如果您只是生成随机字符串而没有任何其他算法,那么是的,您将面临更大的冲突风险。 (计算机无法创建真正的随机数,因此其他数据必须折叠到GUID gen算法中以降低冲突风险。例如,GUID v1使用计算机的MAC地址,但该方法已被弃用,因为它识别了生成计算机。)

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

此外,请参阅Eric Lippert's answer,了解为什么使用GUID优于使用您自己的自制随机ID生成器。

答案 1 :(得分:3)

GUID不是32个字符的长字符串。所以不,你不能用它代替GUID。

根据编码,char可以是一个或两个字节,因此32个字符可以是32个字节或64个字节。 GUID是16个字节。如果您的生成器中具有等量的随机性,则您的字符串将产生较少的碰撞机会。可以这么说,16字节碰撞的可能性很小。

关键是你必须拥有至少与Guid发电机一样好的发电机才能让它变得有价值。当你这样做时,请申请专利。

答案 2 :(得分:2)

取决于你要比较它的GUID:现在大多数GUID都是“版本4”,这实际上只是一个带有一些浪费位的大随机数。因此,只要您的随机数生成器与用于生成GUID的生成器一样好,您的解决方案就更加独特。

如果它是版本1 GUID,那么它可能比随机数更独特(假设它按预期使用:系统时钟没有经常重置,系统有网卡,并且MAC地址没有被篡改了但是大多数人不再使用版本1了,因为它泄露了你的MAC地址。

答案 3 :(得分:1)

这取决于您将使用的算法。如果您有良好的发电机,结果将是相同的。

可能性取决于两台发电机的性能如何(你的发电机与GUID发电机一样)。

答案 4 :(得分:1)

我建议使用实际的guid。随机字符串生成器唯一的可能性远远小于guid。

答案 5 :(得分:0)

Social MSDN提供的信息很少,但不会回答您的问题是否更有可能发生碰撞。 Guid Structure告诉GUID不是字符串,但是“ GUID是128位整数(16字节),可以在需要唯一标识符的所有计算机和网络中使用。这样的标识符有一个被复制的可能性非常低。