Я пытаюсь построить базовый генератор случайных паролей c в форме Windows. У меня есть список слов (все строчные), четыре из которых выбираются случайным образом. Каждое слово передается в функцию для случайного изменения регистра (заглавные буквы первого символа, заглавные буквы всего слова или просто возвращение строки в нижнем регистре), а затем добавляются в другой список следующим образом:
var dictionary = new List<String> { "aaron", "abandoned", "aberdeen" etc... };
int index;
index = random.Next(dictionary.Count);
string one = dictionary[index];
one = randomCase(one);
pwarray.Add(one);
Этот код затем дублируется для строк two
, three
и four
. Моя функция рандомизировать случай, когда он не причудливый, такова:
private string randomCase (string word)
{
string changed;
Random r = new Random();
int n = r.Next(1, 29);
// Output number to check it's not the same each time
MessageBox.Show(n.ToString());
if (n >= 1 || n <= 9)
{
// First letter capatalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
return changed;
}
else if (n >= 10 || n <= 19)
{
// Word capitalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
return changed;
}
else if (n >= 20 || n <= 29)
{
// Word left as lower case
return word;
}
return null;
}
Я добавил окна вывода сообщений, чтобы показать, что случайное число n
помогает при устранении неполадок. Когда я запускаю приложение, я получаю разные числа из моей функции randomCase
для n
:
4 - заглавная буква первого символа
17 - заглавная буква слова
20 - буква в нижнем регистре
24 - слово осталось в нижнем регистре
Однако все четыре слова имеют заглавную первую букву:
:
I Я сгенерировал много паролей, и они всегда выглядят одинаково - только первая буква с заглавной буквы. Кто-нибудь может предложить какие-либо предложения?