W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在C#中,要生成隨機(jī)數(shù)的方法有好幾種,其中下面三種是最常使用到的。
Random類默認(rèn)的無參構(gòu)造函數(shù)可以根據(jù)當(dāng)前系統(tǒng)時(shí)鐘為種子,進(jìn)行一系列算法得出要求范圍內(nèi)的偽隨機(jī)數(shù)
Random rd = new Random()
rd.next(1,10)(生成1~10之間的隨機(jī)數(shù),不包括10)
以上是求10以內(nèi)隨機(jī)數(shù)的例子,這種隨機(jī)數(shù)可以達(dá)到一些要求較低的目標(biāo),但是如果在高并發(fā)的情況下,Random類所取到的系統(tǒng)時(shí)鐘種子接近甚至完全一樣,就很有可能出現(xiàn)重復(fù),這里用循環(huán)來舉例
for(int i=0;i<10;i++){
Random rd = new Random();
Console.WriteLine(rd.Next(10,100).ToString());
}
這個(gè)例子會(huì)得到10個(gè)相同的隨機(jī)數(shù),應(yīng)循環(huán)完成的時(shí)間是非常短,所以根據(jù)系統(tǒng)時(shí)間作為種子算出的隨機(jī)數(shù)就會(huì)是一樣的。所以Random循環(huán)只適用于要求比較低的情況。
System.Guid
GUID (Globally Unique Identifier) 全球唯一標(biāo)識符
GUID的計(jì)算使用到了很多在本機(jī)可取到的數(shù)字,如硬件的ID碼,當(dāng)前時(shí)間等.所計(jì)算出的128位整數(shù)(16字節(jié))可以接近唯一的輸出.
Console.WriteLine(Guid.NewGuid().ToString());
計(jì)算結(jié)果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx結(jié)構(gòu)的16進(jìn)制數(shù)字.當(dāng)然這個(gè)格式也是可以更改的.常用的四種格式:
var uuid = Guid.NewGuid().ToString(); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12
var uuidN = Guid.NewGuid().ToString("N"); // e0a953c3ee6040eaa9fae2b667060e09
var uuidD = Guid.NewGuid().ToString("D"); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12
var uuidB = Guid.NewGuid().ToString("B"); // {734fd453-a4f8-4c5d-9c98-3fe2d7079760}
var uuidP = Guid.NewGuid().ToString("P"); // (ade24d16-db0f-40af-8794-1e08e2040df3)
var uuidX = Guid.NewGuid().ToString("X"); // {0x3fa412e3,0x8356,0x428f,{0xaa,0x34,0xb7,0x40,0xda,0xaf,0x45,0x6f}}
System.Security.Cryptography.RNGCryptoServiceProvider
RNGCryptoServiceProvider 使用加密服務(wù)提供程序 (CSP) 提供的實(shí)現(xiàn)來實(shí)現(xiàn)加密隨機(jī)數(shù)生成器 (RNG)
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] byteCsp = new byte[10];
csp.GetBytes(byteCsp);
Console.WriteLine(BitConverter.ToString(byteCsp));
因該類使用更嚴(yán)密的算法.所以即使如下放在循環(huán)中,所計(jì)算出的隨機(jī)數(shù)也是不同的.
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的計(jì)算較為繁瑣,在循環(huán)中使用會(huì)消耗造成大量的系統(tǒng)資源開銷,使用時(shí)需注意.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: