转自:
http://www.cnblogs.com/izanami/archive/2011/04/20/2022173.html
随机数的定义为:产生的所有数字毫无关系.
在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号.
在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*%
不知是否正好符合你的要求?
没事可以研究下,有结果别忘了分享下啦 :
分享到:
相关推荐
C#生成随机数并画图 C# 生成随机数并利用随机数画图是通过使用 C# 语言和 Windows Forms 应用程序来实现的。下面是该技术的详细解释: 一、基础知识 在 C# 中,随机数可以通过使用 `Random` 类来生成。`Random` ...
总之,这个压缩包中的代码示例展示了C#中生成随机数的基本方法以及如何进行基本的数学运算,是初学者学习C#编程和理解随机数生成的一个好起点。通过扩展这些基础概念,开发者可以构建出更复杂、更实用的应用程序。
总结来说,C#提供多种生成随机数的方法,从基础的Random类到适用于加密操作的RNGCryptoServiceProvider。开发者可以根据具体需求选择合适的方式,确保生成的随机数满足安全性和独立性的要求。在VS2010环境下,编写...
### C#随机数三种方法详解 在C#编程语言中,生成随机数是常见的需求之一。根据提供的文件信息,本文将详细介绍三种不同的方法来生成随机数,并深入探讨每种方法的特点、应用场景以及潜在的问题。 #### 方法一:...
本文介绍了C#中生成随机数的方法、数组的基本操作以及冒泡排序算法的具体实现。通过这个示例程序,读者可以了解到如何在实际编程中应用这些概念。值得注意的是,虽然冒泡排序易于理解和实现,但在大数据量的情况下...
在C#编程语言中,生成随机数是一项常见的任务,它在各种应用场景中都有所涉及,如游戏开发、模拟计算、测试用例生成等。本文将详细介绍如何在C#中生成随机数,包括基本的随机数生成、指定范围内的随机数以及自定义...
2. 在Main方法中,创建了一个Random对象ran,用于生成随机数。 3. 使用NextDouble方法生成一个0到1之间的随机浮点数,乘以0.05后加上0.9,从而生成一4. 个介于0.9和0.95之间的随机浮点数。 5. 使用Math.Round方法将...
C#入门者喜欢的程序,高手可以跳过,程序比较简单,主要是用C# 生成随机数,并进行随机数相加运算,然后将结果赋值给LABLE,像是小学生的算术运算出题程序一样,其实改一下界面,变卡通点,说不定就成了一个教学软件...
用于在并发环境下生成随机数,系统默认的多线程情况生成的随机数是相同的
本文将详细介绍如何在C#中生成随机数,以及几种不同的实现方式。 首先,让我们了解C#中最基础的随机数生成方法。C#提供了一个名为`System.Random`的类,可以用来生成一系列伪随机数。以下是最简单的使用示例: ```...
以下是对标题和描述中提到的C#生成随机数代码的详细解释: 首先,生成随机数的核心是`Random`类,它是C#内置的用于生成伪随机数的类。`Random`类需要一个种子值来初始化,以确保每次生成的随机数序列都是可预测的。...
在给定的压缩包文件"抓不到我吃屎去(随机数)"中,可能包含了一些示例代码或练习项目,让你更直观地了解如何在实际应用中使用C#生成随机数。你可以下载并运行这些代码,以便更好地理解和实践。 总结来说,C#通过`...
- 当`Tick`事件触发时,可以在事件处理程序中执行生成随机数并显示的操作。 3. **事件驱动编程**: - 在Windows Forms应用中,事件驱动编程是核心机制。Timer控件的`Tick`事件被触发时,会调用预先绑定的事件处理...
在C#编程语言中,生成随机数是一项常见的需求,尤其在游戏开发、模拟运算、测试用例生成等场景中。本篇文章将详细讲解如何利用C#编写一个自定义的随机数生成函数,确保生成的随机数在指定范围内,并且可以避免重复。...
解决了C# Random生成随机数重复问题,并生成随机数的 介绍了五种方法。 没有分的童鞋,可以参考博文,博文里有源码: http://blog.csdn.net/shuai_wy/article/details/78606175
在C#编程中,生成随机数、排序以及与Oracle数据库交互是常见的操作。在这个特定的项目中,我们看到一个挑战性的任务,即生成250万个随机数,对其进行排序,然后将结果存入Oracle数据库。这里我们将深入探讨这些知识...
本文实例讲述了C#生成随机数的方法。分享给大家供大家参考。具体如下: 代码如下:/// /// 生成num位数验证码 用于短信验证功能 /// public static Random rand = new Random(); public static string ...
本文提供了一个名为`BaseRandom`的类,该类为C#程序员提供了生成随机数的便利方法。这个类是静态的,这意味着我们可以直接通过类名调用其成员方法,而无需创建类的实例。 `BaseRandom`类中有三个静态字段: 1. `...