1. 程式人生 > >C#利用Guid實現真隨機數

C#利用Guid實現真隨機數

循環 有效 不為 唯一標識 生成 算法 bsp 目錄 系統目錄

C#中的隨機數可以利用Random類很簡單地生成隨機數,代碼如下:

Random rdmNum=new Random();//生成隨機數對象
int ans=rdmNum.Next(a,b);//生成大於大於a小於b的隨機數(int)型

但是在不指定種子時,默認的種子是系統時間。這樣的設置對於一般的隨機數生成過程是沒有問題的,但是對於一些快速、大量生成隨機數的問題(尤其創建與利用循環批量生成隨機數時),會出現由於運算速度太快導致在一個相同或者相近的系統時間內生成多個隨機數的情況,此時生成的這些隨機數都是相同的,顯然是不符合現實情況要求的。

這種問題可以借助GUID(全局唯一標識符)來解決:

全局唯一標識符(GUID,Globally Unique Identifier)是一種由算法生成的二進制長度為128位的數字標識符。GUID主要用於在擁有多個節點、多臺計算機的網絡或系統中。在理想情況下,任何計算機和計算機集群都不會生成兩個相同的GUID。GUID 的總數達到了2^128(3.4×10^38)個,所以隨機生成兩個相同GUID的可能性非常小,但並不為0。GUID一詞有時也專指微軟對UUID標準的實現。 在理想情況下,任何計算機和計算機集群都不會生成兩個相同的GUID。隨機生成兩個相同GUID的可能性是非常小的,但並不為0。所以,用於生成GUID的算法通常都加入了非隨機的參數(如時間),以保證這種重復的情況不會發生。 在 Windows 平臺上,GUID 廣泛應用於微軟的產品中,用於標識如註冊表項、類及接口標識、數據庫、系統目錄等對象。 格式 GUID 的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個 x 是 0-9 或 a-f 範圍內的一個4位十六進制數。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即為有效的 GUID 值。

GUID特點

★需要GUID的時候,可以完全由算法自動生成,不需要一個權威機構來管理。 ★GUID理論上能產生全球唯一的值,對於以後的數據導入很方便。 利用GUID生成隨機數的代碼:
 byte[] buffer = Guid.NewGuid().ToByteArray();//生成字節數組
  int iRoot = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字節數組轉換為整數
  Random rdmNum = new Random(iRoot);//以這個生成的整數為種子

這樣,生成的隨機數就是完全隨機、不重復的了

C#利用Guid實現真隨機數