c#中的随机数

默认情况下,C#中的伪随机数生成器Random是根据系统时间来设置其种子的。

Random rd = new Random();

int randNum=rd.next(1,101)

若我们采用默认的方式,对Random进行初始化的时候不赋予任何参数,其随机种子便采用系统时间。如果我们用循环一次生成多个随机数,由于CPU运算速度太快了,所以每次取到的都是同一个时间,即生成的随机数都会一样,因此每次生成随机数之前需要更换随机数种子。

对于这种情况,我们可以采用加密随机数生成器来生成不同的种子,每次需要生成随机数的时候为Random赋予不同的种子,即使在很短的时间内也可以保证生成的随机数不同。具体代码如下:

/// <summary>

/// 加密随机数生成器,生成随机种子

/// </summary>

/// <returns></returns>

private static int Chaos_GetRandomSeed()

{

byte[] bytes = new byte[4];

System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();

rng.GetBytes(bytes);

return BitConverter.ToInt32(bytes, 0);

}

生成随机数的时候,每次将生成的随机数种子作为参数初始化Random即可,代码如下:

//用消息框输出十个随机数

string strMSG = "";

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

{

//每次生成随机数的时候都使用机密随机数生成器来生成种子,

//这样即使在很短的时间内也可以保证生成的随机数不同

Random rdm = new Random(Chaos_GetRandomSeed());

//获取一个10到30之间的随机数

int iRand = rdm.Next(10, 300);

strMSG += iRand.ToString() + " ";

}

MessageBox.Show(strMSG,"随机数测试");

程序最终运行截图如下:

c#中的随机数

时间: 2024-11-08 18:16:56

c#中的随机数的相关文章

[小技巧] 在bash中生成随机数

译至:http://d.hatena.ne.jp/anmino/20091017/1255705586 bash的SHELL参数RANDOM可以生成0-32767的随机数.想设定从1到N的随机数范围的话,可以使用:$ ( ( (RANDOM % n) + 1 )) #!/bin/sh #random_bash.sh for n in 1 2 3 4 5 6 7 8 9 10; do random=$(( (RANDOM % 10) + 1 )) echo -n "$random " d

C++中的随机数函数(

标签:ul 随机数 c 整数 max 教育  C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依旧要借助C标准库中的rand()函数) 函数说明: int rand();                                          :返回从[0,MAX)之间的随机整数,这里的MAX与你所定义的数据类型而定:需#inc

Linux中的随机数文件 /dev/random /dev/urandom

Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random.他们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回.熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等.如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候,而当前需要大量的随机比特,这时产生的随机数的随机效果就不是很好了. 这就

Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random,ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即:java.security.SecureRandom Q:Random是不是线程安全的?A:Random是线程安全的,但是多线程下可能性能比较低.参考:http://docs.oracle.com

T-SQL中的随机数

T-SQL中的随机数 SQL开发中会有生成随机数的需求,下面说几种常用的需求和解决办法(基于MS SQL),最后总结出通用的办法: 1.0-9间的随机整数,包括0和9本身: abs(checksum(newid()))%10 扩展从a-b间的随机整数(a,b本身也是整数): a+abs(checksum(newid()))%(b-a+1) 2.0-1间的随机实数: rand() --或是 rand(checksum(newid())) --推荐使用后一种. 由此扩展从a-b间的随机实数: a+r

C#中获取随机数有三种方法

随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数. 1 2 Random rd = new Random(); int i = rd.Next(); 这种随机数可以达到一些要求较低的目标,但是如果在高并发的情况下,Random类所取到的系统时钟种子接近甚至完全一样,就很有可能出现重复,这里用

LoadRunner中的随机数

LoadRunner中的随机数 Action() { int i; char OrderId[21]; srand(time(NULL)); i=rand()%10; lr_save_datetime("%m%d%H%M%S", DATE_NOW, "now"); sprintf(OrderId, "%s%d", lr_eval_string("{now}"),i); lr_output_message("定单号为:

C/C++ 中的随机数

本文分两部分,先介绍 C 语言中与随机数相关的两个函数 srand 和 rand,后介绍 C++ 中的 random 库. 1.C 语言中的 srand 和 rand 1)实现 下面是 VC 的实现: #define RAND_MAX 32767 // in <stdlib.h> unsigned long _Randseed = 1; // global seed void srand(unsigned int seed) { _Randseed = seed; } int rand(voi

简单东西-链接路径中添加随机数的作用

今天实现登陆的验证码生成功能,有一个"看不清"的链接,用于获取新的验证码,通过JS动态修正验证码的img元素的src属性,结果,验证码一直都是初始页面生成的那张图片,但是"看不清"的JS脚本已经执行过了.网上查资料才知道是浏览器缓存问题,解决办法是在请求路径中添加一个随机参数,迫使浏览器放弃缓存.重新去请求验证码. 原来随机数还有这个用途,以前也经常看到请求路径末尾添加一个参数Rand=Math.random()的代码,却从未关注这样处理的用意.简单知识,今天碰到了