как сделать кейген, который пишет "-" каждые четыре буквы в C # - PullRequest
4 голосов
/ 04 августа 2011

У меня быстрый вопрос. У меня есть кейген для генерации случайных паролей для моего приложения. Он генерирует заглавные буквы и цифры, но я хочу, чтобы это было похоже на некоторые программы, которые форматируют свой код следующим образом xxxx-xxxx-xxxx. пока мой код такой

Random random = new Random(0);

private void button1_Click(object sender, EventArgs e)
{
    textBox1.Text = getrandomcode();
}

public string getrandomcode()
{
    char[] tokens = {'0', '1', '2', '3', '4', '5', '7', '8', '9', 'A', 'B', 'C', 
        'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
        'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

    char[] codeArray = new char[24];

    for (int i = 0; i < 24; i++)
    {
        int index = random.Next(tokens.Length - 1);
        codeArray[i] = tokens[index];
    }

    return new String(codeArray);
}

Это что-то простое, не сложное, поэтому я надеюсь, что есть способ реализовать "-" в этом коде.

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 04 августа 2011

Включите это в свой цикл for:

if (i % 5 == 4)
{
  codeArray[i] = '-';
} 
else 
{
    int index = random.Next(tokens.Length - 1);
    codeArray[i] = tokens[index];
}
3 голосов
/ 04 августа 2011

Или, если вы хотите использовать регулярное выражение, попробуйте это:

textBox1.Text = Regex.Replace(getrandomcode(), @"(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})", "$1-$2-$3-$4-$5")
0 голосов
/ 04 августа 2011

Попробуйте это:

for (int i = 0; i < 24; i++)
{
    if (i % 5 == 4) {
        codeArray[i] = '-';
    } else {
        int index = random.Next(tokens.Length - 1);
        codeArray[i] = tokens[index];
    }
}

Если вы хотите, чтобы в вашем пароле было 24 не-тире, измените 24 на 29.

Но я также должен сказать вам, что при использованиислучайная функция с нулем 0 не очень безопасный способ генерации паролей.Если приложение остановлено и перезапущено, оно сгенерирует тот же набор паролей во второй раз, что и в первый раз.Лучше не передавать аргумент инициализации, в этом случае он будет использовать время для заполнения генератора случайных чисел.

Если эти пароли будут использоваться для чего-то важного или чего-то, к чему может получить доступ весь мир (или оба), тогда даже это не достаточно случайно, чтобы быть в безопасности.Вы должны взглянуть на криптографические генераторы случайных чисел, такие как System.Security.Cryptography.RNGCryptoServiceProvider

...