Как сделать случайную строку чисел и букв длиной 5?

Возможный дубликат:
Это хороший способ генерации строки случайных символов?
Как я могу генерировать случайные 8 символов, буквенно-цифровые строки в С#?

Это код, который у меня есть.

    private void button1_Click(object sender, EventArgs e)
    {
        string rand1 = RandomString(5);
        string rand2 = RandomString(5);
        string rand3 = RandomString(5);
        string rand4 = RandomString(5);
        string rand5 = RandomString(5);
        textBox1.Text = rand1 + "-" + rand2 + "-" + rand3 + "-" + rand4 + "-" + rand5;

    }
    private static Random random = new Random((int)DateTime.Now.Ticks);
    private string RandomString(int Size)
    {
        StringBuilder builder = new StringBuilder();
        char ch;
        for (int i = 0; i < Size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
            builder.Append(ch);
        }
        return builder.ToString();
    }

НО он просто создает случайную строку из 5 символов. Я хочу, чтобы он создал строку из 5 символов и целых чисел. Как мне это сделать? Заранее спасибо!

Ответы

Ответ 1

Используйте массив ввода, чтобы нарисовать ваши значения:

private static string RandomString(int length)
{
    const string pool = "abcdefghijklmnopqrstuvwxyz0123456789";
    var builder = new StringBuilder();

    for (var i = 0; i < length; i++)
    {
        var c = pool[Random.Next(0, pool.Length)];
        builder.Append(c);
    }

    return builder.ToString();
}

Или (неизбежное) решение Linq:

private static string RandomString(int length)
{
    const string pool = "abcdefghijklmnopqrstuvwxyz0123456789";
    var chars = Enumerable.Range(0, length)
        .Select(x => pool[Random.Next(0, pool.Length)]);
    return new string(chars.ToArray());
}

Ответ 2

Копирование из jon skeet answer... fooobar.com/questions/8539/...

Random rand = new Random();

public const string Alphabet = 
"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

public string GenerateString(int size)
{
    char[] chars = new char[size];
    for (int i=0; i < size; i++)
    {
        chars[i] = Alphabet[rand.Next(Alphabet.Length)];
    }
    return new string(chars);
}

Ответ 3

заменить

ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));

по

string chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ch=chars[random.Next(chars.Length)];

Обратите внимание, что ваш код не создает непредсказуемые случайные строки. В частности, есть только 2 миллиарда возможных результатов, и если ваш компьютер часто перезагружается, некоторые из них гораздо более вероятны, чем другие.

Если вы хотите непредсказуемые случайные строки, вы должны использовать RNGCryptoServiceProvider. Вы можете представить пример в fooobar.com/info/6756/..., вам просто нужно добавить дефисы.