web-dev-qa-db-fra.com

Comment faire une chaîne aléatoire de chiffres et de lettres d'une longueur de 5?

Duplicata possible:
Est-ce un bon moyen de générer une chaîne de caractères aléatoires?
Comment puis-je générer des chaînes alphanumériques aléatoires à 8 caractères en C #?

C'est le code que j'ai jusqu'à présent.

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

MAIS il crée juste une chaîne aléatoire de 5 caractères. Je veux qu'il crée une chaîne de 5 caractères et entiers. Comment pourrais-je faire ça? Merci d'avance!

18
Ian Lundberg

Utilisez un tableau d'entrée pour tirer vos valeurs de:

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

Ou la solution (inévitable) de 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

Copie de la réponse de jon skeet ... 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

remplacer

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

par

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

Notez que votre code ne crée pas de chaînes aléatoires imprévisibles. En particulier, il n'y a que 2 milliards de résultats possibles, et si votre ordinateur redémarre souvent, certains sont beaucoup plus probables que d'autres.

Si vous voulez des chaînes aléatoires imprévisibles, vous devez utiliser RNGCryptoServiceProvider . Vous pouvez affiner un exemple sur https://stackoverflow.com/a/1344255/445517 , il vous suffit d'ajouter les tirets.

0
CodesInChaos