Signatur
Beschreibung
srand() initialisiert den internen Zufallszahlengenerator mit einem festen Startwert (Seed). Dadurch wird die Sequenz der von rand() erzeugten Pseudozufallszahlen reproduzierbar: Gleicher Seed → gleiche Zahlenfolge. Das ist nützlich für Tests, Simulationen und deterministische Algorithmen.
Seit PHP 7.1 teilen sich srand() und mt_srand() denselben internen Zustand – ein Aufruf von srand() beeinflusst also auch Ergebnisse von mt_rand() und umgekehrt. Der Parameter $mode erlaubt die Wahl zwischen dem Mersenne-Twister-Algorithmus (MT_RAND_MT19937, Standard) und dem älteren, fehlerbehafteten Modus (MT_RAND_PHP).
Wird srand() ohne Argument aufgerufen oder der Seed weggelassen, wählt PHP einen zufälligen Startwert automatisch. In den meisten Produktionsanwendungen ist ein expliziter Aufruf von srand() daher unnötig – PHP seeded den Generator beim Start selbstständig.
Sicherheitshinweis: srand() und rand() sind nicht kryptografisch sicher. Für Passwörter, Tokens oder sicherheitsrelevante Zufallswerte muss stattdessen random_bytes() oder random_int() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $seed | int | 0 | Der ganzzahlige Startwert für den Zufallsgenerator. Bei gleichem Seed wird stets dieselbe Zahlenfolge erzeugt. Wird der Parameter weggelassen, wählt PHP einen zufälligen Seed. |
| $mode | int | MT_RAND_MT19937 | Wählt den Algorithmus: MT_RAND_MT19937 (korrekter Mersenne Twister, Standard seit PHP 7.1) oder MT_RAND_PHP (veralteter, fehlerhafter Modus für Rückwärtskompatibilität). |
Rückgabewert
Beispiele
Reproduzierbare Zufallsfolge mit festem Seed
<?php
// Gleicher Seed ergibt stets dieselbe Zahlenfolge
srand(42);
echo rand(1, 100) . PHP_EOL; // z. B. 85
echo rand(1, 100) . PHP_EOL; // z. B. 71
echo rand(1, 100) . PHP_EOL; // z. B. 10
// Erneutes Seeden mit demselben Wert resettet die Folge
srand(42);
echo rand(1, 100) . PHP_EOL; // wieder 85
Simulation mit deterministischem Seed (Unit-Test-tauglich)
<?php
function simuliereWuerfelwuerfe(int $anzahl, int $seed): array {
srand($seed);
$ergebnisse = [];
for ($i = 0; $i < $anzahl; $i++) {
$ergebnisse[] = rand(1, 6);
}
return $ergebnisse;
}
$wuerfe = simuliereWuerfelwuerfe(5, 1234);
echo implode(', ', $wuerfe) . PHP_EOL;
// Immer dieselbe Ausgabe für Seed 1234
Sicherheitshinweis: kryptografisch sichere Alternative
<?php
// FALSCH für sicherheitsrelevante Zwecke:
srand();
$unsichererToken = rand(100000, 999999);
// RICHTIG – kryptografisch sicherer Zufallswert:
$sichererToken = random_int(100000, 999999);
echo $sichererToken . PHP_EOL;
// Oder als Byte-String für Tokens:
$token = bin2hex(random_bytes(16));
echo $token . PHP_EOL;
// Wichtig · Fallstricke
Sicherheit: srand() und rand() erzeugen Pseudozufallszahlen, die bei bekanntem oder erratbarem Seed vollständig vorhersagbar sind. Sie dürfen niemals für kryptografische Zwecke (Passwörter, Session-Tokens, Einmal-Codes, Schlüssel etc.) eingesetzt werden. Verwende stattdessen random_int() oder random_bytes().
PHP 7.1+: srand() und mt_srand() benutzen denselben internen Zustand. Ein Aufruf beeinflusst beide Funktionen. Außerdem wurde der Standard-Modus auf den korrekten Mersenne-Twister geändert; MT_RAND_PHP liefert aus Kompatibilitätsgründen weiterhin das alte (fehlerhafte) Verhalten.
Automatisches Seeding: PHP seeded den Zufallsgenerator beim Scriptstart automatisch. Ein expliziter Aufruf von srand() ist nur dann sinnvoll, wenn eine reproduzierbare Sequenz gewünscht ist.