Guid相關知識點

數據庫 算法 Mac電腦 達升笑講故事 2019-06-01

GUID有如下的形式:

{xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx} or

{xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx}

這個1和4表明了GUID的生成策略。

策略1使用了MAC地址和時間。

這種策略有2個缺點:

1)如果機器沒有網卡,那麼生成的GUID不保證是唯一的。

2)有可能生成一樣的GUID。(比如2個GUID生成器同時嘗試生成GUID,或者時間倒流)

使用1策略生成GUID有幾個特點:

1)生成的GUID不是隨機的,所以不能用來生成隨機數。

2)有可能在特定機器上生成的GUID是單調遞增的,這對於用這個GUID用來做數據庫的primary key,並且數據庫用primary key做index來說是個好消息。

3)可以通過GUID找到生成這個GUID的機器,有隱私問題。

4)他的子序列不具備全局唯一的特性。

策略4使用了隨機數:

1)第四段的第一個永遠是8,9,a或者b,這表明了版本信息,加上第三段的第一個4,一共有6個bit被reserve了,剩下的122個bit可以隨機生成。

2)122個bit的完全隨機數,概率上7萬年後可能有2個隨機數一樣,對於一個特定的數,3百億萬億年後有可能生成一個一樣的。

總結:

1)GUID保證唯一,但是不保證隨機,所以不要用GUID當作隨機數來使用。

2)隨機數算法生成的GUID不是密碼學強度的隨機數。

3)只有大家遵守GUID生成規則,GUID才是唯一的,GUID是一個生成規則,而不是一個安全機制。

4)GUID有內部的結構,至少有6個bit的保留字有特殊含義。

5)GUID允許順序生成。

6)完整的GUID才有唯一性,字串不具備唯一性。

7)GUID可以用多種算法生成出來。

8)用隨機方法生成的GUID在可以預見的將來有非常低的概率重複。

9)GUID可以洩漏生成的時間空間信息(比如機器),無論是策略1(直接獲得)還是策略4(通過密碼分析).

10)GUID在將來可能會用完全不同的算法來生成。

Guid.NewGuid().ToString().Replace("-","")

System.Guid.NewGuid().ToString()全球唯一標識符(GUID) 是一個字母數字標識符,用於指示產品的唯一性標識
public string ToString(
string format
)

參數

format

類型:System.String

一個單格式說明符,它指示如何格式化此 Guid 的值。 format 參數可以是“N”、“D”、“B”、“P”或“X”。 如果 format 為 null 或空字符串 (""),則使用“D”。

返回值

類型:System.String

此 Guid 的值,用一系列指定格式的小寫十六進制位表示。

下表顯示 format 參數接受的格式說明符。“0”表示數字;連字符(“-”)、大括號(“{”、“}”)和括號(“(”、“)”)的顯示如下所示。

說明符

返回值的格式

N

32 位:

00000000000000000000000000000000

D

由連字符分隔的 32 位數字:

00000000-0000-0000-0000-000000000000

B

括在大括號中、由連字符分隔的 32 位數字:

{00000000-0000-0000-0000-000000000000}

P

括在圓括號中、由連字符分隔的 32 位數字:

(00000000-0000-0000-0000-000000000000)

X

括在大括號的 4 個十六進制值,其中第 4 個值是 8 個十六進制值的子集(也括在大括號中):

{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

十六進制數字 a 到 f 是例在返回的字符串。 若要將它們轉換為大寫,請調用在返回的字符串的 String.ToUpper 方法。

Guid.NewGuid().ToString()的幾種格式

1、Guid.NewGuid().ToString("N") 結果為:

38bddf48f43c48588e0d78761eaa1ce6

2、Guid.NewGuid().ToString("D") 結果為:

57d99d89-caab-482a-a0e9-a0a803eed3ba

3、Guid.NewGuid().ToString("B") 結果為:

{09f140d5-af72-44ba-a763-c861304b46f8}

4、Guid.NewGuid().ToString("P") 結果為:

(778406c2-efff-4262-ab03-70a77d09c2b5)

UUID 和 GUID 的區別

UUID是一個由4個連字號(-)將32個字節長的字符串分隔後生成的字符串,總共36個字節長。比如:550e8400-e29b-41d4-a716-446655440000

http://gohands.blogbus.com/logs/147479174.html

GUID 是微軟對UUID這個標準的實現。UUID是由開放軟件基金會(OSF)定義的。UUID還有其它各種實現,不止GUID一種。比如我們這裡在Java中用到的。

http://baike.baidu.com/view/1052579.htm

相關推薦

推薦中...