2

文字と数字を含む X の長さのランダムな文字列を作成する方法。私の迅速な解決策は次のとおりです。

Guid.NewGuid().ToString("N").Substring(X);

他に良いアイデアはありますか?

4

3 に答える 3

2

GUIDはランダムではなく、一意です。ランダム性が必要な場所でそれらを使用している場合は、非常に間違ったことをしています。

ランダムデータ生成にはいくつかのオプションがありますが、ここでの問題は、それが何を意味するのかということです。サイコロを振る?状態の秘密を暗号化しますか?

于 2012-09-19T11:38:05.380 に答える
2

辞書キーに「ランダムな」文字列が必要な場合は、単純にGuid. それらは一意であり、キーイング辞書には十分すぎるほどです。


次のようなものはうまくいきますが、ごまかしを避けるためにランダムな範囲を制限する必要があります。

警告、コーディングして一度実行しました-それ以外はテストされていません。現在のソリューションに対するパフォーマンスは定量化されていません。また、この実装は、質問のコメントにリンクされている回答よりもはるかに冗長です。

    static void Main(string[] args)
    {
        Random r = new Random();

        int x = r.Next(1, 1000);

        char[] pool = new[] { '0', '1', '2', '3', '4', '5', '6', '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[] word = new char[x];

        for (int i = 0; i < x; i++)
        {
            // max value is not inclusive, so no -1 from length.
            int a = r.Next(pool.Length); 
            word[i] = pool[a];
        }

        Console.WriteLine(new string(word));
        Console.ReadLine();
    }

おそらく、ASCII コードを使用してこれを行うより良い方法がありますが、まぁ。

于 2012-09-19T11:41:35.070 に答える
1

私はかつて「ランダムな」パスワードジェネレーターを作成しましたが、このように見えました. 好きなように変更できます。おそらく、ここに linq 式を入れる余地があります。

public static string GeneratePassWord(bool useNumbers,bool useLetters, bool useUpperAndLowerCase, bool useSpecialCharacters, int passwordLength)
{
    Random randomNumber = new Random();
    List<char> chars = new List<char>();

    if (useNumbers) // Add numbers
    {
        for (int i = 0; i <= 9; i++)
        {
            chars.Add((char)(48 + i));
        }
    }

    if (useLetters) // Add letters
    {
        for (int i = 0; i <= 25; i++) // Small letters
        {
            chars.Add((char)(97 + i));
        }
        if (useUpperAndLowerCase)
        {
            for (int i = 0; i <= 25; i++) // Large letters
            {
                chars.Add((char)(65 + i));
            }
        }
    }

    if (useSpecialCharacters) // Add specials
    {
        chars.Add((char)'!');
        chars.Add((char)'#');
        chars.Add((char)'%');
        chars.Add((char)'&');
        chars.Add((char)'_');
        chars.Add((char)'.');
        chars.Add((char)'+');
        chars.Add((char)'@');
        chars.Add((char)'$');
    }

    // Generate random password from char
    if (chars.Count > 0)
    {
        StringBuilder newPass = new StringBuilder();
        for (int i = 0; i <= passwordLength; i++)
        {
            newPass.Append(chars[randomNumber.Next(chars.Count)]);
        }
        return newPass.ToString();
    }
    else
    {
        return string.Empty;
    }
}

ご覧のとおり、基本的には文字の List<> を作成し、必要な文字数ごとにリストからランダムに選択します。

于 2012-09-19T11:50:02.097 に答える