Signatur
Beschreibung
gmp_random_range() erzeugt eine gleichmäßig verteilte Zufallszahl zwischen einem unteren und einem oberen Grenzwert (beide Grenzen einschließlich). Die Zufallszahlen werden intern über eine kryptographisch starke Zufallsquelle des Betriebssystems generiert, sodass die Funktion für sicherheitskritische Anwendungen geeignet ist.
Im Gegensatz zu rand() oder mt_rand() arbeitet gmp_random_range() mit beliebig großen ganzen Zahlen, also auch weit außerhalb des PHP-Integer-Bereichs (PHP_INT_MIN bis PHP_INT_MAX). Dies macht sie ideal für kryptographische Protokolle, Primzahltests, RSA-Schlüsselgenerierung oder andere Anwendungen, die sehr große Zufallszahlen benötigen.
Beide Grenzen können als PHP-int, numerischer string oder als GMP-Objekt übergeben werden. Der Rückgabewert ist immer ein GMP-Objekt, das mit anderen GMP-Funktionen weiterverarbeitet werden kann.
Hinweis: min muss kleiner oder gleich max sein, andernfalls wird ein ValueError ausgelöst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $min Pflicht | GMP|int|string | Untere Grenze des Zufallsbereichs (inklusive). Kann ein GMP-Objekt, ein PHP-int oder ein numerischer string sein. |
|
| $max Pflicht | GMP|int|string | Obere Grenze des Zufallsbereichs (inklusive). Muss größer oder gleich min sein, sonst wird ein ValueError geworfen. |
Rückgabewert
GMP-Objekt zurück, das eine gleichverteilte Zufallszahl im Intervall [min, max] repräsentiert.Beispiele
Einfache Zufallszahl im kleinen Bereich
<?php
$zufallszahl = gmp_random_range(1, 100);
echo gmp_strval($zufallszahl); // z. B. 42
Zufallszahl mit sehr großen Grenzen (kryptographischer Einsatz)
<?php
// Sehr große Grenzen für kryptographische Zwecke (z. B. Zufallsprimzahl-Kandidat)
$min = gmp_init('100000000000000000000000000000000000000');
$max = gmp_init('999999999999999999999999999999999999999');
$zufallszahl = gmp_random_range($min, $max);
echo gmp_strval($zufallszahl);
Verwendung negativer Grenzen
<?php
// Zufallszahl zwischen -1000 und -1
$zufallszahl = gmp_random_range(-1000, -1);
echo gmp_strval($zufallszahl); // z. B. -537
ValueError bei ungültigem Bereich abfangen
<?php
try {
$zufallszahl = gmp_random_range(100, 1); // min > max → ungültig
} catch (ValueError $e) {
echo 'Fehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Kryptographische Sicherheit: gmp_random_range() nutzt eine kryptographisch starke Zufallsquelle (CSPRNG), ähnlich wie random_int(). Sie ist daher für sicherheitsrelevante Anwendungen wie Token-Generierung oder kryptographische Protokolle geeignet.
Verfügbarkeit: Die Funktion setzt voraus, dass PHP mit der GMP-Erweiterung kompiliert wurde (--with-gmp). Unter Linux ist dies häufig als Paket (php-gmp) verfügbar.
Vergleich mit random_int(): Für Zahlen innerhalb des nativen PHP-Integer-Bereichs ist random_int() ausreichend und einfacher zu verwenden. gmp_random_range() ist die richtige Wahl, sobald Zahlen außerhalb dieses Bereichs benötigt werden.