博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随机生成密码
阅读量:7038 次
发布时间:2019-06-28

本文共 5200 字,大约阅读时间需要 17 分钟。

要求:

1、总长8位;

2、至少一个大写字母;

3、至少一个小写字母;

4、至少一个数字(0~9);

5、至少一个特殊字符;

 

using System;

using System.Collections.Generic;

using System.Text;

 

/****************************************************

 * Author:quietwalk

 * Date:2011-12-02

 * Fuction:Generate a random password that consists of mixed case (at least one upper case and at least one lower case),

 * at least one special character( Symbol) ,

 * and at least one numeric, and eight characters long.

 * **************************************************/

 

namespace UsefulClass

{

    public class PasswordGenerator

    {

        //

        public string GeneratePassowrd()

        {

            long tick = DateTime.Now.Ticks;

            Random rdm = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));

 

            List<int> lsOrder = GetOrder();

 

            int maxNumber = 5;

            int iRemain = 4;

            int iCurrentLength = 0;

            int number = 0;

 

            List<int> lsResult = new List<int>();

 

            for (int i = 0; i < 4; i++)

            {

                int type = lsOrder[i];//order of U,L,S,N

 

                maxNumber = 8 - iCurrentLength - iRemain + 1;// 此次最多能取的个数 = 总长-已经取的长度-取的次数

                if (i == 3)//最后一次全取

                {

                    number = maxNumber;

                }

                else

                {

                    number = rdm.Next(1, maxNumber);//此次实际要取的个数

                    iCurrentLength += number;//目前串的实际长度

                    iRemain = 4 - (i + 1);//剩余可取数

                }

 

                List<int> lsTemp = new List<int>();

                switch (type)

                {

                    case 1://Uper Case

                        lsTemp = GetSomeNumber('U', number);

                        break;

                    case 2://Lower Case

                        lsTemp = GetSomeNumber('L', number);

                        break;

                    case 3://Special Character

                        lsTemp = GetSomeNumber('S', number);

                        break;

                    case 4://Numeric

                        lsTemp = GetSomeNumber('N', number);

                        break;

                }

                foreach (int value in lsTemp)

                {

                    lsResult.Add(value);

                }

            }//for

 

            #region Re-Order

 

            long tick2 = DateTime.Now.Ticks;

            Random random = new Random((int)(tick2 & 0xffffffffL) | (int)(tick2 >> 32));

 

            //   Random random = new Random();

            int indexTemp = -1;

            List<int> mixOrder = new List<int>();

            for (int i = lsResult.Count - 1; i >= 0; i--)

            {

                if (i != 0)

                {

                    indexTemp = random.Next(i + 1);

                }

                else

                {

                    indexTemp = 0;

                }

                mixOrder.Add(lsResult[indexTemp]);

                lsResult.RemoveAt(indexTemp);

            }

            #endregion Re-Order

            string strResult = string.Empty;

            foreach (int value in mixOrder)

            {

                strResult += Convert.ToChar(value);

            }

