W3docs

rand()

Die Funktion rand() in PHP erzeugt eine pseudo-zufällige ganze Zahl. Hier erfahren Sie Syntax, Anwendungsfälle und wichtige Sicherheitshinweise.

Die Funktion rand() in PHP erzeugt eine pseudo-zufällige ganze Zahl. Dieses Kapitel behandelt die Syntax, wie die optionalen Bereichsargumente funktionieren, den Unterschied zwischen rand() und dem schnelleren mt_rand(), warum Sie keine der beiden Funktionen für sicherheitskritische Zwecke verwenden sollten, sowie praktische Muster wie das Würfeln oder die Auswahl eines zufälligen Array-Elements.

Was die rand()-Funktion macht

rand() ist eine eingebaute PHP-Funktion, die eine zufällige ganze Zahl zurückgibt. Ohne Argumente gibt sie einen Wert zwischen 0 und getrandmax() zurück (den größten Wert, den der Generator erzeugen kann — mindestens 32767). Wenn Sie $min und $max übergeben, gibt sie eine ganze Zahl im inklusiven Bereich $min ≤ n ≤ $max zurück.

Sie erzeugt pseudo-zufällige Zahlen: Werte, die zufällig wirken, aber durch einen deterministischen Algorithmus aus einem internen Seed generiert werden. Das ist für Spiele, Stichproben und Testdaten geeignet, jedoch nicht für Anwendungen, bei denen Vorhersagbarkeit ein Risiko darstellt (siehe Sicherheit unten).

Syntax

rand(): int
rand(int $min, int $max): int
ParameterBeschreibung
$minOptional. Der niedrigste zurückzugebende Wert. Standardmäßig 0.
$maxOptional. Der höchste zurückzugebende Wert. Standardmäßig getrandmax().

$min und $max sind inklusiv, sodass rand(1, 6) 1, 6 oder einen beliebigen Wert dazwischen zurückgeben kann. Wenn Sie $min größer als $max übergeben, wirft PHP 8 einen ValueError.

Grundlegende Verwendung

php— editable, runs on the server

Hier rufen wir rand() mit einem Bereich auf, speichern das Ergebnis in $result und geben es aus. Führen Sie das Beispiel mehrmals aus, und Sie erhalten jedes Mal eine andere Zahl.

Häufige Anwendungsfälle

Einige Muster, die Sie häufig benötigen werden:

<?php
// 1. Roll a six-sided die
$die = rand(1, 6);

// 2. Pick a random element from an array
$colors = ['red', 'green', 'blue'];
$color  = $colors[rand(0, count($colors) - 1)];

// 3. A coin flip
$side = rand(0, 1) === 0 ? 'heads' : 'tails';

echo "Die: $die, Color: $color, Coin: $side";
?>

Um ein Array-Element auszuwählen, bietet PHP auch den speziellen Helfer array_rand(), der klarer ist als die manuelle Berechnung des Index.

rand() vs mt_rand()

mt_rand() verwendet den Mersenne-Twister-Algorithmus. Er ist schneller und hat bessere statistische Eigenschaften als das veraltete rand() und ist daher die bevorzugte Allzweck-Wahl. Beide haben dieselbe Signatur:

<?php
$a = rand(1, 100);     // legacy generator
$b = mt_rand(1, 100);  // Mersenne Twister — recommended
echo "$a and $b";
?>

Seit PHP 7.1 ist rand() intern ein Alias für mt_rand(), sodass sie sich auf modernem PHP identisch verhalten. Bevorzugen Sie mt_rand() in neuem Code der Klarheit halber. Sein Begleiter mt_getrandmax() gibt den größten Wert an, den er zurückgeben kann.

Seeding

Sie können den Generator mit srand() (oder mt_srand() für mt_rand()) mit einem Seed initialisieren. Das Setzen eines festen Wertes macht die Sequenz reproduzierbar — praktisch für Tests:

<?php
srand(42);
echo rand(1, 100), "\n"; // same output every run for seed 42
?>

Seit PHP 4.2 müssen Sie srand() fast nie manuell aufrufen — PHP initialisiert den Generator automatisch bei der ersten Verwendung.

Wann rand() nicht verwendet werden sollte

rand() und mt_rand() sind nicht kryptographisch sicher. Ihre Ausgabe ist vorhersagbar, daher sollten Sie sie niemals für Passwörter, Tokens, Session-IDs, Passwort-Reset-Links oder andere sicherheitskritische Zwecke verwenden. Verwenden Sie dafür einen CSPRNG:

<?php
$secureInt   = random_int(1, 100);     // cryptographically secure integer
$secureBytes = random_bytes(16);       // 16 random bytes
echo $secureInt, ' ', bin2hex($secureBytes);
?>

random_int() hat dieselbe (min, max)-Signatur wie rand() und ist daher in der Regel ein direkter Ersatz, wenn Sicherheit eine Rolle spielt.

Zusammenfassung

  • rand($min, $max) gibt eine pseudo-zufällige ganze Zahl in einem inklusiven Bereich zurück; ohne Argumente reicht der Bereich von 0 bis getrandmax().
  • Bevorzugen Sie mt_rand() für den allgemeinen Einsatz — er ist schneller und besser verteilt (und rand() ist seit PHP 7.1 ein Alias dafür).
  • Verwenden Sie random_int() / random_bytes(), wenn der Wert unvorhersagbar sein muss.

Weitere Informationen zu numerischen Werten und mathematischen Hilfsfunktionen finden Sie unter PHP Numbers und PHP Math.

Übungen

Übung
Was macht die rand()-Funktion in PHP?
Was macht die rand()-Funktion in PHP?
Was this page helpful?