Start · Sprachen · PHP · Referenz · gmp_random_range

gmp_random_range

Funktion

Gibt eine kryptographisch sichere, gleichverteilte Zufallszahl als <code>GMP</code>-Objekt zurück, die im geschlossenen Intervall [<code>min</code>, <code>max</code>] liegt.

seit PHP 8.2.0 Kategorie: math

Signatur

gmp_random_range(GMP|int|string $min, GMP|int|string $max): GMP

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

Typ
GMP
Beschreibung
Gibt ein 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
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);
734829103948271029384756103948271029384

Verwendung negativer Grenzen

<?php
// Zufallszahl zwischen -1000 und -1
$zufallszahl = gmp_random_range(-1000, -1);
echo gmp_strval($zufallszahl); // z. B. -537
-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();
}
Fehler: gmp_random_range(): Argument #1 ($min) must be less than or equal to argument #2 ($max)

// 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.