怎样产生不重复的随机数,密码

           有的时候内部网站要对用户过进行批量初始化密码,在批量产生密码的时候,由以随机函数是以时间作为种子(ms级),大量产生的密码过程1ms内会产生相同的密码10个左右,(如果us级的话重复的问题可能就可以解决了,但好像个人计算机好像不行,没有这个选项:),改造了一下,用用户名的字符串及时间的积作为种子,这样产生的随机密码就不会重复了,而且可以自由选择密码类型。

    // 随机生成密码
     public   static   string  createRandomPassWord( bool  isNumber,  bool  isLetter,  int  length, string  seed)
    
{
        
string passWord = "";
        
int randomNumber = 0;
        
char code;
        
int i = 0;
        
int seedInt = 0;
        
int pip = Convert.ToInt32(DateTime.Now.Millisecond.ToString());
        
if (seed.Trim().Length > 0)
        
{
            
//将字符串转化为整型
            int seedLength = seed.Length;
            
char[] seedChar = new char[seedLength];
            
            
for (i = 0; i < seedLength; i++)
            
{
                seedChar[i] 
= Convert.ToChar(seed.Substring(i, 1));
                seedInt 
= seedInt + Convert.ToInt32(seedChar[i]);
            }

            pip 
= seedInt * pip;
        }

       
        System.Random random 
= new Random(pip);

        
//只生成数字型密码
        if (isNumber == true && isLetter == false)
        
{
            
for (i = 0; i < length; i++)
            
{
                randomNumber 
= random.Next();
                code 
= (char)('0' + (char)(randomNumber % 10));
                passWord 
= passWord + code.ToString();
            }

        }


        
//只生成字母型密码
        else if (isNumber == false && isLetter == true)
        
{
            
for (i = 0; i < length; i++)
            
{
                randomNumber 
= random.Next();
                
if (randomNumber % 2 == 0)
                
{
                    code 
= (char)('a' + (char)(randomNumber % 26));
                    passWord 
= passWord + code.ToString();
                }

                
else
                
{
                    code 
= (char)('A' + (char)(randomNumber % 26));
                    passWord 
= passWord + code.ToString();
                }

            }

        }


        
//生成数字和字母混合型密码
        else if (isNumber == true && isLetter == true)
        
{
            
for (i = 0; i < length; i++)
            
{
                randomNumber 
= random.Next();
                
if (randomNumber % 3 == 0)
                
{
                    code 
= (char)('0' + (char)(randomNumber % 10));
                    passWord 
= passWord + code.ToString();
                }

                
else if (randomNumber % 3 == 1)
                
{
                    code 
= (char)('a' + (char)(randomNumber % 26));
                    passWord 
= passWord + code.ToString();
                }

                
else
                
{
                    code 
= (char)('A' + (char)(randomNumber % 26));
                    passWord 
= passWord + code.ToString();
                }

            }

        }

        
return passWord;

    }


}

 产生随机密码还有一种思路,产生密码数组,每一个密码以上一个密码作为种子,这样就不会重复了,根据需要可产生任意多外密码了,也不会重复了。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值