C#產生隨機數的三種方法

來源:互聯網
上載者:User

標籤:style   blog   ar   color   os   使用   sp   for   on   

隨機數的定義為:產生的所有數字毫無關係.

在實際應用中很多地方會用到隨機數,比如需要產生唯一的訂單號.

在C#中擷取隨機數有三種方法:

一.Random 類

Random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.

Random rd = new Random();int i = rd.Next();

這種隨機數可以達到一些要求較低的目標,但是如果在高並發的情況下,Random類所取到的系統時鐘種子接近甚至完全一樣,就很有可能出現重複,這裡用迴圈來舉例

for (int i = 0; i < 10; i++){    Random rd = new Random();  //無參即為使用系統時鐘為種子    Console.WriteLine(rd.Next().ToString());}

這個例子會輸出10個相同的"隨機數".

突顯出的問題:因為Random進行偽隨機數的演算法是固定的,所以根據同一個種子計算出的數字必然是一樣的.而以當代電腦的運行速度,該迴圈幾乎是在瞬間完成的,種子一致,所以會出現10次迴圈輸出同一隨機數的情況.

 

二.Guid 類

System.Guid

GUID (Globally Unique Identifier) 全球唯一識別碼

GUID的計算使用到了很多在本機可取到的數字,如硬體的ID碼,目前時間等.所計算出的128位整數(16位元組)可以接近唯一的輸出.

Console.WriteLine(Guid.NewGuid().ToString());

計算結果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx結構的16進位數字.當然這個格式也是可以更改的.

 

三.RNGCryptoServiceProvider 類

System.Security.Cryptography.RNGCryptoServiceProvider

RNGCryptoServiceProvider 使用密碼編譯服務提供者 (CSP) 提供的實現來實現加密隨機數產生器 (RNG)

RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();byte[] byteCsp = new byte[10];csp.GetBytes(byteCsp);Console.WriteLine(BitConverter.ToString(byteCsp));

因該類使用更嚴密的演算法.所以即使如下放在迴圈中,所計算出的隨機數也是不同的.

for (int i = 0; i < 10; i++){    RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();    byte[] byteCsp = new byte[10];    csp.GetBytes(byteCsp);    Console.WriteLine(BitConverter.ToString(byteCsp));}
但是RNGCryptoServiceProvider的計算較為繁瑣,在迴圈中使用會消耗造成大量的系統資源開銷,使用時需注意.

 

Membership.GeneratePassword()

Membership是一個方便快捷的進行角色許可權管理的類,偶然發現一個很有意思的方法,沒研究過是如何?的

public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);//// 摘要://     產生指定長度的隨機密碼。//// 參數://   numberOfNonAlphanumericCharacters://     產生的密碼中的標點字元數。////   length://     產生的密碼的字元數。長度必須介於 1 和 128 個字元之間。//// 返回結果://     指定長度的隨機密碼。

例:

for (int i = 0; i < 10; i++){    Response.Write(Membership.GeneratePassword(20, 1) + "<br>");}

 

結果為

C!&^HoTNv3!ZHkK9BAbu

azLgER)JJ-UW8q*14yz*

I3qnb]Zxu16ht!kKZ!Q*

9U:MAQ&c1x)^[email protected]**

oL(%4JvfbP&t5*Hpl4l-

[email protected]$CnhW&D+|xOf:qIk

A/!Di&l*tY$QaMH0gyzY

z^wu6{1BMq7D^+WU]>f$

1OgIJS3&09fw0F9.|aXA

8F+Gy+L{O6x{SfugME*%

 

不知是否正好符合你的要求?

 

C#產生隨機數的三種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.