Как сделать случайную строку чисел и букв длиной 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/..., вам просто нужно добавить дефисы.