C#生成用户密码

时间:2022-09-09 16:05:55
如果用户的密码丢失了,网站通常生成一个新的密码发到他的邮箱。我试着写了一个,请各位批评指正!

输入的参数是:level复杂程度,length密码长度。

其中密码复杂程度分为6级:0数字,1小写字母,2数字加小写字母,3数字加大小写字母,4加特殊字符,5更多特殊字符。

在一个Winform里放置一个按钮,三个文本框(一个为显示结果,两个为输入参数)。

        private void button1_Click(object sender, EventArgs e)
        {
            int level =Convert.ToInt32(this.textBox2.Text);
            int length = Convert.ToInt32(this.textBox3.Text);
            this.textBox1.Text = GeneratePWD(level, length);
        }
        /// <summary>
        /// Generate password for new user
        /// </summary>
        /// <param name="level">0 = digits only</param>
        /// <param name="level">1 = lowercase alphabets only</param>
        /// <param name="level">2 = num+lowercase</param>
        /// <param name="level">3 = num+lowercase+uppercase</param>
        /// <param name="level">4 = num+lowercase+uppercase+special characters(!@#$%&)</param>
        /// <param name="level">5 = more special characters</param>
        /// <param name="length">Length of password: from 3 to 12</param>
        /// <returns></returns>
        private string GeneratePWD(int level, int length)
        {
            int beginPosition = 0;
            int endPosition = 100;

            if (length < 3 || length > 12) length = 8;
            switch (level)
            {
                case 0:
                    endPosition = 37;
                    break;
                case 1:
                    beginPosition = 38;
                    endPosition = 63;
                    break;
                case 2:
                    endPosition = 63;
                    break;
                case 3:
                    endPosition = 89;
                    break;
                case 4:
                    endPosition = 100;
                    break;
                default:
                    endPosition = 109;
                    break;
            }
            char[] characters ={'0','0','1','1','1','1','2','2','2','2','3','3','3','3','4','4','4','4','5','5','5','5','6','6','6','6','7','7','7','7','8','8','8','8','9','9','9','9', //37
                              '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',//63
                              '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',//89
                              '!','!','@','@','#','#','$','$','%','%','&',//100
                              '^','~','+','-','*','<','>','?','/'};//109

            string result = "";
            Random rnd = new Random();
            for (int i = 0; i <length; i++) 
            {
                int str = rnd.Next(beginPosition,endPosition+1);
                result += characters[str];
            }
            return result;
        }
    }

看msdn上直接把随机数存入数组,也许更方便:
http://msdn.microsoft.com/en-us/library/system.random.aspx

13 个解决方案

#1


Guid.NewGuid生成随机密码

#2


学习………………

#3


我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...

#4


引用 3 楼 karascanvas 的回复:
我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...


up

#5


随机生成一个,有必要整得这么麻烦吗?用户反正需要自己修改

#6


引用 1 楼 q107770540 的回复:
Guid.NewGuid生成随机密码

+1 还不如这样痛快

#7


引用 3 楼 karascanvas 的回复:
我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...


++
你凭什么改我密码啊,我忘记密码你就可以改?

还是这个方法对

#8


引用 1 楼 q107770540 的回复:
Guid.NewGuid生成随机密码

引用 3 楼 karascanvas 的回复:
我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...


看你自己是怎么考虑的。

#9


你写得太复杂了,Guid.NewGuid生成随机的,或是根据当前时间获取MD5码,都不失为好方法:System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(DateTime.Now.ToString(), "MD5");
这会返回一个32位的字符串,根据长度自己来截取就行了.

#10


Guid.NewGuid生成随机密码

#11


楼主的代码写的太夸张了

#12


一个小问题也弄这么复杂....

#13


多谢各位指教,受益匪浅!

#1


Guid.NewGuid生成随机密码

#2


学习………………

#3


我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...

#4


引用 3 楼 karascanvas 的回复:
我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...


up

#5


随机生成一个,有必要整得这么麻烦吗?用户反正需要自己修改

#6


引用 1 楼 q107770540 的回复:
Guid.NewGuid生成随机密码

+1 还不如这样痛快

#7


引用 3 楼 karascanvas 的回复:
我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...


++
你凭什么改我密码啊,我忘记密码你就可以改?

还是这个方法对

#8


引用 1 楼 q107770540 的回复:
Guid.NewGuid生成随机密码

引用 3 楼 karascanvas 的回复:
我觉得,应该生成一个重置密码的链接,用户进邮箱点链接以后可以修改密码,而不是直接改密码...


看你自己是怎么考虑的。

#9


你写得太复杂了,Guid.NewGuid生成随机的,或是根据当前时间获取MD5码,都不失为好方法:System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(DateTime.Now.ToString(), "MD5");
这会返回一个32位的字符串,根据长度自己来截取就行了.

#10


Guid.NewGuid生成随机密码

#11


楼主的代码写的太夸张了

#12


一个小问题也弄这么复杂....

#13


多谢各位指教,受益匪浅!