欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語(yǔ)言

C言語(yǔ)中獲取、生成隨機(jī)數(shù)的三種方法

時(shí)間:2025-01-25 07:37:31 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C言語(yǔ)中獲取、生成隨機(jī)數(shù)的三種方法

  C言語(yǔ)中獲取、生成隨機(jī)數(shù)的方法有很多種,每種方法都有自己的特色。下面是小編為大家?guī)?lái)的C言語(yǔ)中獲取、生成隨機(jī)數(shù)的三種方法,歡迎閱讀。

  隨機(jī)數(shù)的定義為:產(chǎn)生的所有數(shù)字毫無(wú)關(guān)系.

  在實(shí)際應(yīng)用中很多地方會(huì)用到隨機(jī)數(shù),比如需要生成唯一的訂單號(hào).

  在C#中獲取隨機(jī)數(shù)有三種方法:

  一.Random 類

  Random類默認(rèn)的無(wú)參構(gòu)造函數(shù)可以根據(jù)當(dāng)前系統(tǒng)時(shí)鐘為種子,進(jìn)行一系列算法得出要求范圍內(nèi)的偽隨機(jī)數(shù).

  代碼如下:

  Random rd = new Random();

  int i = rd.Next();

  這種隨機(jī)數(shù)可以達(dá)到一些要求較低的目標(biāo),但是如果在高并發(fā)的情況下,Random類所取到的系統(tǒng)時(shí)鐘種子接近甚至完全一樣,就很有可能出現(xiàn)重復(fù),這里用循環(huán)來(lái)舉例

  代碼如下:

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

  {

  Random rd = new Random();  //無(wú)參即為使用系統(tǒng)時(shí)鐘為種子

  Console.WriteLine(rd.Next().ToString());

  }

  這個(gè)例子會(huì)輸出10個(gè)相同的"隨機(jī)數(shù)".

  突顯出的問(wèn)題:因?yàn)镽andom進(jìn)行偽隨機(jī)數(shù)的算法是固定的,所以根據(jù)同一個(gè)種子計(jì)算出的數(shù)字必然是一樣的.而以當(dāng)代計(jì)算機(jī)的運(yùn)行速度,該循環(huán)幾乎是在瞬間完成的,種子一致,所以會(huì)出現(xiàn)10次循環(huán)輸出同一隨機(jī)數(shù)的情況.

  二.Guid 類

  System.Guid

  GUID (Globally Unique Identifier) 全球唯一標(biāo)識(shí)符

  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è)格式也是可以更改的.

  三.RNGCryptoServiceProvider 類

  System.Security.Cryptography.RNGCryptoServiceProvider

  RNGCryptoServiceProvider 使用加密服務(wù)提供程序 (CSP) 提供的實(shí)現(xiàn)來(lái)實(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)資源開(kāi)銷,使用時(shí)需注意.''

  Membership.GeneratePassword()

  Membership是一個(gè)方便快捷的進(jìn)行角色權(quán)限管理的類,偶然發(fā)現(xiàn)一個(gè)很有意思的方法,沒(méi)研究過(guò)是如何實(shí)現(xiàn)的

  代碼如下:

  public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);

  //

  // 摘要:

  // 生成指定長(zhǎng)度的隨機(jī)密碼。

  //

  // 參數(shù):

  // numberOfNonAlphanumericCharacters:

  // 生成的密碼中的標(biāo)點(diǎn)字符數(shù)。

  //

  // length:

  // 生成的密碼的字符數(shù)。長(zhǎng)度必須介于 1 和 128 個(gè)字符之間。

  //

  // 返回結(jié)果:

  // 指定長(zhǎng)度的隨機(jī)密碼。

  例:

  代碼如下:

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

  {

  Response.Write(Membership.GeneratePassword(20, 1) + "

  ");

  }

  結(jié)果為

  代碼如下:

  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言語(yǔ)中獲取、生成隨機(jī)數(shù)的三種方法】相關(guān)文章:

php獲取隨機(jī)數(shù)組列表的方法08-31

C 語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法08-28

C語(yǔ)言產(chǎn)生隨機(jī)數(shù)的方法08-26

c語(yǔ)言隨機(jī)數(shù)生成函數(shù)和時(shí)間函數(shù)10-28

在C語(yǔ)言/C++中如何產(chǎn)生隨機(jī)數(shù)08-22

C語(yǔ)言/C++中如何產(chǎn)生隨機(jī)數(shù)09-16

C語(yǔ)言編程中生成隨機(jī)數(shù)的初級(jí)教程10-07

Python獲取IP地址的三種方法09-29

Java編程中獲取路徑的方法09-06