Comment générer des nombres aléatoires en C#

Les nombres aléatoires sont largement utilisés dans les jeux numériques, l’échantillonnage statistique, la cryptographie, les calculs en physique statistique, l’analyse numérique, les communications radio et les jeux de casino comme la roulette, etc

Nous pouvons utiliser la classe Random pour générer des nombres aléatoires en C#.

Qu’est-ce que la classe C# Random?

C# Random la classe est un générateur de nombres pseudo-aléatoires, c’est-à-dire un algorithme qui génère une séquence de nombres répondant à certaines exigences statistiques en matière de caractère aléatoire.

Cette classe possède 5 méthodes : Next(), NextInt64(),NextBytes(), NextDouble() et NextSingle()

Selon le type de nombre, c’est-à-dire int,long etc, nous pouvons utiliser la méthode correspondante.

Parcourons les exemples pour mieux comprendre

Générer des nombres entiers aléatoires en C#

Étapes à suivre pour générer un nombre entier aléatoire en C#

  1. Instanciez la classe de nombre aléatoire.
  2. Utilisez la méthode Random.Next() pour renvoyer un nombre entier aléatoire entre Int32.MinValue et Int32.MaxValue.

var randomInteger = new Random();

randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next(); 


/* OUTPUT : 
2027076668
1095111085
535874255
1973884472
430547700
*/

Générer un nombre entier aléatoire entre les valeurs minimum et maximum

Random.Next() possède une méthode surchargée, qui accepte les valeurs minimum et maximum comme paramètres et génère un entier aléatoire entre les valeurs données.

Pour générer des nombres aléatoires entre 100 et 1000, utilisez le code suivant

Console.WriteLine("Five random integers between 100 and 1000");

for (int counter = 0; counter <= 4; counter++)
    Console.WriteLine("{0}", randomNumber.Next(100, 1000));

/* OUTPUT:
Five random integers between 100 and 1000
904
853
554
290
614
*/

Générer un nombre long aléatoire (Int64) en C#

Pour générer un nombre long aléatoire, c’est-à-dire Int64 en C#, utilisez la méthode Random.NextInt64() qui renvoie un nombre aléatoire Int64 entre Int64.MinValue et Int64.MaxValue.


var RandomInt64 = new Random();

RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64(); 


/* OUTPUT : 
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/

Générer un nombre long aléatoire (Int64) dans un intervalle donné

Tout comme Random.Next(), Random.NextInt64() possède une méthode surchargée, qui accepte une plage, c’est-à-dire les valeurs minimale et maximale, comme paramètres et renvoie un nombre aléatoire Int64 entre ces deux valeurs.

Pour générer des nombres aléatoires entre 100000 et 200000, utilisez le code suivant


var RandomInt64 = new Random();


Console.WriteLine("Five random integers between 100000 and 200000");

for (int counter = 0; counter <= 4; counter++)
    Console.WriteLine("{0}", RandomInt64.NextInt64(100000, 200000));

/* OUTPUT:
Five random long Int64 numbers between 100000 and 200000
144220
194475
185075
159433
136542
*/

Les numéros aléatoires générés ne sont pas complètement aléatoires car un algorithme mathématique est utilisé pour les sélectionner, mais ils sont suffisants pour la plupart des cas réels.

Éviter les doublons lors de la génération de nombres aléatoires

Si vous initialisez plus d’une classe new Random()

Vous risquez d’obtenir des nombres aléatoires en double. (Application multithread)

var randomOne = new Random();
var randomTwo = new Random(); // Don't do this

Il est donc préférable d’initialiser une seule instance de la classe Random() et de l’utiliser dans toute l’application.

//Function to generate unique random number using `Random()` class

private static readonly Random randomInstance = new Random();

public static int GenerateRandomNumber(int min, int max)
{
    lock(randomInstance) // synchronize
    {
        return randomInstance.Next(min, max);
    }
}

Si vous voulez générer des séries de nombres aléatoires, dans un environnement multithread, utilisez la méthode ci-dessus.

Utilisation de la cryptographie C# RandomNumberGenerator

Si vous souhaitez générer des nombres aléatoires vraiment uniques, vous pouvez utiliser la classe RandomNumberGenerator qui fait partie de la bibliothèque System.Security.Cryptography.

Cette classe génère un nombre aléatoire cryptographiquement sécurisé et convient à la création d’un mot de passe aléatoire.

var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);

Nous pouvons également passer une plage à la méthode RandomNumberGenerator.

var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);

Utilisation de la classe C# RNGCryptoServiceProvider

Cette classe est obsolète maintenant, n’utilisez pas cette méthode.

RNGCryptoServiceProvider implémente un générateur de nombres aléatoires (RNG) cryptographique en utilisant l’implémentation fournie par le fournisseur de services cryptographiques (CSP).

Utilisez le code ci-dessous pour créer un nombre aléatoire avec la classe C# RNGCryptoServiceProvider.

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
   byte[] randomNumber = new byte[4];//4 for int32
   rng.GetBytes(randomNumber);
   int value = BitConverter.ToInt32(randomNumber, 0);
}

Résumé

Dans ce tutoriel, nous avons appris différentes manières de générer des nombres aléatoires en C# avec des exemples simples.