- 相關(guān)推薦
C言語(yǔ)中獲取、生成隨機數的三種方法
C言語(yǔ)中獲取、生成隨機數的方法有很多種,每種方法都有自己的特色。下面是小編為大家帶來(lái)的C言語(yǔ)中獲取、生成隨機數的三種方法,歡迎閱讀。
隨機數的定義為:產(chǎn)生的所有數字毫無(wú)關(guān)系.
在實(shí)際應用中很多地方會(huì )用到隨機數,比如需要生成唯一的訂單號.
在C#中獲取隨機數有三種方法:
一.Random 類(lèi)
Random類(lèi)默認的無(wú)參構造函數可以根據當前系統時(shí)鐘為種子,進(jìn)行一系列算法得出要求范圍內的偽隨機數.
代碼如下:
Random rd = new Random();
int i = rd.Next();
這種隨機數可以達到一些要求較低的目標,但是如果在高并發(fā)的情況下,Random類(lèi)所取到的系統時(shí)鐘種子接近甚至完全一樣,就很有可能出現重復,這里用循環(huán)來(lái)舉例
代碼如下:
for (int i = 0; i < 10; i++)
{
Random rd = new Random(); //無(wú)參即為使用系統時(shí)鐘為種子
Console.WriteLine(rd.Next().ToString());
}
這個(gè)例子會(huì )輸出10個(gè)相同的"隨機數".
突顯出的問(wèn)題:因為Random進(jìn)行偽隨機數的算法是固定的,所以根據同一個(gè)種子計算出的數字必然是一樣的.而以當代計算機的運行速度,該循環(huán)幾乎是在瞬間完成的,種子一致,所以會(huì )出現10次循環(huán)輸出同一隨機數的情況.
二.Guid 類(lèi)
System.Guid
GUID (Globally Unique Identifier) 全球唯一標識符
GUID的計算使用到了很多在本機可取到的數字,如硬件的ID碼,當前時(shí)間等.所計算出的128位整數(16字節)可以接近唯一的輸出.
代碼如下:
Console.WriteLine(Guid.NewGuid().ToString());
計算結果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx結構的16進(jìn)制數字.當然這個(gè)格式也是可以更改的.
三.RNGCryptoServiceProvider 類(lèi)
System.Security.Cryptography.RNGCryptoServiceProvider
RNGCryptoServiceProvider 使用加密服務(wù)提供程序 (CSP) 提供的實(shí)現來(lái)實(shí)現加密隨機數生成器 (RNG)
代碼如下:
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] byteCsp = new byte[10];
csp.GetBytes(byteCsp);
Console.WriteLine(BitConverter.ToString(byteCsp));
因該類(lèi)使用更嚴密的算法.所以即使如下放在循環(huán)中,所計算出的隨機數也是不同的.
代碼如下:
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)中使用會(huì )消耗造成大量的系統資源開(kāi)銷(xiāo),使用時(shí)需注意.''
Membership.GeneratePassword()
Membership是一個(gè)方便快捷的進(jìn)行角色權限管理的類(lèi),偶然發(fā)現一個(gè)很有意思的方法,沒(méi)研究過(guò)是如何實(shí)現的
代碼如下:
public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);
//
// 摘要:
// 生成指定長(cháng)度的隨機密碼。
//
// 參數:
// numberOfNonAlphanumericCharacters:
// 生成的密碼中的標點(diǎn)字符數。
//
// length:
// 生成的密碼的字符數。長(cháng)度必須介于 1 和 128 個(gè)字符之間。
//
// 返回結果:
// 指定長(cháng)度的隨機密碼。
例:
代碼如下:
for (int i = 0; i < 10; i++)
{
Response.Write(Membership.GeneratePassword(20, 1) + "
");
}
結果為
代碼如下:
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*%
不知是否正好符合你的要求?
【C言語(yǔ)中獲取、生成隨機數的三種方法】相關(guān)文章:
php獲取隨機數組列表的方法08-31
在C語(yǔ)言/C++中如何產(chǎn)生隨機數08-22
C語(yǔ)言/C++中如何產(chǎn)生隨機數09-16
C語(yǔ)言編程中生成隨機數的初級教程10-07
Python獲取IP地址的三種方法09-29
Java編程中獲取路徑的方法09-06