Comment générer des nombres aléatoires en C#
- Qu’est-ce que la classe
C# Random
? - Générer des nombres entiers aléatoires en C#
- Générer un nombre long aléatoire (Int64) en C#
- Éviter les doublons lors de la génération de nombres aléatoires
- Utilisation de la cryptographie
C# RandomNumberGenerator
- Utilisation de la classe
C# RNGCryptoServiceProvider
- Résumé
On this page
- Qu’est-ce que la classe
C# Random
? - Générer des nombres entiers aléatoires en C#
- Générer un nombre long aléatoire (Int64) en C#
- Éviter les doublons lors de la génération de nombres aléatoires
- Utilisation de la cryptographie
C# RandomNumberGenerator
- Utilisation de la classe
C# RNGCryptoServiceProvider
- Résumé
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#
- Instanciez la classe de nombre aléatoire.
- Utilisez la méthode
Random.Next()
pour renvoyer un nombre entier aléatoire entreInt32.MinValue
etInt32.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.