基本随机数生成:
int seed = 8;
Random rnd = new Random(seed); //使用指定的种子seed初始化一个Random实例
int rndNum = rnd.Next(100); //返回0-99的随机数
随机数应用之验证码的生成:
public string RandomNum(int Len)
{
string str = "0,1,2,3,4,5,6,7,8,9,";
str += "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,";
str += "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] s = str.Split(new char[] { ',' }); //将字符串拆分成字符串数组
string strNum = "";
int tag = -1; //用于记录上一个随机数的值,避免产生两个重复值
Random rnd = new Random();
//产生一个长度为Len的随机字符串
for (int i = 1; i <= Len; i++)
{
if (tag == -1)
{
rnd = new Random(i * tag * unchecked((int)DateTime.Now.Ticks)); //初始化一个Random实例
}
int rndNum = rnd.Next(0, 61); //返回小于61的非负随机数
//如果产生与前一个随机数相同的数,则重新生成一个新随机数
if (tag != -1 && tag == rndNum)
{
return RandomNum(Len);
}
tag = rndNum;
strNum += s[rndNum];
}
//将生成的随机码保存到Session中
Session["CheckCode"] = strNum;
return strNum;
}
注解:
1、unchecked: unchecked 关键字用于取消整型算术运算和转换的溢出检查。
unchecked
{
int val = 2147483647 * 2;
}
因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。如果省略 unchecked,将产生编译错误。unchecked 关键字还可以用作运算符,如下所示:
public int UncheckedAdd(int a, int b)
{
return unchecked(a + b);
}
2、DateTime.Now.Ticks:获取表示此实例的日期和时间的计时周期数(时间刻度)。
int seed = 8;
Random rnd = new Random(seed); //使用指定的种子seed初始化一个Random实例
int rndNum = rnd.Next(100); //返回0-99的随机数
随机数应用之验证码的生成:
public string RandomNum(int Len)
{
string str = "0,1,2,3,4,5,6,7,8,9,";
str += "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,";
str += "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] s = str.Split(new char[] { ',' }); //将字符串拆分成字符串数组
string strNum = "";
int tag = -1; //用于记录上一个随机数的值,避免产生两个重复值
Random rnd = new Random();
//产生一个长度为Len的随机字符串
for (int i = 1; i <= Len; i++)
{
if (tag == -1)
{
rnd = new Random(i * tag * unchecked((int)DateTime.Now.Ticks)); //初始化一个Random实例
}
int rndNum = rnd.Next(0, 61); //返回小于61的非负随机数
//如果产生与前一个随机数相同的数,则重新生成一个新随机数
if (tag != -1 && tag == rndNum)
{
return RandomNum(Len);
}
tag = rndNum;
strNum += s[rndNum];
}
//将生成的随机码保存到Session中
Session["CheckCode"] = strNum;
return strNum;
}
注解:
1、unchecked: unchecked 关键字用于取消整型算术运算和转换的溢出检查。
unchecked
{
int val = 2147483647 * 2;
}
因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。如果省略 unchecked,将产生编译错误。unchecked 关键字还可以用作运算符,如下所示:
public int UncheckedAdd(int a, int b)
{
return unchecked(a + b);
}
2、DateTime.Now.Ticks:获取表示此实例的日期和时间的计时周期数(时间刻度)。
每个计时周期表示一百纳秒,即一千万分之一秒。此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00以来经过的以 100 纳秒为间隔的间隔数。