Start · Sprachen · PHP · Referenz · mt_getrandmax

mt_getrandmax

Funktion

Gibt den größtmöglichen Wert zurück, den <code>mt_rand()</code> erzeugen kann.

seit PHP 3.0.6 Kategorie: crypto

Signatur

mt_getrandmax(): int

Beschreibung

mt_getrandmax() liefert den maximalen Ganzzahlwert, den die Mersenne-Twister-basierte Zufallszahlenfunktion mt_rand() zurückgeben kann. Dieser Wert beträgt auf den meisten Plattformen 2147483647 (2³¹ − 1).

Die Funktion ist nützlich, wenn man Zufallszahlen in einem bestimmten Verhältnis skalieren oder normalisieren möchte – zum Beispiel um eine Gleitkommazahl zwischen 0 und 1 zu erzeugen: mt_rand() / mt_getrandmax(). Damit lässt sich der Wertebereich portabel nutzen, ohne den Maximalwert hartzucodieren.

Zu beachten ist, dass mt_rand() und damit auch mt_getrandmax() auf dem Mersenne-Twister-Algorithmus basieren und für statistische Simulationen geeignet sind, nicht jedoch für kryptografische Zwecke. Für sicherheitskritische Anwendungen sollte stattdessen random_int() und PHP_INT_MAX verwendet werden.

Rückgabewert

Typ
int
Beschreibung
Gibt den größtmöglichen Zufallswert zurück, den mt_rand() liefern kann. Dieser Wert ist plattformabhängig, beträgt aber auf den meisten 32- und 64-Bit-Systemen 2147483647.

Beispiele

Maximalen Zufallswert ausgeben

<?php
// Maximalen Wert von mt_rand() ermitteln
$max = mt_getrandmax();
echo "Maximaler Zufallswert: " . $max . PHP_EOL;

// Eine Zufallszahl erzeugen und den Maximalwert anzeigen
$zufallszahl = mt_rand();
echo "Zufallszahl: " . $zufallszahl . PHP_EOL;
echo "Liegt im Bereich 0 bis " . $max . PHP_EOL;
Maximaler Zufallswert: 2147483647 Zufallszahl: 839147562 Liegt im Bereich 0 bis 2147483647

Normalisierte Gleitkommazahl zwischen 0.0 und 1.0 erzeugen

<?php
// Gleitkommazahl zwischen 0.0 (inkl.) und 1.0 (inkl.) erzeugen
function zufallsFloat(): float {
    return mt_rand() / mt_getrandmax();
}

for ($i = 0; $i < 5; $i++) {
    echo number_format(zufallsFloat(), 6) . PHP_EOL;
}
0.413872 0.728541 0.091234 0.654321 0.310987

// Wichtig · Fallstricke

Sicherheitshinweis: mt_rand() und mt_getrandmax() sind nicht kryptografisch sicher. Für Passwörter, Tokens, Nonces oder andere sicherheitskritische Zufallswerte muss random_int() (ab PHP 7.0) verwendet werden, das intern CSPRNG (Cryptographically Secure Pseudo-Random Number Generator) nutzt.

Ab PHP 7.1 wurde das Verhalten von mt_rand() geändert (Fix eines Off-by-one-Fehlers im Mersenne-Twister). Dadurch können Sequenzen, die mit demselben Seed erzeugt werden, zwischen PHP < 7.1 und PHP ≥ 7.1 abweichen. mt_getrandmax() selbst ist davon nicht betroffen.