mt_rand()
Die Funktion mt_rand() in PHP erzeugt eine zufällige Ganzzahl mit dem Mersenne-Twister-Algorithmus. Syntax, Parameter und sichere Alternativen.
Die Funktion mt_rand() in PHP erzeugt eine zufällige Ganzzahl mithilfe des Mersenne-Twister-Algorithmus. Diese Seite behandelt Syntax und Parameter, den Unterschied zur älteren rand(), das Seeden für reproduzierbare Ergebnisse sowie den richtigen Zeitpunkt, auf eine kryptografisch sichere Alternative zurückzugreifen.
Was die Funktion mt_rand() macht
mt_rand() gibt eine pseudozufällige Ganzzahl zurück. „Pseudozufällig" bedeutet, dass die Zahlen aus einem deterministischen Algorithmus stammen, der durch einen internen Zustand gesät wird – sie wirken zufällig, aber derselbe Seed erzeugt stets dieselbe Sequenz. Der verwendete Mersenne-Twister-Algorithmus liefert qualitativ hochwertigere und gleichmäßiger verteilte Zahlen als der libc-Generator hinter der älteren rand(), und er hat eine extrem lange Periode (er wiederholt sich erst nach 2^19937 − 1 Werten).
Beachten Sie, dass mt_rand() nicht kryptografisch sicher ist: Wenn der interne Zustand bekannt oder rekonstruierbar ist, können zukünftige Werte vorhergesagt werden. Für Passwörter, Tokens, Salts oder alles sicherheitsrelevante sollten Sie stattdessen random_int() verwenden.
Syntax
mt_rand(): int
mt_rand(int $min, int $max): int| Parameter | Beschreibung |
|---|---|
$min | Optional. Der kleinste mögliche Rückgabewert (einschließlich). Standardwert: 0. |
$max | Optional. Der größte mögliche Rückgabewert (einschließlich). Standardwert: mt_getrandmax(). |
Rückgabewert: eine zufällige Ganzzahl zwischen $min und $max (einschließlich), oder zwischen 0 und mt_getrandmax(), wenn die Funktion ohne Argumente aufgerufen wird. Wenn $min größer als $max ist, gibt PHP eine Warnung aus und gibt false zurück.
Verwendung der Funktion mt_rand()
Rufen Sie die Funktion mit zwei Argumenten auf, um eine Zahl aus einem bestimmten Bereich zu wählen, oder ohne Argumente, um einen Wert über den gesamten Bereich zu erhalten:
Der erste Aufruf begrenzt die Ausgabe auf den Bereich 1–100; der zweite umfasst den gesamten Bereich, dessen obere Grenze Sie mit mt_getrandmax() ermitteln können (üblicherweise 2147483647).
Typische Anwendungsfälle
Würfelwurf simulieren:
<?php
$roll = mt_rand(1, 6);
echo "You rolled a $roll\n";
?>Ein zufälliges Element aus einem Array auswählen, indem ein gültiger Index erzeugt wird:
<?php
$colors = ['red', 'green', 'blue', 'yellow'];
$pick = $colors[mt_rand(0, count($colors) - 1)];
echo "Random color: $pick\n";
?>Die Verwendung von count($colors) - 1 als obere Grenze ist wichtig: Array-Indizes sind nullbasiert, ein Array mit vier Elementen hat also die gültigen Indizes 0–3. (Für diese spezifische Aufgabe ist array_rand() eine direktere Option.)
Seeden für reproduzierbare Ergebnisse
Da Mersenne Twister deterministisch ist, macht das Seeden mit mt_srand() die Sequenz wiederholbar – nützlich für Tests, Simulationen oder wenn die „zufällige" Ausgabe bei jedem Durchlauf identisch sein soll:
<?php
mt_srand(42);
echo mt_rand(), "\n"; // same value every run for seed 42
mt_srand(42); // reset to the same seed
echo mt_rand(), "\n"; // identical to the line above
?>Ohne expliziten Seed setzt PHP den Generator automatisch, sodass bei jedem Aufruf eine andere Ausgabe entsteht.
Sichere Alternative: random_int()
Wenn die Zufälligkeit nicht erraten werden darf – Sitzungstoken, Passwort-Reset-Codes, API-Schlüssel – ist mt_rand() das falsche Werkzeug. Verwenden Sie random_int(), das auf die kryptografisch sichere Quelle des Betriebssystems zurückgreift:
<?php
// Cryptographically secure integer between 1 and 100
$secure = random_int(1, 100);
echo $secure, "\n";
?>Die Signatur ist dieselbe ((int $min, int $max)), sodass der Austausch unkompliziert ist.
mt_rand() vs. rand()
Seit PHP 7.1 ist rand() ein Alias für mt_rand() und verwendet denselben Mersenne-Twister-Motor, sodass beide identisch arbeiten. In älteren Versionen nutzte rand() den schwächeren libc-Generator der Plattform. Bevorzugen Sie mt_rand(), wenn Sie konsistente, hochwertige Ergebnisse über verschiedene PHP-Versionen hinweg benötigen.
Fazit
mt_rand() ist die bevorzugte Funktion für schnelle, qualitativ hochwertige pseudozufällige Ganzzahlen in PHP. Verwenden Sie sie für Spiele, Stichproben, Mischen und allgemeine Zufallsoperationen; seeden Sie sie mit mt_srand(), wenn Sie reproduzierbare Sequenzen benötigen; und wechseln Sie zu random_int(), wenn Sicherheit eine Rolle spielt.