2010-05-04 86 views
2

GUID是由數字和字符組合生成的連字符。是否可以設計我們自己的算法來創建唯一的GUID?

如){7B156C47-05BC-4eb9-900E-89966AD1430D}

在Visual Studio中,我們有 '創建GUID' 工具來創建它。我希望可以通過窗口API以編程方式創建。

GUID如何變得獨特?爲什麼他們不使用#,^等任何特殊字符...

也有可能設計我們自己的算法來創建唯一的GUID?

+0

你有沒有考慮HASH功能? – Guru 2010-05-04 12:18:54

+0

你能告訴我,我該如何使用它? – AKN 2010-05-04 12:26:28

回答

3

是的,這是可能的,但是如果沒有充分的理由,你不應該嘗試重新發明輪子。

  • 當前時間戳
  • 系統的
  • MAC地址的更新:的GUID是由包括元件,其(統計上)是非常不太可能在兩個不同的情況下是相同的,例如由唯一該系統
  • 隨機數
  • ...

另外,還要考慮的GUID的隱私問題,如果你實現它˚F從零開始,因爲它們包含了一些人們認爲敏感的上述數據。

1

只是爲了回答這個問題:爲什麼他們不使用任何特殊字符,如#,^等。

它應該是一個128位整數。所以常見的表示是簡單的32個十六進制。

您可以創建也使用1的長度爲128位和0等

至於問題的其餘部分,wiki具有很好的答案。

1

您應該通過調用爲其設計的API來創建新的GUID。在本地窗口的土地上,它是 CoCreateGUID;在.NET土地它是System.Guid.NewGuid();

+0

使用上述API創建的GUID是否有可能是唯一的? – AKN 2010-05-04 12:15:56

+1

是的。我從未見過該API生成的兩個相同的GUID。如果你想問相反的話,那麼可以從API獲得兩個完全相同的GUID。證明:生成2^128 + 1個GUID;你一定會得到一些重複! – 2010-05-04 12:54:15

3

UUID被定義爲例如在http://www.faqs.org/rfcs/rfc4122.html。使用自己的算法生成類似UUID的問題是,您可能會與其他人的UUID發生衝突。因此,如果可能的話,你應該肯定使用別人的實現,如果不是,則編寫你自己的一個標準算法的實現。

+0

我喜歡這個答案。但是你能列出一些用於UUID的'標準算法'嗎? – AKN 2010-05-13 04:48:44

+0

標準算法在上面引用的RFC中定義。例如。「從名稱和名稱空間生成UUID的算法如下:」選擇一個任意的(並且略有不同尋常的)例子。 – mcdowella 2010-05-15 04:54:11

相關問題