            return strResult;

        }

 

        private List<int> GetSomeNumber(char type, int number)

        {

            List<int> lsResult = new List<int>();

            long tick = DateTime.Now.Ticks;

            Random random = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));

 

            if (type == 'U')//Upper case

            {

                #region Upper case

 

                //List<int> lsUpperCase = new List<int>();

                //for (int i = 65; i <= 90; i++)

                //{

                //    lsUpperCase.Add(i);

                //}

                // Random random = new Random();

 

                int iStart = 65;//A

                int iEnd = 90;//Z

                for (int j = 0; j < number; j++)

                {

                    int iResult = random.Next(iStart, iEnd + 1);

                    lsResult.Add(iResult);

                }

 

                #endregion

            }

            else if (type == 'L')//Lower case

            {

                #region Lower case

 

                //List<int> lsLowerCase = new List<int>();

                //for (int i = 97; i <= 122; i++)

                //{

                //    lsLowerCase.Add(i);

                //}

 

                int iStart = 97;//a

                int iEnd = 122;//z

                for (int j = 0; j < number; j++)

                {

                    int iResult = random.Next(iStart, iEnd + 1);

                    lsResult.Add(iResult);

                }

 

                #endregion

            }

            else if (type == 'N')//Number

            {

                #region Number

 

                //List<int> lsNumber = new List<int>();

                //for (int i = 48; i <= 57; i++)

                //{

               //    lsNumber.Add(i);

                //}

 

                int iStart = 48;//0

                int iEnd = 57;//9

                for (int j = 0; j < number; j++)

                {

                    int iResult = random.Next(iStart, iEnd + 1);

                    lsResult.Add(iResult);

                }

 

                #endregion

            }

            else if (type == 'S')//Special characters

            {

                #region Sepcial Character

 

                #region initialize the list

 

                List<int> lsSpacialCahracters = new List<int>();

                lsSpacialCahracters.Add(33);//!

                lsSpacialCahracters.Add(34);//"

                lsSpacialCahracters.Add(35);//#

                lsSpacialCahracters.Add(36);//$

                lsSpacialCahracters.Add(37);//%

                lsSpacialCahracters.Add(38);//&

                lsSpacialCahracters.Add(39);//,

                lsSpacialCahracters.Add(40);//(

                lsSpacialCahracters.Add(41);//)

                lsSpacialCahracters.Add(42);//*

                lsSpacialCahracters.Add(43);//+

                lsSpacialCahracters.Add(44);//,

                lsSpacialCahracters.Add(45);//-

                lsSpacialCahracters.Add(46);//.

                lsSpacialCahracters.Add(47);///

                lsSpacialCahracters.Add(58);//:

                lsSpacialCahracters.Add(59);//;

                lsSpacialCahracters.Add(60);//<

                lsSpacialCahracters.Add(61);//=

                lsSpacialCahracters.Add(62);//>

                lsSpacialCahracters.Add(63);//?

                lsSpacialCahracters.Add(64);//@

                lsSpacialCahracters.Add(91);//[

                lsSpacialCahracters.Add(92);//\

                lsSpacialCahracters.Add(93);//]

                lsSpacialCahracters.Add(94);//^

                lsSpacialCahracters.Add(95);//_

                lsSpacialCahracters.Add(96);//¡é

                lsSpacialCahracters.Add(123);//{

                lsSpacialCahracters.Add(124);//|

                lsSpacialCahracters.Add(125);//}

                lsSpacialCahracters.Add(126);//~

 

                #endregion initialize the list

 

                int iTotalCount = lsSpacialCahracters.Count - 1;

                //Random rdm = new Random();

                for (int i = 0; i < number; i++)

                {

                    int index = random.Next(iTotalCount + 1);

 

                    lsResult.Add(lsSpacialCahracters[index]);

                }

 

                #endregion Sepcial Character

            }

 

            return lsResult;

        }

 

        private List<int> GetOrder()

        {

            List<int> intList = new List<int>();

            intList.Add(1);//upper case

            intList.Add(2);//lower case

            intList.Add(3);//special character

            intList.Add(4);//numeric

 

            Random random = new Random();

            int index = -1;

            List<int> lsOrder = new List<int>();

 

            for (int i = intList.Count - 1; i >= 0; i--)

            {

                if (i != 0)

                {

                    index = random.Next(i + 1);

                }

                else

                {

                    index = 0;

                }

                // strNumber += intList[index].ToString();

                lsOrder.Add(intList[index]);

                intList.RemoveAt(index);

            }

            return lsOrder;

        }

 

    }

}

 

转载地址:http://dtnal.baihongyu.com/

你可能感兴趣的文章
【JavaScript】快速入门
查看>>
【JavaScript】函数
查看>>
POJ 1753 Flip Game (递归枚举)
查看>>
关于ubuntu
查看>>
HTTP2.0
查看>>
Lintcode: Subarray Sum 解题报告
查看>>
C#防止WebBrowser在新窗口中打开链接页面
查看>>
php.ini修改php上传文件大小限制(转)
查看>>
office2003 下载地址 及密码
查看>>
/etc/vim/vimrc的一个的配置
查看>>
浏览器中关于事件的那点事儿(转)
查看>>
c#Lamdba表达式与托付
查看>>
VC皮肤库SkinSharp 1.0.6.6的使用
查看>>
php上传图片到server
查看>>
如何对 GIT 分支进行规划?
查看>>
说说非托管资源的回收
查看>>
虚拟机安装麒麟3.2时报unkown filesystem,you need to load the linux kernel first
查看>>
Node.js模块封装及使用
查看>>
java selenium (十) 操作浏览器
查看>>
检测光纤的同心性
查看>>