Ste*_*vds 1 c# random passwords
生成随机密码很简单.但是生成批次更加困难.
public static string getRandomPassword(int letters, int getallen) {
//int letters = 8;
//int getallen = 5;
char[] letterdeel = new char[letters];
int minGetal = (int)Math.Pow(10, getallen - 1);
int maxGetal = (int)Math.Pow(10, getallen);
string password;
Random r = new Random();
int test = (int)(DateTime.Now.Ticks);
for (int i = 0; i < letters; i++) {
r = new Random((int)(DateTime.Now.Ticks) + i);
bool capital = r.Next(2) == 0 ? true : false;
if (capital) {
letterdeel[i] = (char)r.Next(65, 91);
} else {
letterdeel[i] = (char)r.Next(97, 123);
}
}
password = new string(letterdeel);
password += r.Next(minGetal, maxGetal);
return password;
}
Run Code Online (Sandbox Code Playgroud)
这是我的方法,密码应该是某种字母数字格式.这工作正常,但是如果我有一个for
循环从这个方法中提取100个密码,在我的数组中我有5-8个相同的密码,然后再次5-8相同的密码.
我知道为什么会这样,因为它依赖于随机功能和时钟,但我该如何解决这个问题呢?
移动Random r
的方法之外,如果你重复调用它.您将在相同的相对时间范围内多次击中它,因此您将生成相同的种子.你也想摆脱下面的界限.这是不必要的,并且(再次)具有DateTime的性质.现在,您将继续生成相同的"随机"数字序列.
r = new Random((int)(DateTime.Now.Ticks) + i);
Run Code Online (Sandbox Code Playgroud)