Willekeurige getallen genereren

C#:
Willekeurige getallen genereren

Hoe:

De meest voorkomende manier om willekeurige getallen te genereren in C# is het gebruik van de System.Random klasse. Hier is een eenvoudig voorbeeld dat het gebruik demonstreert:

using System;

public class RandomNumberExample
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int randomNumber = random.Next(1, 100); // Genereert een getal tussen 1 en 99
        Console.WriteLine($"Willekeurig getal: {randomNumber}");
    }
}

Dit zal een willekeurig getal uitvoeren zoals:

Willekeurig getal: 42

Voor het genereren van een willekeurig zwevendekommagetal tussen 0,0 en 1,0, kun je de NextDouble methode gebruiken:

double randomDouble = random.NextDouble();
Console.WriteLine($"Willekeurige dubbele: {randomDouble}");

Als je werkt aan een veiligheidsgevoelige applicatie die cryptografische willekeur vereist, is het beter om de RNGCryptoServiceProvider klasse te gebruiken die gevonden kan worden in System.Security.Cryptography:

using System;
using System.Security.Cryptography;

public class SecureRandomExample
{
    static void Main()
    {
        byte[] randomNumber = new byte[4]; // Creëert een 4-byte lang willekeurig getal
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            rng.GetBytes(randomNumber);
        }
        int value = BitConverter.ToInt32(randomNumber, 0);
        Console.WriteLine($"Cryptografisch veilig willekeurig getal: {value}");
    }
}

Diepgaande duik

Het genereren van willekeurige getallen in C# is in de loop der jaren geëvolueerd. Aanvankelijk was de System.Random klasse de gangbare methode voor het genereren van pseudo-willekeurige getallen. Het is pseudo-willekeurig omdat, gegeven een specifieke seedwaarde, het dezelfde reeks getallen zal produceren, wat nuttig kan zijn voor debugging of herhaalbaarheid van tests.

Hoewel voldoende voor basisbehoeften, is System.Random niet thread-safe en kan voorspelbare uitkomsten produceren, wat niet geschikt is voor op veiligheid-afhankelijke applicaties. Deze beperking leidde tot de introductie van de RNGCryptoServiceProvider voor cryptografische willekeur, die veiliger maar ook meer bronintensief is.

Een alternatief in .NET Core en .NET 5+ is de RandomNumberGenerator klasse in System.Security.Cryptography voor het veilig genereren van willekeurige getallen, bedoeld als een modernere en gebruiksvriendelijkere optie in vergelijking met RNGCryptoServiceProvider.

Elke methode voor het genereren van willekeurige getallen in C# heeft zijn plaats, afhankelijk van de vereisten van de applicatie. Voor de meeste toepassingen volstaat System.Random, maar voor diegenen die veilige, onvoorspelbare willekeurige getallen vereisen, bieden de cryptografische klassen een robuust alternatief.