C 獲取隨機數

2021-07-25 00:15:44 字數 2297 閱讀 6486

這篇文章主要介紹了c#中獲取、生成隨機數的三種方法,本文講解了random 類生成法、guid 類生成法以及rngcryptoserviceprovider 類生成法,需要的朋友可以參考下

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

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

在c#中獲取隨機數有三種方法:

一.random 類

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

複製** **如下:

random rd = new random();

int i = rd.next();

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

複製** **如下:

for (int i = 0; i < 10; i++)

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

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

二.guid 類

system.guid

guid (globally unique identifier) 全球唯一識別符號

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

複製** **如下:

console.writeline(guid.newguid().tostring());

計算結果是******xx-***x-***x-***x-************結構的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的計算較為繁瑣,在迴圈中使用會消耗造成大量的系統資源開銷,使用時需注意.''

membership.generatepassword()

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

複製** **如下:

public static string generatepassword(int length, int numberofnonalphanumericcharacters);

//// 摘要:

//     生成指定長度的隨機密碼。

//// 引數:

//   numberofnonalphanumericcharacters:

//     生成的密碼中的標點字元數。

////   length:

//     生成的密碼的字元數。長度必須介於 1 和 128 個字元之間。

//// 返回結果:

//     指定長度的隨機密碼。

例:複製** **如下:

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 獲取隨機數

方法一 使用 rand 函式可以獲取,如下。隨機數大小是在0到rand max,值為2147483647,它是在stdlib中定義的,如果我們希望在某個範圍內,可以使用 結合 來實現。但是不難發現,這裡獲得的隨機數是唯一確定的,而不是變化的。所以,如果我們希望獲得變化的隨機數,可以使用下面的方法。方...

獲取隨機數

c 中提供了隨機數函式rand 但是這個函式其實提供的數字是有限的,大概是0 32767,所以這就導致了兩個問題 1 獲取的的數字並不是隨機的,比如要取0 99的隨機數,那麼一般就是rand 100,由於32767 100 67,所以0 67的數字獲得到的次數會比68 99多一次。2 無法獲取到比3...

C語言獲取隨機數

可能大家在程式設計的時候需要電腦來獲取一些隨機的反應,這個時候我們可以使用隨機數,比較常見的是 rand 函式,它可以隨機的產生 0 rand max 的隨機數。rand max 是乙個很大的數字,具體關係到ide和資料型別,我們一般的需要不可能超出它的範圍。下面是乙個例項 include incl...