生成密码

来源:互联网 发布:淘宝客成交有多少佣金 编辑:程序博客网 时间:2024/04/29 23:59
using System;namespace LBC.RandomString{    /// <summary>    /// 可以生成由数字和字母组成,且字符都不相同的密码字符的类    /// </summary>    public class RandomString : ICreateString    {        /// <summary>        /// 组成密码的字符        /// </summary>        string Chars = "0987654321qwertyuiopasdfghjklzxcvbnmMNBVCXZASDFGHJKLQWERTYUIOP";        #region ICreateString 成员        /// <summary>        /// 生成密码,有数字和字母组成,且字符都不相同        /// </summary>        /// <param name="Length">生成密码长度</param>        /// <returns></returns>        string ICreateString.CreateString(int Length)        {            if (Length >= Chars.Length) throw new ArgumentException("Length要必须小于50");            //是否完成            bool IsDone = false;            string password = string.Empty;//返回的密码            Random ran = new Random((int)DateTime.Now.Ticks);            do            {                int Start = 0;//开始                int End = Chars.Length;//结束                password = string.Empty;                int CharCount = 0;//字符数量,用来验证密码强度                int NumberCount = 0;//数字数量,用来验证密码强度                for (int i = 0; i < Length; i++)                {                    int index = ran.Next(Start, End);//获取字符索引                    //获取选择的区域,如果上次在前半部分则下次在后半部分                    if (index >= Chars.Length/2)                    {                        Start = 0;                        End = Chars.Length / 2;                    }                    else                    {                        Start = Chars.Length / 2;                        End = Chars.Length;                    }                    char ch = Chars[index];//获取指定字符                    int Count = 0;//字符出现的次数,只能出现一次                    for (int j = 0; j < password.Length; j++)                    {                        if (password[j] == ch)                        {                            Count++;                            break;                        }                    }                    if (Count > 0)//如果有出现过,循环变量递减,即重新获取字符                    {                        --i;                    }                    else//否则添加到密码字符中                    {                        password += ch.ToString();                        //判断数字出现的次数                        if (ch <= '9' && ch >= '0')                        {                            NumberCount++;                        }                        //判断字母出现的次数                        else if (ch <= 'z' && ch >= 'A')                        {                            CharCount++;                        }                    }                }                IsDone = (CharCount >= 2 && NumberCount >= 2);//如果密码字符中字母和数字都出现两次或两次以上则完成            }            while (!IsDone);            return password;        }        #endregion        /// <summary>        /// 生成密码,有数字和字母组成,密码强度低,但是生成速度快        ///要生成密码强度高的字符串请使用ICreateString.CreateString方法        /// </summary>        /// <param name="Length">生成密码长度</param>        /// <returns></returns>        public string CreateString(int Length)        {            string str_Number = string.Empty;            Random theRandomNumber = new Random((int)DateTime.Now.Ticks);            for (int int_index = 0; int_index < Length; int_index++)            {                str_Number += Chars[theRandomNumber.Next(0, Chars.Length)].ToString();            }            return str_Number;        }    }}
using System;namespace LBC.RandomString{    /// <summary>    /// IMackPassword接口,提供一个产生随机字符串的方法    /// </summary>    public interface ICreateString    {        /// <summary>        /// 产生随机字符串        /// </summary>        /// <param name="Length">随机字符串长度</param>        /// <returns></returns>        string CreateString(int Length);    }}
原创粉丝点击