web-dev-qa-db-ja.com

長さ5の数字と文字のランダムな文字列を作成する方法は?

可能性のある複製:
これはランダムな文字列を生成するのに良い方法ですか?
C#で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文字と整数の文字列を作成してほしい。どうすればいいですか?前もって感謝します!

18
Ian Lundberg

入力配列を使用して、以下から値を引き出します。

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());
}
43
BrokenGlass

ジョン・スキートの答えからコピーしています... https://stackoverflow.com/a/976674/67824

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);
}
19
Ohad Schneider

取り替える

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

沿って

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

コードは予測できないランダムな文字列を作成しないことに注意してください。特に、20億の結果しかありません。また、コンピューターを頻繁に再起動すると、一部の結果が他の結果よりもはるかに高くなります。

予測できないランダムな文字列が必要な場合は、 RNGCryptoServiceProvider を使用する必要があります。 https://stackoverflow.com/a/1344255/445517 で例を微調整できます。ハイフンを追加するだけです。

0
CodesInChaos