簡而言之:對於GUID根據公佈的標準和規範它根本無法發生產生。一個GUID有一個結構,一些領域實際上有一個含義。更重要的是,.NET生成版本4的GUID,它絕對不會發生。它們的定義方式不會有這樣的GUID。詳情請參閱下文;-)
有5到7位是這裏的主要陷阱。這些是版本標識符(第三部分的前四位)和變體字段,指定了這是什麼變體的GUID。
當前版本可以是1到5之間的任何值。因此,唯一有效的十六進制數字的,我們可以得到在這一點這樣的GUID是 - 很明顯 - 1至5
讓我們來剖析versions一點:
- MAC地址和時間戳。兩者都可能很難哄進全部1位數字。
- MAC地址和時間戳以及用戶標識。與v1相同。
- MD5散列。 可能甚至可能工作。
- PRNG。永遠不能工作,因爲第四部分的第一個數字是總是無論是
8
,9
,A
或B
。這與版本號的4
矛盾。
- SHA-1散列。 可能甚至可能工作。
到目前爲止,我們排除了第4版是不可能的,因爲其他人不大可能。讓我們看看變體字段。
的variant field指定向後兼容性某些位模式(x
是不在乎),即:
0 x x Reserved. NCS backward compatibility.
1 0 x The only pattern that currently can appear
1 1 0 Reserved, Microsoft Corporation backward compatibility
1 1 1 Reserved for future definition.
由於該圖案是在所述第四部分的一開始,這意味着最重要的位始終設置爲第四部分的第一個十六進制數字。這意味着這個非常數字永遠不可能是1
,2
,3
或5
。當然,不包括已經生成的GUID。但那些MSB設置爲0
的人恰好是v1或v2。這些時間戳的一部分意味着他們將來必須產生一些千禧年才能解決問題。
不太可能:d – 2010-01-28 15:25:44
儘管它的瘋狂不太可能的,肯定有一個更好的設計不僅僅是使用的GUID的幻數? – 2010-01-28 15:27:04
在工作中,一個人得到了一次重複的GUID;他絕不會在彩票中獲勝,因爲他已經度過了所有的幸運 – 2010-01-28 15:30:36