W3docs

mt_getrandmax()

Erfahren Sie, was die PHP-Funktion mt_getrandmax() macht: Sie gibt den größten Wert zurück, den mt_rand() erzeugen kann.

Die Funktion mt_getrandmax() in PHP gibt die größtmögliche ganze Zahl zurück, die mt_rand() erzeugen kann. Sie erwartet keine Argumente und liefert für die gesamte Laufzeit des Skripts einen konstanten Wert. Hauptsächlich wird sie als bekannte Obergrenze eingesetzt, wenn Zufallszahlen skaliert oder normiert werden.

Diese Seite erklärt, was die Funktion zurückgibt, die Syntax, warum der Wert relevant ist, wie man daraus einen zufälligen Float erzeugt, häufige Fallstricke und den Unterschied zur älteren Funktion getrandmax().

Was ist die Funktion mt_getrandmax()?

mt_getrandmax() ist eine eingebaute PHP-Funktion, die ein int zurückgibt — den größten Wert, den mt_rand() erzeugen kann. Da mt_rand() den Mersenne Twister Pseudozufallszahlengenerator verwendet, gibt diese Funktion die Obergrenze des Ausgabebereichs dieses Generators an.

Der Wert ist plattformabhängig, beträgt jedoch auf jedem modernen PHP-Build 2147483647 (2^31 - 1). Er wächst auf 64-Bit-Systemen nichtmt_rand() arbeitet stets im 32-Bit-Bereich, sodass mt_getrandmax() überall dieselbe Zahl zurückgibt. Behandeln Sie ihn als Konstante für die Dauer Ihres Skripts.

Syntax

mt_getrandmax(): int
  • Parameter: keine.
  • Rückgabewert: der maximale Integer, den mt_rand() zurückgeben kann.

Verwendung der Funktion mt_getrandmax()

Die Verwendung von mt_getrandmax() ist unkompliziert — rufen Sie sie ohne Argumente auf. Hier ist ein einfaches Beispiel:

Grundlegende Verwendung

php— editable, runs on the server

Der obige Code ruft die Obergrenze ab und speichert sie zur späteren Verwendung in einer Variablen.

Einen expliziten Bereich definieren Sie können mt_getrandmax() mit mt_rand() kombinieren, um den vollständigen Ausgabebereich explizit zu machen. Die beiden folgenden Aufrufe sind gleichwertig — mt_rand() ohne Argumente gibt bereits einen Wert zwischen 0 und mt_getrandmax() zurück:

<?php
$max = mt_getrandmax();
$randomNumber = mt_rand(0, $max);
echo $randomNumber, "\n";   // some value in 0..2147483647

echo mt_rand(), "\n";       // identical range, no arguments needed
?>

Einen zufälligen Float zwischen 0 und 1 erzeugen

Die häufigste praktische Anwendung von mt_getrandmax() ist die Normalisierung einer Zufallsganzzahl zu einem Float im Bereich [0, 1). Teilen Sie die Zufallsganzzahl durch den Maximalwert:

<?php
$ratio = mt_rand() / (mt_getrandmax() + 1);
echo $ratio; // e.g. 0.4173...
?>

Das Addieren von 1 zum Divisor hält das Ergebnis strikt unter 1. Um in einen beliebigen Bereich [$min, $max] zu skalieren, multiplizieren Sie das Verhältnis mit der Spanne:

<?php
$min = 5;
$max = 25;
$value = $min + $ratio * ($max - $min);

Häufige Fallstricke

  • Es handelt sich nicht um einen Setter. mt_getrandmax() liest nur die Obergrenze — es gibt keine Möglichkeit, sie zu ändern. Um die Ausgabe einzuschränken, übergeben Sie stattdessen min und max an mt_rand().
  • Sie akzeptiert keine Argumente. Das Übergeben von Argumenten löst in PHP 8+ einen ArgumentCountError aus.
  • Nicht kryptografisch sicher. Weder mt_rand() noch sein Bereich sind sicher für Passwörter, Tokens oder Schlüssel. Verwenden Sie für sicherheitskritische Zufälligkeit random_int() oder random_bytes().
  • Vermeiden Sie den Modulo-Trick für Bereiche. mt_rand() % $n führt zu einer Verzerrung hin zu kleineren Werten. Bevorzugen Sie mt_rand(0, $n - 1).

mt_getrandmax() vs. getrandmax()

PHP enthält ein paralleles Generatorpaar. getrandmax() gibt die Obergrenze für die ältere Funktion rand() an, während mt_getrandmax() die Obergrenze für mt_rand() angibt. Seit PHP 7.1 verwenden rand() und mt_rand() intern denselben Mersenne-Twister-Generator, sodass beide Funktionen 2147483647 zurückgeben — dennoch sollten Sie der Klarheit halber jedes *getrandmax() mit seinem passenden Generator kombinieren.

Fazit

mt_getrandmax() gibt die Obergrenze von PHPs Mersenne-Twister-Generator zurück (2147483647 auf modernen Builds). Ihr Hauptnutzen liegt als Divisor zur Erzeugung normierter zufälliger Floats und skalierter Bereiche. Für sichere Zufälligkeit greifen Sie stattdessen auf random_int() zurück, und denken Sie daran, dass die Funktion schreibgeschützt ist — verwenden Sie mt_rand($min, $max), um Ergebnisse tatsächlich einzuschränken. Siehe auch mt_srand() zum Setzen des Startwerts des Generators.

Übungen

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