有的時候內部網站要對使用者過進行批量初始化密碼,在批量產生密碼的時候,由以隨機函數是以時間作為種子(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();
}
}
}