private static string GenerateRandomPassword(int passwordLength, int type)
{
const string allowedChars = "abcdefghijkmnopqrstuvwxyz";
const string allowedCharsWithCaps = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ";
const string allowedCharsWithCapsAndNumbers = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
const string allowedCharsWithCapsAndNumbersAndSymbols = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
char[] chars = new char[passwordLength];
Random rd = new Random();
string passwordCombinations;
switch (type)
{
case 1:
passwordCombinations = allowedChars;
break;
case 2:
passwordCombinations = allowedCharsWithCaps;
break;
case 3:
passwordCombinations = allowedCharsWithCapsAndNumbers;
break;
case 4:
passwordCombinations = allowedCharsWithCapsAndNumbersAndSymbols;
break;
default:
passwordCombinations = allowedChars;
break;
}
for (int i = 0; i < passwordLength; i++)
{
chars[i] = passwordCombinations[rd.Next(0, passwordCombinations.Length - 1)];
}
return new string(chars);
}
то есть я указал количество символов в строке 4 и тип allowedChars = "abcdefghijkmnopqrstuvwxyz"; программа сгенерировала максимально возможные комбинации без повторений и вышла из цикла.этих комбинаций, кстати, 390 625 штук. Math.Pow(alphabetLength, passwordLength)
private static HashSet<string> GenerateSomeRandomPasswords(int passwordCount, int passwordLength, int type)
{
HashSet<string> passwords = new HashSet<string>();
int addedPasswordCount = 0;
while (addedPasswordCount<passwordCount)
{
string freshPassword = GenerateRandomPassword(passwordLength, type);
if (passwords.Contains(freshPassword)==false)
{
passwords.Add(freshPassword);
addedPasswordCount++;
}
}
return passwords;
}
( проверка того, чтобы passwordCount не превышал разумные пределы — за вами )rd.Next(0, passwordCombinations.Length - 1)]
никогда не вернёт последний символ.Random rd = new Random();
использует Environment.TickCount в качестве seed-а. Если метод вызывается несколько раз в миллисекунду, он вернёт одинаковый результат. Вам нужно создать экземпляр класса Random один раз и передавать его в метод. А ещё лучше - использовать System.Security.Cryptography.RandomNumberGenerator.