`

C#生成随机数的三种方法

    博客分类:
  • C#
阅读更多

转自:

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# 生成随机数并利用随机数画图是通过使用 C# 语言和 Windows Forms 应用程序来实现的。下面是该技术的详细解释: 一、基础知识 在 C# 中,随机数可以通过使用 `Random` 类来生成。`Random` ...

    C# 生成随机数并进行相加运算.rar

    总之,这个压缩包中的代码示例展示了C#中生成随机数的基本方法以及如何进行基本的数学运算,是初学者学习C#编程和理解随机数生成的一个好起点。通过扩展这些基础概念,开发者可以构建出更复杂、更实用的应用程序。

    C# 生成随机数小程序

    总结来说,C#提供多种生成随机数的方法,从基础的Random类到适用于加密操作的RNGCryptoServiceProvider。开发者可以根据具体需求选择合适的方式,确保生成的随机数满足安全性和独立性的要求。在VS2010环境下,编写...

    C#随机数三种方法

    ### C#随机数三种方法详解 在C#编程语言中,生成随机数是常见的需求之一。根据提供的文件信息,本文将详细介绍三种不同的方法来生成随机数,并深入探讨每种方法的特点、应用场景以及潜在的问题。 #### 方法一:...

    c#产生随机数并冒泡排序

    本文介绍了C#中生成随机数的方法、数组的基本操作以及冒泡排序算法的具体实现。通过这个示例程序,读者可以了解到如何在实际编程中应用这些概念。值得注意的是,虽然冒泡排序易于理解和实现,但在大数据量的情况下...

    生成随机数 C#代码实现

    在C#编程语言中,生成随机数是一项常见的任务,它在各种应用场景中都有所涉及,如游戏开发、模拟计算、测试用例生成等。本文将详细介绍如何在C#中生成随机数,包括基本的随机数生成、指定范围内的随机数以及自定义...

    C#练习-随机数的生成与输出(基于Virtual Studio)

    2. 在Main方法中,创建了一个Random对象ran,用于生成随机数。 3. 使用NextDouble方法生成一个0到1之间的随机浮点数,乘以0.05后加上0.9,从而生成一4. 个介于0.9和0.95之间的随机浮点数。 5. 使用Math.Round方法将...

    C# 生成随机数并进行相加运算

    C#入门者喜欢的程序,高手可以跳过,程序比较简单,主要是用C# 生成随机数,并进行随机数相加运算,然后将结果赋值给LABLE,像是小学生的算术运算出题程序一样,其实改一下界面,变卡通点,说不定就成了一个教学软件...

    c#并发环境下生成随机数封装类

    用于在并发环境下生成随机数,系统默认的多线程情况生成的随机数是相同的

    C#中的生成随机数代码

    本文将详细介绍如何在C#中生成随机数,以及几种不同的实现方式。 首先,让我们了解C#中最基础的随机数生成方法。C#提供了一个名为`System.Random`的类,可以用来生成一系列伪随机数。以下是最简单的使用示例: ```...

    C# 生成随机数的代码

    以下是对标题和描述中提到的C#生成随机数代码的详细解释: 首先,生成随机数的核心是`Random`类,它是C#内置的用于生成伪随机数的类。`Random`类需要一个种子值来初始化,以确保每次生成的随机数序列都是可预测的。...

    C#(随机数)

    在给定的压缩包文件"抓不到我吃屎去(随机数)"中,可能包含了一些示例代码或练习项目,让你更直观地了解如何在实际应用中使用C#生成随机数。你可以下载并运行这些代码,以便更好地理解和实践。 总结来说,C#通过`...

    c# 随机数生成器 Timer

    - 当`Tick`事件触发时,可以在事件处理程序中执行生成随机数并显示的操作。 3. **事件驱动编程**: - 在Windows Forms应用中,事件驱动编程是核心机制。Timer控件的`Tick`事件被触发时,会调用预先绑定的事件处理...

    C# 生成随机数源代码

    在C#编程语言中,生成随机数是一项常见的需求,尤其在游戏开发、模拟运算、测试用例生成等场景中。本篇文章将详细讲解如何利用C#编写一个自定义的随机数生成函数,确保生成的随机数在指定范围内,并且可以避免重复。...

    解决C# Random生成随机数重复问题实例

    解决了C# Random生成随机数重复问题,并生成随机数的 介绍了五种方法。 没有分的童鞋,可以参考博文,博文里有源码: http://blog.csdn.net/shuai_wy/article/details/78606175

    C#随机数生成并排序然后插入数据库

    在C#编程中,生成随机数、排序以及与Oracle数据库交互是常见的操作。在这个特定的项目中,我们看到一个挑战性的任务,即生成250万个随机数,对其进行排序,然后将结果存入Oracle数据库。这里我们将深入探讨这些知识...

    C#生成随机数实例

    本文实例讲述了C#生成随机数的方法。分享给大家供大家参考。具体如下: 代码如下:///   /// 生成num位数验证码 用于短信验证功能  ///   public static Random rand = new Random();  public static string ...

    基于C#生成随机数示例

    本文提供了一个名为`BaseRandom`的类,该类为C#程序员提供了生成随机数的便利方法。这个类是静态的,这意味着我们可以直接通过类名调用其成员方法,而无需创建类的实例。 `BaseRandom`类中有三个静态字段: 1. `...

Global site tag (gtag.js) - Google Analytics