Signatur
Beschreibung
rand() gibt eine pseudo-zufällige ganze Zahl zurück. Werden keine Argumente übergeben, liegt der Rückgabewert zwischen 0 und PHP_INT_MAX. Mit den optionalen Parametern $min und $max lässt sich der Bereich einschränken – beide Grenzen sind im Ergebnis eingeschlossen.
Intern verwendet PHP ab Version 7.1 den Mersenne-Twister-Algorithmus für rand(), der identisch mit mt_rand() ist. Der Algorithmus ist schnell, aber nicht kryptografisch sicher. Für sicherheitskritische Anwendungen wie Token-Generierung, Passwörter oder Lotterien ist random_int() zu verwenden.
Die Funktion eignet sich gut für einfache Simulationen, Tests, zufällige Sortierungen oder spielerische Anwendungen, bei denen keine kryptografische Stärke benötigt wird.
Seit PHP 7.1 ist rand() ein Alias für mt_rand(), weshalb auch der Seed mit mt_srand() gesetzt werden kann, um reproduzierbare Zufallsfolgen zu erzeugen – z. B. in Unit-Tests.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $min | int | 0 | Untere Grenze des Zufallsbereichs (inklusiv). Muss kleiner oder gleich $max sein. |
| $max | int | PHP_INT_MAX | Obere Grenze des Zufallsbereichs (inklusiv). Muss größer oder gleich $min sein. |
Rückgabewert
$min und $max (beide inklusiv) zurück. Wenn $min größer als $max ist, wird seit PHP 8.0 ein ValueError geworfen.Beispiele
Einfache Zufallszahl im Bereich 1–100
<?php
$zahl = rand(1, 100);
echo "Zufallszahl: $zahl";
Würfelsimulation mit rand()
<?php
function wuerfeln(): int {
return rand(1, 6);
}
for ($i = 1; $i <= 5; $i++) {
echo "Wurf $i: " . wuerfeln() . PHP_EOL;
}
Reproduzierbare Zufallsfolge mit Seed
<?php
// Seed setzen für deterministisches Verhalten (z. B. in Tests)
mt_srand(42);
$werte = [];
for ($i = 0; $i < 5; $i++) {
$werte[] = rand(1, 100);
}
echo implode(', ', $werte);
// Wichtig · Fallstricke
Sicherheitshinweis: rand() ist nicht kryptografisch sicher. Die erzeugten Zahlen sind vorhersagbar, wenn der Seed bekannt ist oder ermittelt werden kann. Für sicherheitskritische Zwecke wie Passwort-Token, CSRF-Token oder Lotterien muss random_int() verwendet werden.
Seit PHP 7.1 ist rand() intern identisch mit mt_rand(). Älterer Code, der srand() zum Setzen des Seeds nutzt, sollte auf mt_srand() umgestellt werden.
Wenn $min größer als $max ist, wirft PHP 8.0+ einen ValueError. In älteren Versionen war das Verhalten undefiniert.