1290 Stimmen

Wie kann ich zufällige alphanumerische Zeichenfolgen erzeugen?

Wie kann ich eine zufällige 8 Zeichen alphanumerische Zeichenfolge in C# generieren?

2 Stimmen

Welcher Rest

8 Stimmen

O s o s

2 Stimmen

Es wäre schön, wenn die Sprachlokalisierung in diese Frage einbezogen würde. Vor allem, wenn Ihre Benutzeroberfläche für Chinesisch oder Bulgarisch geeignet sein soll!

2voto

w.b Punkte 10628

Eine Lösung ohne Verwendung von Random :

var chars = Enumerable.Repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 8);

var randomStr = new string(chars.SelectMany(str => str)
                                .OrderBy(c => Guid.NewGuid())
                                .Take(8).ToArray());

2voto

huyc Punkte 197

Hier ist eine Variante der Lösung von Eric J., d.h. kryptographisch einwandfrei, für WinRT (Windows Store App):

public static string GenerateRandomString(int length)
{
    var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    var result = new StringBuilder(length);
    for (int i = 0; i < length; ++i)
    {
        result.Append(CryptographicBuffer.GenerateRandomNumber() % chars.Length);
    }
    return result.ToString();
}

Wenn es auf die Leistung ankommt (vor allem, wenn die Länge hoch ist):

public static string GenerateRandomString(int length)
{
    var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    var result = new System.Text.StringBuilder(length);
    var bytes = CryptographicBuffer.GenerateRandom((uint)length * 4).ToArray();
    for (int i = 0; i < bytes.Length; i += 4)
    {
        result.Append(BitConverter.ToUInt32(bytes, i) % chars.Length);
    }
    return result.ToString();
}

2voto

Sagar Punkte 6323

Ich weiß, dass dies nicht der beste Weg ist. Aber Sie können dies versuchen.

string str = Path.GetRandomFileName(); //This method returns a random file name of 11 characters
str = str.Replace(".","");
Console.WriteLine("Random string: " + str);

1voto

sara Punkte 3311

Ich weiß nicht, wie kryptographisch fundiert dies ist, aber es ist bei weitem lesbarer und prägnanter als die komplizierteren Lösungen (imo), und es sollte "zufälliger" sein als System.Random -basierten Lösungen.

return alphabet
    .OrderBy(c => Guid.NewGuid())
    .Take(strLength)
    .Aggregate(
        new StringBuilder(),
        (builder, c) => builder.Append(c))
    .ToString();

Ich kann mich nicht entscheiden, ob ich diese oder die nächste Version "hübscher" finde, aber sie führen zu genau den gleichen Ergebnissen:

return new string(alphabet
    .OrderBy(o => Guid.NewGuid())
    .Take(strLength)
    .ToArray());

Zugegeben, es ist nicht auf Geschwindigkeit optimiert. Wenn Sie also unbedingt Millionen von zufälligen Zeichenfolgen pro Sekunde generieren müssen, sollten Sie eine andere Lösung wählen!

HINWEIS: Diese Lösung lässt keine Wiederholungen von Symbolen im Alphabet zu, und das Alphabet MUSS gleich groß oder größer als die Ausgabezeichenkette sein, so dass dieser Ansatz unter Umständen weniger wünschenswert ist.

1voto

Alexey B. Punkte 1056

Wenn Ihre Werte nicht völlig zufällig sind, sondern von etwas abhängen, können Sie einen md5- oder sha1-Hash dieses "Etwas" berechnen und ihn dann auf die gewünschte Länge kürzen.

Sie können auch eine Guid erzeugen und abschneiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X