Signatur
Beschreibung
gmp_mod führt eine Modulo-Operation auf beliebig großen Ganzzahlen aus, die als GMP-Ressource bzw. GMP-Objekt (ab PHP 5.6), nativer int oder numerischer string übergeben werden können. Das Ergebnis ist stets nicht-negativ und entspricht dem Rest der ganzzahligen Division num1 / num2.
Die Funktion ist besonders nützlich, wenn Zahlen verarbeitet werden müssen, die den Wertebereich von PHP-nativen int-Werten (64 Bit) überschreiten – z. B. bei kryptografischen Berechnungen, RSA-Schlüsselerzeugung oder der Prüfung sehr großer Primzahlen.
Im Gegensatz zum PHP-Operator % liefert gmp_mod immer ein nicht-negatives Ergebnis, solange num2 positiv ist. Bei negativem num2 wird eine Ausnahme bzw. ein Fehler ausgelöst.
Alle Parameter können wahlweise als GMP-Objekt (Rückgabewert von gmp_init), als PHP-int oder als Dezimalzahl in einem string übergeben werden, was flexible Nutzung ohne explizite Konvertierung ermöglicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der Dividend (Zähler) der Modulo-Operation. Kann ein GMP-Objekt, ein PHP-int oder ein numerischer string sein. |
|
| $num2 Pflicht | GMP|int|string | Der Divisor (Nenner/Modulus). Muss größer als 0 sein. Kann ein GMP-Objekt, ein PHP-int oder ein numerischer string sein. |
Rückgabewert
num1 / num2 enthält. Mit gmp_strval oder durch implizite String-Konvertierung kann das Ergebnis als Dezimalzahl ausgegeben werden.Beispiele
Einfache Modulo-Berechnung mit großen Zahlen
<?php
// Berechnung: 10^20 mod 7
$num1 = gmp_init('100000000000000000000'); // 10^20
$num2 = gmp_init(7);
$result = gmp_mod($num1, $num2);
echo gmp_strval($result); // Ausgabe: 2
Modulo-Exponentiation für kryptografische Zwecke (manuell)
<?php
// Beispiel: Prüfen, ob eine sehr große Zahl durch 13 teilbar ist
$big = gmp_init('987654321098765432109876543210');
$modulus = 13;
$remainder = gmp_mod($big, $modulus);
if (gmp_cmp($remainder, 0) === 0) {
echo "Zahl ist durch 13 teilbar.";
} else {
echo "Rest: " . gmp_strval($remainder);
}
Direkte Übergabe als Integer und String
<?php
// num1 als String, num2 als int
$result = gmp_mod('1000000000000000001', 9);
echo gmp_strval($result);
// Wichtig · Fallstricke
Achtung: Wenn num2 gleich 0 ist, wird ein \DivisionByZeroError (PHP 8) bzw. ein Laufzeitfehler ausgelöst. Dieser Fall muss vor dem Aufruf abgefangen werden.
Das Ergebnis von gmp_mod ist immer nicht-negativ, sofern num2 positiv ist – dies unterscheidet sich vom Verhalten des %-Operators bei negativen Dividenden (-7 % 3 ergibt in PHP -1, während gmp_mod stets einen nicht-negativen Rest liefert).
Die GMP-Erweiterung muss beim Kompilieren von PHP aktiviert sein (--with-gmp). Auf vielen Systemen ist sie als Paket verfügbar (php-gmp).