Beschreibung: Zufallsgenerator - Teilmenge

Erstellt am 21.12.2016 | Zuletzt geändert am 21.12.2016

Kurze Beschreibung

In diesen Zufallsgenerator können verschiedene Namen eingegeben werden, wovon anschließend eine bestimmte Teilmenge zufällig ausgewählt wird.

Was ist Zufall?

Als Zufall bezeichnet man ein Ereignis, für das es keine kausale Erklärung gibt. Das bedeutet, dass das Ergebnis eines Zufallsgenerators nicht vorhersehbar bzw. berechenbar sein darf. Dies widerspricht jedoch den Gesetzmäßigkeiten eines jeden Computers, was im Umkehrschluss bedeutet, dass ein Computer ohne weitere Peripherie keine absolut zufälligen Zahlen erzeugen kann. Man spricht in diesem Fall von Pseudo-Zufallszahlen. Generell lässt sich darüber philosophieren, ab wann man tatsächlich von Zufall sprechen kann.

Wie werden die Namen ausgewählt?

Prinzipiell werden in diesem Generator zwei verschiedene Mechanismen zur Erzeugung von Pseudo-Zufallszahlen eingesetzt.

Zufallsgenerator 1 für Binärstring

Der erste Mechanismus dient rein dazu, den Binärstring im Hintergrund zu generieren. Einerseits dient dieser zur besseren Optik und andererseits kann hierdurch vom Nutzer sichergestellt werden, dass auch tatsächlich ein neuer Zufallswert erzeugt worden ist. Für die Erzeugung des Binärstrings werden die PHP-Funktionen mt_rand() und decbin() eingesetzt. Die erste Funktion erzeugt die eigentlich Zufallszahl und die zweite dient zur Konvertierung der Dezimalzahl in eine Binärzahl. Prinzipiell wird folgender Algorithmus angewendet:

1
2
$random_string = "";
while(strlen($random_string) < GEWÜNSCHTE_LÄNGE) $random_string .= decbin(mt_rand(ZAHL1, ZAHL2));

Zufallsgenerator 2 für Auswahl der Namen

Der vorherige Zufallsgenerator erzeugt einigermaßen gute Zufallszahlen, welche jedoch noch verbesserungsfähig sind. Für das Auswählen der Namen wird deshalb die Funktion random_int() verwendet, die kryptographisch sichere Pseudo-Zufallszahlen generiert:

1
2
3
4
5
6
7
8
9
10
11
// Die Variable $namen enthält alle Namen

// Auswählen der Namen
for($i = 1; $i <= $anzahl_namen; $i++) {
	
	$index 		= random_int(0, count($namen)-1);
	$zufallsnamen[] = $namen[$index];
	unset($namen[$index]);			// Eintrag löschen
	$namen 		= array_values($namen);	// Reset indexes
	
}
Teile diesen Beitrag
Anzeige