2008-09-17 62 views
4

我想知道,創建一個GUID是什麼。我不是指用特定語言創建GUID的東西(SQL Server中的NewID(),C#中的Guid.NewGuid()),我的意思是當你調用這些方法/函數時,它們如何做GUID?GUID幕後製作

+0

您是否在尋找[Wikipedia](http://en.wikipedia.org/wiki/Globally_Unique_Identifier)? – Karg 2008-09-17 20:15:27

回答

2

GUID的詳細信息,包括用於生成它們的算法在wikipedia中描述。

3

此外,RFC 4122(在維基百科文章中引用)描述瞭如何構建GUID。

0

請注意,您在互聯網上閱讀的有關GUID創建內容的很多內容可能是錯誤的,或者至少針對您的特定平臺過時了。

我曾經單步穿過一堆Windows代碼來解決有關在WinXP上創建GUID的爭論。不幸的是,事實證明我錯了(即我失去了論點),但拉里奧斯特曼也是這樣,所以我覺得它稍微好一些。

1

總之,它並不複雜。 GUID(或UUID)版本4(當前)部分隨機數,普通和簡單(128位中的122個是隨機的,其餘用於存儲版本和修訂版)。訣竅是,這個數字的可能值是如此之多以至於最實際的目的是

+0

我會說這是一個部分隨機數字。它的一些部分根本不是隨機的。 – EBGreen 2008-09-17 20:45:56

0

有五種官方方式來生成GUID(當然還有更多非官方的方法)。

  • 版本1是一個基於時間的GUID,通常使用用於計算GUID的主要網卡的MAC地址。由於隱私問題,通常不會使用這種方法,但我相信2005年以後的Microsoft SQL Server會使用此修改版本(聲稱是版本14),以創建對數據庫中的id有用的順序GUID,以避免分割數據塊(NewSequentialId())。

  • 版本2是DCE安全版本。我從來沒有找到這種GUID,但我也沒有用POSIX做過很多工作,而且版本2的GUID和POSIX之間似乎有聯繫。

  • 版本3是一個「基於名稱」的版本,這意味着您可以接受一個文本並在給定名稱空間的情況下創建該文本的GUID表示。版本3使用MD5哈希算法。另見版本5.

  • 版本4基本上是一個隨機數類型的GUID。隨機數是sequrity級別,不只是你的平均隨機數發生器。這是當今世界通常使用的版本。根據微軟的文檔,C#Guid.NewGuid()使用這個版本。此外,用於在MS SQL Server(NewId())中生成唯一標識符的正常函數生成版本4 GUID。

  • 版本5與版本3一樣,但使用SHA-3散列算法代替。 extended guid C# project使用版本5算法。

對於GUID製作的一個實現,我會推薦查看擴展的GUID項目。正如很多人指出的那樣,RFC 4122詳細描述了所有五種算法的工作原理。但是,並不能保證所有的實現都是正確的。