程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中獲得、生成隨機數的三種辦法

C#中獲得、生成隨機數的三種辦法

編輯:C#入門知識

C#中獲得、生成隨機數的三種辦法。本站提示廣大學習愛好者:(C#中獲得、生成隨機數的三種辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中獲得、生成隨機數的三種辦法正文


隨機數的界說為:發生的一切數字毫有關系.

在現實運用中許多處所會用到隨機數,好比須要生成獨一的定單號.

在C#中獲得隨機數有三種辦法:

一.Random 類

Random類默許的無參結構函數可以依據以後體系時鐘為種子,停止一系列算法得出請求規模內的偽隨機數.


Random rd = new Random();
int i = rd.Next();

這類隨機數可以到達一些請求較低的目的,然則假如在高並發的情形下,Random類所取到的體系時鐘種子接近乃至完整一樣,就很有能夠湧現反復,這裡用輪回來舉例

for (int i = 0; i < 10; i++)
{
    Random rd = new Random();  //無參即為應用體系時鐘為種子
    Console.WriteLine(rd.Next().ToString());
}

這個例子會輸入10個雷同的"隨機數".

突顯出的成績:由於Random停止偽隨機數的算法是固定的,所以依據統一個種子盤算出的數字必定是一樣的.而以現代盤算機的運轉速度,該輪回簡直是在剎時完成的,種子分歧,所以會湧現10次輪回輸入統一隨機數的情形.

二.Guid 類

System.Guid

GUID (Globally Unique Identifier) 全球獨一標識符

GUID的盤算應用到了許多在本機可取到的數字,如硬件的ID碼,以後時光等.所盤算出的128位整數(16字節)可以接近獨一的輸入.


Console.WriteLine(Guid.NewGuid().ToString());

盤算成果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx構造的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 csp = new RNGCryptoServiceProvider();
    byte[] byteCsp = new byte[10];
    csp.GetBytes(byteCsp);
    Console.WriteLine(BitConverter.ToString(byteCsp));
}

然則RNGCryptoServiceProvider的盤算較為繁瑣,在輪回中應用會消費形成年夜量的體系資本開支,應用時需留意.''

Membership.GeneratePassword()

Membership是一個便利快捷的停止腳色權限治理的類,有時發明一個很成心思的辦法,沒研討過是若何完成的


public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);
//
// 摘要:
//     生成指定長度的隨秘密碼。
//
// 參數:
//   numberOfNonAlphanumericCharacters:
//     生成的暗碼中的標點字符數。
//
//   length:
//     生成的暗碼的字符數。長度必需介於 1 和 128 個字符之間。
//
// 前往成果:
//     指定長度的隨秘密碼。

例:

for (int i = 0; i < 10; i++)
{
    Response.Write(Membership.GeneratePassword(20, 1) + "<br>");
}

成果為

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*%

不知能否正好相符你的請求?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved