隨機數的定義為:產生的所有數字毫無關係.
在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.
在c#中獲取隨機數有三種方法:
一.random 類
random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.?
12
random rd =
new
random();
int
i = rd.next();
這種隨機數可以達到一些要求較低的目標,但是如果在高併發的情況下,random類所取到的系統時鐘種子接近甚至完全一樣,就很有可能出現重複,這裡用迴圈來舉例?
12
3
4
5
for
(
int
i = 0; i < 10; i++)
這個例子會輸出10個相同的"隨機數".
突顯出的問題:因為random進行偽隨機數的演算法是固定的,所以根據同乙個種子計算出的數字必然是一樣的.而以當代計算機的執行速度,該迴圈幾乎是在瞬間完成的,種子一致,所以會出現10次迴圈輸出同一隨機數的情況.
二.guid 類
system.guid
guid (globally unique identifier) 全球唯一識別符號
guid的計算使用到了很多在本機可取到的數字,如硬體的id碼,當前時間等.所計算出的128位整數(16位元組)可以接近唯一的輸出.?
1console.writeline(guid.newguid().tostring());
計算結果是******xx-***x-***x-***x-************結構的16進製制數字.
三.rngcryptoserviceprovider 類
system.security.cryptography.rngcryptoserviceprovider
rngcryptoserviceprovider 使用加密服務提供程式 (csp) 提供的實現來實現加密隨機數生成器 (rng)?
12
3
4
rngcryptoserviceprovider csp =
new
rngcryptoserviceprovider();
byte
bytecsp =
new
byte
[10];
csp.getbytes(bytecsp);
console.writeline(bitconverter.tostring(bytecsp));
因該類使用更嚴密的演算法.所以即使如下放在迴圈中,所計算出的隨機數也是不同的.?
12
3
4
5
6
7
for
(
int
i = 0; i < 10; i++)
?1
但是rngcryptoserviceprovider的計算較為繁瑣,在迴圈中使用會消耗造成大量的系統資源開銷,使用時需注意.
四.membership.generatepassword()
membership是乙個方便快捷的進行角色許可權管理的類,偶然發現乙個很有意思的方法,跟隨機數也擦點邊吧?
12
3
4
5
6
7
8
9
10
11
12
13
14
public
static
string
generatepassword(
int
length,
int
numberofnonalphanumericcharacters);
//
// 摘要:
// 生成指定長度的隨機密碼。
//
// 引數:
// numberofnonalphanumericcharacters:
// 生成的密碼中的標點字元數。
//
// length:
// 生成的密碼的字元數。長度必須介於 1 和 128 個字元之間。
//
// 返回結果:
// 指定長度的隨機密碼。
例:?1
2
3
4
for
(
int
i = 0; i < 10; i++)
結果為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 生成隨機數的三種方法
隨機數的定義為 產生的所有數字毫無關係.在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.在c 中獲取隨機數有三種方法 一.random 類 random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.random rd new random in...
C 生成隨機數的三種方法
c 生成隨機數的三種方法 隨機數的定義為 產生的所有數字毫無關係.在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.在c 中獲取隨機數有三種方法 一.random 類 random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.random rd ...
C 生成隨機數的三種方法
隨機數的定義為 產生的所有數字毫無關係.在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.在c 中獲取隨機數有三種方法 一.random 類 random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.1 random rd newrandom 2...