C言語中獲取、生成隨機數的三種方法
C言語中獲取、生成隨機數的方法有很多種,每種方法都有自己的特色。下面是小編為大家帶來的C言語中獲取、生成隨機數的三種方法,歡迎閲讀。
隨機數的定義為:產生的所有數字毫無關係.
在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.
在C#中獲取隨機數有三種方法:
一om 類
Random類默認的無參構造函數可以根據當前系統時鐘為種子,進行一系列算法得出要求範圍內的偽隨機數.
代碼如下:
Random rd = new Random();
int i = ();
這種隨機數可以達到一些要求較低的目標,但是如果在高併發的情況下,Random類所取到的系統時鐘種子接近甚至完全一樣,就很有可能出現重複,這裏用循環來舉例
代碼如下:
for (int i = 0; i < 10; i++)
{
Random rd = new Random(); //無參即為使用系統時鐘為種子
eLine(()ring());
}
這個例子會輸出10個相同的"隨機數".
突顯出的問題:因為Random進行偽隨機數的算法是固定的,所以根據同一個種子計算出的數字必然是一樣的.而以當代計算機的運行速度,該循環幾乎是在瞬間完成的,種子一致,所以會出現10次循環輸出同一隨機數的情況.
二 類
GUID (Globally Unique Identifier) 全球唯一標識符
GUID的計算使用到了很多在本機可取到的數字,如硬件的ID碼,當前時間等.所計算出的128位整數(16字節)可以接近唯一的輸出.
代碼如下:
eLine(uid()ring());
計算結果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx結構的16進制數字.當然這個格式也是可以更改的..
三ryptoServiceProvider 類
ryptoServiceProvider
RNGCryptoServiceProvider 使用加密服務提供程序 (CSP) 提供的實現來實現加密隨機數生成器 (RNG)
代碼如下:
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] byteCsp = new byte[10];
ytes(byteCsp);
eLine(ring(byteCsp));
因該類使用更嚴密的算法.所以即使如下放在循環中,所計算出的隨機數也是不同的.
代碼如下:
for (int i = 0; i < 10; i++)
{
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] byteCsp = new byte[10];
ytes(byteCsp);
eLine(ring(byteCsp));
}
但是RNGCryptoServiceProvider的計算較為繁瑣,在循環中使用會消耗造成大量的系統資源開銷,使用時需注意.''
ratePassword()
Membership是一個方便快捷的進行角色權限管理的類,偶然發現一個很有意思的方法,沒研究過是如何實現的
代碼如下:
public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);
//
// 摘要:
// 生成指定長度的隨機密碼。
//
// 參數:
// numberOfNonAlphanumericCharacters:
// 生成的密碼中的標點字符數。
//
// length:
// 生成的密碼的字符數。長度必須介於 1 和 128 個字符之間。
//
// 返回結果:
// 指定長度的隨機密碼。
例:
代碼如下:
for (int i = 0; i < 10; i++)
{
e(ratePassword(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*%
不知是否正好符合你的要求?
-
Swift與C語言指針結合使用實例
引導語:Swift可與Object-C共同運行於MACOS和iOS平台,用於搭建基於蘋果平台的應用程序。以下是本站小編分享給大家的Swift與C語言指針結合使用實例,歡迎閲讀!####用以輸入/輸出的參數指針C和Objective-C並不支持多返回值,所以CocoaAPI中常常將指針作為一種在方法間...
-
C語言如何提高程序效率
好的代碼沒有一個統一的衡量標準,在程序員們的世界裏大家也是各自按照自己的標準衡量着自己和別人的代碼。不過有一個標準幾乎是被所有人認同的。服役時間越長、出錯率越高的代碼就是好代碼。所有的編程方法、代碼技巧甚至於設計模式都是為了達到這個目的而產生...
-
計算機c語言基礎知識
C語言程序設計是高效計算機專業學生必修的一門基礎課程,那麼你對計算機c語言瞭解多少呢?下面是小編整理的計算機c語言基礎知識,歡迎大家閲讀參考。計算機c語言的特性C語言是世界上最流行、使用最廣泛的高級程序設計語言之一。在操作系統和系統使用程序以及需要對...
-
測試C語言功力的幾個問題
在實際的VC++教學中,發現很少有真正精通了C語言編程的學員,一般都有或多或少概念不是完全清楚的問題,特別是一些需要豐富的實戰經驗才能體會和明白的問題,如字符串,指針,類型轉換,定義指向函數的指針類型,這也是導致學習VC++困難的一個原因。下面就來和小編一起看看測...