国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中獲取、生成隨機數(shù)的三種方法

2020-01-24 01:38:59
字體:
供稿:網(wǎng)友

隨機數(shù)的定義為:產(chǎn)生的所有數(shù)字毫無關(guān)系.

在實際應(yīng)用中很多地方會用到隨機數(shù),比如需要生成唯一的訂單號.

在C#中獲取隨機數(shù)有三種方法:

一.Random 類

Random類默認的無參構(gòu)造函數(shù)可以根據(jù)當(dāng)前系統(tǒng)時鐘為種子,進行一系列算法得出要求范圍內(nèi)的偽隨機數(shù).

復(fù)制代碼 代碼如下:

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

這種隨機數(shù)可以達到一些要求較低的目標(biāo),但是如果在高并發(fā)的情況下,Random類所取到的系統(tǒng)時鐘種子接近甚至完全一樣,就很有可能出現(xiàn)重復(fù),這里用循環(huán)來舉例
復(fù)制代碼 代碼如下:

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

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

突顯出的問題:因為Random進行偽隨機數(shù)的算法是固定的,所以根據(jù)同一個種子計算出的數(shù)字必然是一樣的.而以當(dāng)代計算機的運行速度,該循環(huán)幾乎是在瞬間完成的,種子一致,所以會出現(xiàn)10次循環(huán)輸出同一隨機數(shù)的情況.

二.Guid 類

System.Guid

GUID (Globally Unique Identifier) 全球唯一標(biāo)識符

GUID的計算使用到了很多在本機可取到的數(shù)字,如硬件的ID碼,當(dāng)前時間等.所計算出的128位整數(shù)(16字節(jié))可以接近唯一的輸出.

復(fù)制代碼 代碼如下:

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

計算結(jié)果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx結(jié)構(gòu)的16進制數(shù)字.當(dāng)然這個格式也是可以更改的.

三.RNGCryptoServiceProvider 類

System.Security.Cryptography.RNGCryptoServiceProvider

RNGCryptoServiceProvider 使用加密服務(wù)提供程序 (CSP) 提供的實現(xiàn)來實現(xiàn)加密隨機數(shù)生成器 (RNG)

復(fù)制代碼 代碼如下:

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

因該類使用更嚴(yán)密的算法.所以即使如下放在循環(huán)中,所計算出的隨機數(shù)也是不同的.

復(fù)制代碼 代碼如下:

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的計算較為繁瑣,在循環(huán)中使用會消耗造成大量的系統(tǒng)資源開銷,使用時需注意.''

Membership.GeneratePassword()

Membership是一個方便快捷的進行角色權(quán)限管理的類,偶然發(fā)現(xiàn)一個很有意思的方法,沒研究過是如何實現(xiàn)的

復(fù)制代碼 代碼如下:

public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);
//
// 摘要:
//     生成指定長度的隨機密碼。
//
// 參數(shù):
//   numberOfNonAlphanumericCharacters:
//     生成的密碼中的標(biāo)點字符數(shù)。
//
//   length:
//     生成的密碼的字符數(shù)。長度必須介于 1 和 128 個字符之間。
//
// 返回結(jié)果:
//     指定長度的隨機密碼。

例:

復(fù)制代碼 代碼如下:

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

結(jié)果為

復(fù)制代碼 代碼如下:

C!&^HoTNv3!ZHkK9BAbu

azLgER)JJ-UW8q*14yz*

I3qnb]Zxu16ht!kKZ!Q*

9U:MAQ&c1x)^aed@xe**

oL(%4JvfbP&t5*Hpl4l-

6@zj$CnhW&D+|xOf:qIk

A/!Di&l*tY$QaMH0gyzY

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

1OgIJS3&09fw0F9.|aXA

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉木乃县| 洪泽县| 荆门市| 温州市| 禹城市| 云和县| 尼勒克县| 龙泉市| 固安县| 安阳县| 潞城市| 灵石县| 托克托县| 平泉县| 高邑县| 安西县| 桐柏县| 宜兰县| 义乌市| 平凉市| 乳山市| 土默特右旗| 曲周县| 长岭县| 海口市| 莫力| 临沭县| 确山县| 灵山县| 清涧县| 五寨县| 阜康市| 揭西县| 浦县| 南漳县| 乌审旗| 即墨市| 鹤壁市| 涟水县| 宿松县| 衡水市|