GUID是由MSFT生成的128位唯一標識符。GUID的唯一性
我懷疑GUID是否全局唯一。我的意思是我生成的GUID,在任何系統中使用任何應用程序的其他人都無法生成?真的嗎?
我很驚訝微軟將如何知道或跟蹤這種獨特性。
而且生成的唯一GUID可以鏈接到任何實體?應用程序,變量,系統,?
所有實體可以將GUOD鏈接到什麼地方?任何人都可以善意澄清GUID的概念?它是編程語言獨立的嗎?
GUID是由MSFT生成的128位唯一標識符。GUID的唯一性
我懷疑GUID是否全局唯一。我的意思是我生成的GUID,在任何系統中使用任何應用程序的其他人都無法生成?真的嗎?
我很驚訝微軟將如何知道或跟蹤這種獨特性。
而且生成的唯一GUID可以鏈接到任何實體?應用程序,變量,系統,?
所有實體可以將GUOD鏈接到什麼地方?任何人都可以善意澄清GUID的概念?它是編程語言獨立的嗎?
它基本上是一種各種信息位的哈希值,其總體組合很可能是獨特的或極其罕見的。與任何散列一樣,碰撞是可能的,它們實際發生的可能性非常低,可以忽略不計。
散列函數利用各種保證或期望是唯一的信息(例如,它可以使用MAC地址),或另一個選項將隨機生成數字(128位,隨機產生的機會一模一樣的號碼是......嗯,你可以計算一下,相當低的:-))
這兩篇文章可能是你的興趣,並會幫助你理解這些ID背後的概念。
的UUID的目的是使分佈式系統唯一地識別 信息而不顯著中央協調。 [...] 獨一無二的詞應該被認爲是「實際上唯一的」而不是「保證的獨特」而不是 。 [012] 是可能的兩個不同的項目共享相同的標識符。
標識符大小和生成過程中需要進行選擇,以便使 這在實踐中足夠不可能的。
任何人都可以創建一個 UUID並用它來識別與 相同標識符將永遠不會被無意中被任何人創建的 識別別的合理的信心的東西。標記的UUID信息可因此 後組合到單個數據庫中,而無需解決 標識符(ID)的衝突。
非常簡單:它基本上是創建一個標識符 (與特定的格式)的方法,其具有的是唯一的一個非常高的概率。
您可能需要閱讀給其中包括來自維基百科以下報價非常類似的問題Is a GUID unique 100% of the time?答案:
雖然每個生成的GUID不能保證是唯一的,總 一些獨特的鍵(2^128或3.4×10^38)非常大,以致兩次產生相同數字的概率非常小。例如,考慮可觀測的宇宙,其中包含約5×10^22星的大約 ;每顆恆星可能會有6.8×10^15個通用唯一 GUID。通過LX
然後給出了答案
見鏈接,請在博客文章由雷蒙德陳GUIDs are globally unique, but substrings of GUIDs aren't瞭解更多詳情。
一個有趣的討論接踵而至SO質疑Simple proof that GUID is not unique,值得一試了。
如果5 * 10^22星中的每一個都有隨機選擇的128位GUID,那麼至少有一次碰撞的概率大於0.5。所以這句話有點誤導人,因爲它將碰撞概率很小的一個陳述和碰撞概率很大的例子並列在一起!但是,所有的明星都需要相當長的時間來比較GUID並發現碰撞,但是(至少在光速下有130億年)。 – 2012-04-26 09:36:23
@SteveJessop感謝偉大的使用案例。我已經看到了亞當戴維斯的回答,很好的想法,坐下來一段時間,並找出0.5是如何派生的。 – mloskot 2012-04-26 09:41:08
可以生成全局唯一標識符。例如,MAC地址(這是唯一的)+當前時間。當然,GUID生成器使用更復雜的算法。
我能想到一個簡單的反例,證明GUID的不是唯一的,即使在一個單一的系統,而不是在全球範圍內提:
for i = 0 : 2^128
generateGUID();
確實產生2^128
GUID的是不可行的,但是這表明,在一個封閉的區間內,唯一性在數學上是不可能的。
這絕對不太可能會遇到兩個相同的GUID。
他們沒有跟蹤他們,碰撞的可能性非常低。它值得使用谷歌搜索。 – 2012-04-26 08:52:35
在提出問題之前進行搜索:http://stackoverflow.com/questions/1888254/how-does-c-sharp-generate-guids, http://stackoverflow.com/questions/39771/is-a-guid -unique-100-the-the-time, http://stackoverflow.com/questions/1705008/simple-proof-that-guid-is-not-unique – Slavo 2012-04-26 09:15:52