Signatur
Beschreibung
mt_rand() erzeugt eine pseudozufällige Ganzzahl auf Basis des Mersenne-Twister-Algorithmus (MT19937). Dieser ist etwa viermal schneller als der ältere rand()-Algorithmus und liefert eine bessere statistische Verteilung der Zufallszahlen. Ohne Argumente wird eine Zahl zwischen 0 und MT_RAND_MAX zurückgegeben.
Typische Anwendungsfälle sind die Erzeugung von Zufallszahlen für Spiele, zufällige Sortierungen, Test-Fixtures oder die Auswahl zufälliger Elemente aus einer Menge. Mit den Parametern $min und $max lässt sich der gewünschte Wertebereich präzise eingrenzen.
Wichtig für sicherheitskritische Anwendungen: Obwohl Mersenne-Twister deutlich besser als rand() ist, handelt es sich um einen deterministischen Pseudozufallsgenerator. Der interne Zustand kann nach ausreichend vielen Ausgaben rekonstruiert werden. Für kryptografische Zwecke (Tokens, Passwörter, Session-IDs) muss stattdessen random_int() verwendet werden.
Seit PHP 7.1.0 nutzt mt_rand() intern die korrigierte Version des Mersenne-Twister-Algorithmus. Das frühere (fehlerhafte) Verhalten kann mit mt_srand(seed, MT_RAND_PHP) reproduziert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $min | int | 0 | Kleinster gewünschter Rückgabewert (inklusiv). Muss kleiner oder gleich $max sein. |
| $max | int | MT_RAND_MAX | Größter gewünschter Rückgabewert (inklusiv). Darf den Wert MT_RAND_MAX nicht überschreiten. |
Rückgabewert
$min und $max zurück (beide Grenzen eingeschlossen). Wirft einen ValueError, wenn $min größer als $max ist (seit PHP 8.0; davor wurde false zurückgegeben und ein E_WARNING ausgelöst).Beispiele
Zufallszahl in einem bestimmten Bereich erzeugen
<?php
// Simuliert einen Würfelwurf (1–6)
$wurf = mt_rand(1, 6);
echo "Würfelwurf: " . $wurf . PHP_EOL;
// Zufällige Prozentzahl
$prozent = mt_rand(0, 100);
echo "Zufälliger Prozentwert: " . $prozent . "%" . PHP_EOL;
Reproduzierbares Ergebnis mit festem Seed (mt_srand)
<?php
// Durch festen Seed wird die Zufallsfolge reproduzierbar — nützlich für Tests
mt_srand(42);
for ($i = 0; $i < 5; $i++) {
echo mt_rand(1, 100) . PHP_EOL;
}
Zufälliges Element aus einem Array auswählen
<?php
$farben = ['Rot', 'Grün', 'Blau', 'Gelb', 'Lila'];
$index = mt_rand(0, count($farben) - 1);
echo "Zufällige Farbe: " . $farben[$index] . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitswarnung: mt_rand() ist nicht kryptografisch sicher. Der Mersenne-Twister-Algorithmus ist deterministisch und sein Zustand kann bei ausreichender Beobachtung der Ausgaben rekonstruiert werden. Für sicherheitskritische Anwendungen wie die Erzeugung von Passwörtern, Tokens, CSRF-Schutz oder Session-IDs muss random_int() verwendet werden.
Seit PHP 7.1.0 wurde ein Fehler in der ursprünglichen MT19937-Implementierung korrigiert. Skripte, die auf das alte (fehlerhafte) Verhalten angewiesen sind, können mt_srand(seed, MT_RAND_PHP) nutzen, um es zu emulieren — dies sollte jedoch vermieden werden.
Wenn $min größer als $max übergeben wird, löst PHP 8.0+ einen ValueError aus. In älteren Versionen wurde lediglich ein E_WARNING generiert und false zurückgegeben.