有的时候内部网站要对用户过进行批量初始化密码,在批量产生密码的时候,由以随机函数是以时间作为种子(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;
}
}
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;
}
}
产生随机密码还有一种思路,产生密码数组,每一个密码以上一个密码作为种子,这样就不会重复了,根据需要可产生任意多外密码了,也不会重复了。。。。