W3docs

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
ParameterBeschreibung
$minOptional. Der kleinste mögliche Rückgabewert (einschließlich). Standardwert: 0.
$maxOptional. 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:

php— editable, runs on the server

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 03. (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.

Übungen

Übung
Was ist der Zweck der Funktion mt_rand() in PHP?
Was ist der Zweck der Funktion mt_rand() in PHP?
Was this page helpful?