for (int i = 0; i < 10; i++)
        {
            Response.Write(Make(3,8)+"</br>");
        } public static string Make(int kind, int pwdlen)
    {
        string tmpstr = "", pwdchars = "";
        int iRandNum;
        switch ( kind )
        {
            case 1: pwdchars = "1234567890";
                break;
            case 2: pwdchars = "abcdefghijklmnopqrstuvwxyz";
                break;
            case 3: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                break;
            case 4: pwdchars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                break;
            case 5: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                break;
            case 6: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!#$%^&*";
                break;
            default: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                break;
        }
        Random rnd = new Random();
        for (int i = 0; i < pwdlen; i++)
        {
            iRandNum = rnd.Next(pwdchars.Length);
            tmpstr += pwdchars[iRandNum];
        }
        return tmpstr;
    }
 怎么打印出来的都是一样的呢?只有刷新页面才会改变。

解决方案 »

  1.   

    这个随机数再每次调用make函数的时候怎么会生成的一模一样呢?
      

  2.   

    修改如下,即可            for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(Make(3, 8,i));
                }
                Console.ReadKey();        public static string Make(int kind, int pwdlen,int seed)
            {
                string tmpstr = "", pwdchars = "";
                int iRandNum;
                switch (kind)
                {
                    case 1: pwdchars = "1234567890";
                        break;
                    case 2: pwdchars = "abcdefghijklmnopqrstuvwxyz";
                        break;
                    case 3: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                        break;
                    case 4: pwdchars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                        break;
                    case 5: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                        break;
                    case 6: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!#$%^&*";
                        break;
                    default: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                        break;
                }
                Random rnd = new Random(seed);
                for (int i = 0; i < pwdlen; i++)
                {
                    iRandNum = rnd.Next(pwdchars.Length);
                    tmpstr += pwdchars[iRandNum];
                }
                return tmpstr;
            }
      

  3.   

    像我在3樓的代碼這樣,如果你每次給random類的種子不一樣,就可以確保不會重復。
      

  4.   

    for (int i = 1; i < 7; i++)
            {
                Response.Write(Make(i,8)+"</br>");
            } public static string Make(int kind, int pwdlen)
        {
            string tmpstr = "", pwdchars = "";
            int iRandNum;
            switch ( kind )
            {
                case 1: pwdchars = "1234567890";
                    break;
                case 2: pwdchars = "abcdefghijklmnopqrstuvwxyz";
                    break;
                case 3: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                    break;
                case 4: pwdchars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    break;
                case 5: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    break;
                case 6: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!#$%^&*";
                    break;
                default: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                    break;
            }
            Random rnd = new Random(pwdchars.Length);
            for (int i = 0; i < pwdlen; i++)
            {
                iRandNum = rnd.Next(pwdchars.Length);
                tmpstr += pwdchars[iRandNum];
            }
            return tmpstr;
        }
      

  5.   

    for (int i = 0; i < 10; i++)
    {
        Response.Write(Make(3,8)+"</br>");
    }Random rnd = new Random(); 是在循环中创建的,不会真正的随机。
    应该把rnd放在循环外创建。或者Random rnd = new Random((int)DateTime.Now.Ticks); 
      

  6.   

    比較保險的方法是,使用Environment.TickCount作為種子數,重復的可能性更小               Random rnd = new Random(Environment.TickCount - seed);
      

  7.   

    static Random rnd = new Random();        public static string Make(int kind, int pwdlen)
            {
                string tmpstr = "", pwdchars = "";
                int iRandNum;
                switch (kind)
                {
                    case 1: pwdchars = "1234567890";
                        break;
                    case 2: pwdchars = "abcdefghijklmnopqrstuvwxyz";
                        break;
                    case 3: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                        break;
                    case 4: pwdchars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                        break;
                    case 5: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                        break;
                    case 6: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!#$%^&*";
                        break;
                    default: pwdchars = "1234567890abcdefghijklmnopqrstuvwxyz";
                        break;
                }            for (int i = 0; i < pwdlen; i++)
                {
                    iRandNum = rnd.Next(pwdchars.Length);
                    tmpstr += pwdchars[iRandNum];
                }
                return tmpstr;
    在外部声明rnd即可 Random的无参构造函数取系统当前时间做为seed, 如果程序足够快, 每次的seed是相同的, 生成的随机也就相同
      

  8.   

    增加一个与Make方法同级别的静态成员。在Make方法中直接使用。
    像8楼那样
    那个成员的名称可以起得好认一些。