其实获取随机数是微软自带的的一个内置函数。很简答,但是在使用的时候发现经常有重复 的数据,
因为Random 不是真正意义上的 随机数,是伪随机,
Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种子,一般都是用UnCheck((Int)DateTime.Now.Ticks)做为参数种子,因此如果计算机运行速度很快,如果触发Randm函数间隔时间很短,就有可能造成产生一样的随机数,因为伪随机的数字,在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。
调用方式:
string value = GetRandomNumber(9);//用rad生成长度9位数的数字;
所以我们需要对Random进行一次封装,代码如下:
public static string GetRandomNumber(int length)
{
string strPwd = string.Empty;
Random rd = new Random(GetRandomSeed());
for (int i = 0; i < length; i++)
{
strPwd += rd.Next(10).ToString();
}
return strPwd;
}
public static int GetRandomSeed()
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}