C#生成随机数的三种方法
来源:互联网 发布:php后端 任务 编辑:程序博客网 时间:2024/06/05 04:39
随机数的定义为:产生的所有数字毫无关系.
在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号.
在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*%
不知是否正好符合你的要求?
没事可以研究下,有结果别忘了分享下啦 :p
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- C#生成随机数的三种方法
- JAVA_生成随机数的三种方法
- java生成随机数的三种方法
- java生成随机数的三种方法
- C#生成随机数的方法
- C#生成随机数的方法
- c#生成不重复随机数的方法
- 如何创建一个Joomla的组件
- 面向对象的JavaScript
- 异常解决方法
- 如何创建Joomla的插件
- Javascript数组类型检测:编写更强壮的isArray函数
- C#生成随机数的三种方法
- 如何在Joomla的controller中关联Model和View
- browserProvider2--contentProvider
- 国内各大互联网公司UED(用户体验设计)团队博客
- 深入剖析JavaScript中的继承
- POJ 3667 Hotel
- hibernate.use_sql_comments作用
- tomcat
- aufs 存储机制