2011-05-18 104 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地址。