Start · Sprachen · PHP · Referenz · rand

rand

Funktion

Erzeugt eine pseudo-zufällige ganze Zahl im angegebenen Bereich (inkl. Grenzen).

seit PHP 4.0.0 Kategorie: crypto

Signatur

rand(int $min = 0, int $max = PHP_INT_MAX): int

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

Typ
int
Beschreibung
Gibt eine pseudo-zufällige ganze Zahl zwischen $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";
Zufallszahl: 42 (variabler Wert zwischen 1 und 100)

Würfelsimulation mit rand()

<?php
function wuerfeln(): int {
    return rand(1, 6);
}

for ($i = 1; $i <= 5; $i++) {
    echo "Wurf $i: " . wuerfeln() . PHP_EOL;
}
Wurf 1: 3 Wurf 2: 6 Wurf 3: 1 Wurf 4: 4 Wurf 5: 2 (Beispielausgabe – variabler)

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);
25, 17, 97, 38, 61 (deterministisch für Seed 42 – plattformabhängig)

// 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.