2011-05-18 103 views
7

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

我产生的“GUID”与“真正的”GUID相比是否会有或多或少的碰撞可能性?

有关GUID以及它们如何与随机字符串进行比较的更多具体信息,敬请关注。

回答

1

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

可能性取决于两个发电机的性能如何(您的与GUID一个)。

4

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

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

你可以创建自己的GUID值,但为什么重新创建一些已经很好的东西?

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

1

我会建议使用实际的guid's。你的随机字符串生成器是独一无二的机会远小于guid。

3

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

根据编码的不同,char可以是一个或两个字节,所以32个字符可以是32个字节或64个字节。一个GUID是16个字节。如果你的发电机有相同数量的随机性,你的弦会产生较少的碰撞机会。这样说,16字节的冲突几率不太可能。

成败是你必须至少有一个像Guid发电机一样好的发电机,以使其值得。当你这样做时,就申请专利。

+2

+1仅供专利意见。 ;-) – 2012-10-04 10:50:50

0

Social MSDN几乎没有提供任何信息,但没有回答你的问题是否碰撞更可能。 Guid Structure告诉一个GUID不是一个字符串,而是“一个GUID是一个128位整数(16字节),可以在需要唯一标识符的所有计算机和网络上使用,这样的标识符的可能性很低

2

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

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