如果我随机生成一个32个字符的字符串 - 我可以将此字符串用作所有意图和目的的GUID吗?
我生成的“GUID”是否会比“真正的”GUID具有更多或更少的碰撞可能性?
有关GUID的更多具体信息以及它们与随机字符串的比较表示赞赏。
答案 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字节),可以在需要唯一标识符的所有计算机和网络中使用。这样的标识符有一个被复制的可能性非常低。“