Die Klasse System.Random erzeugt Zufallszahlen leider auf der Basis von festgelegten Zahlenreihen. Identische Aufrufe ergeben (auch auf verschiedenen Rechnern) immer dieselben Zahlenreihen. Echte (leider nur Byte-) Zufallszahlen erzeugt allerdings eine RNGCryptoServiceProvider-Instanz.
// **********************************************
// Dies ist eines der 322 Rezepte aus dem
// C# 2005 Premium Codebook.
// Das Snippet wurde vom Autor mit freundlicher
// Genehmigung von Addison Wesley
// bei dotnet-snippets.de veröffentlicht.
// **********************************************
using System;
using System.Security.Cryptography;
/// <summary>
/// Erzeugt echte Zufallszahlen
/// </summary>
/// <param name="count">Anzahl der zu erzeugenden Zufallszahlen</param>
/// <param name="min">Die kleinste zu erzeugende Zahl</param>
/// <param name="max">Die größte zu erzeugende Zahl</param>
/// <returns>Gibt ein Array mit den erzeugten Zufallszahlen zurück</returns>
public static byte[] GetRandomNumbers(int count, byte min, byte max)
{
// Zufallszahlen erzeugen
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] numbers = new Byte[count];
csp.GetBytes(numbers);
// Die Zahlen umrechnen
double divisor = 256F / (max - min + 1);
if (min > 0 || max < 255)
{
for (int i = 0; i < count; i++)
{
numbers[i] = (byte)((numbers[i] / divisor) + min);
}
}
return numbers;
}
2 Kommentare zum Snippet