随机数的应用相关

来源:互联网 发布:淘宝达人和微淘 编辑:程序博客网 时间:2024/04/28 16:48
基本随机数生成:

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 纳秒为间隔的间隔数。






原创粉丝点击