Modulo 10 Verfahren Rechner
Berechnen Sie die Prüfziffer nach dem Modulo-10-Verfahren (Luhn-Algorithmus) für IBAN, Kreditkarten oder andere Identifikationsnummern
Umfassender Leitfaden zum Modulo-10-Verfahren (Luhn-Algorithmus)
Das Modulo-10-Verfahren, auch als Luhn-Algorithmus bekannt, ist ein einfacher Prüfziffernalgorithmus, der zur Validierung von Identifikationsnummern wie Kreditkartennummern, IBANs, Versicherungsnummern und anderen numerischen Codes verwendet wird. Entwickelt 1954 von dem deutschen Informatiker Hans Peter Luhn, bietet dieser Algorithmus eine effektive Methode zur Erkennung von Tippfehlern und einfachen Fälschungen.
Wussten Sie schon?
Der Luhn-Algorithmus erkennt 90% aller Einzelfehler und fast alle vertauschten benachbarte Ziffern in numerischen Codes. Er wird von allen großen Kreditkartenunternehmen (Visa, MasterCard, Amex) und Banken weltweit eingesetzt.
Wie funktioniert der Modulo-10-Algorithmus?
- Nummer vorbereiten: Die Prüfziffer (meist die letzte Ziffer) wird vorübergehend entfernt.
- Von rechts nach links: Beginnend mit der vorletzten Ziffer (jetzt letzte Ziffer der verkürzten Nummer) wird jede zweite Ziffer verdoppelt.
- Ziffern summieren:
- Wenn das Verdoppeln einer Ziffer zu einer zweistelligen Zahl führt (z.B. 7×2=14), werden die beiden Ziffern addiert (1+4=5).
- Alle Ziffern (verdoppelt und unverdoppelt) werden summiert.
- Prüfziffer berechnen: Die Summe wird durch 10 geteilt. Der Rest (Modulo) wird von 10 subtrahiert, um die Prüfziffer zu erhalten. Ist der Rest 0, ist die Prüfziffer 0.
Praktische Anwendungsbeispiele
| Anwendung | Beispielnummer | Prüfziffer | Berechnungsmethode |
|---|---|---|---|
| Deutsche IBAN | DE89 3704 0044 0532 0130 00 | 89 | IBAN-spezifisch (Modulo 97-10) |
| Visa Kreditkarte | 4532 0151 1283 0366 | 5 | Standard Luhn |
| Gesundheitskarte (Deutschland) | X110463782 | 7 | Modulo 10 mit Gewichtung |
IBAN-Prüfung: Ein Sonderfall des Modulo-Verfahrens
Für IBANs (International Bank Account Number) wird eine erweiterte Version des Modulo-Verfahrens verwendet, die als Modulo-97-10 bekannt ist. Hier die Schritte:
- Die ersten 4 Zeichen (Ländercode + Prüfziffer) werden ans Ende verschoben.
Beispiel: DE89370400440532013000 → 370400440532013000DE89 - Buchstaben werden in Zahlen umgewandelt (A=10, B=11, …, Z=35).
Beispiel: D=13, E=14 → DE89 → 131489 - Die gesamte Zahl wird als große Zahl behandelt und durch 97 dividiert.
Ergebnis: Der Rest muss 1 ergeben (131489370400440532013000 mod 97 = 1).
Dieses Verfahren wird von der Europäischen Zentralbank und der ISO 13616 standardisiert.
Sicherheitsgrenzen des Modulo-10-Verfahrens
Obwohl der Luhn-Algorithmus weit verbreitet ist, hat er einige Einschränkungen:
- Keine kryptografische Sicherheit: Der Algorithmus ist nicht für Sicherheitszwecke ausgelegt, sondern nur zur Fehlererkennung.
- Begrenzte Fehlererkennung:
- Erkennt alle Einzelfehler (9→8, 3→4 usw.)
- Erkennt fast alle Vertauschungen benachbarter Ziffern (12→21, aber nicht 09→90)
- Erkennt keine Vertauschungen gleicher Ziffern (111→111 bleibt gültig)
- Kein Schutz vor absichtlicher Fälschung: Mit einfachen Methoden können gültige Prüfziffern generiert werden.
| Fehlerart | Erkennungsrate | Beispiel |
|---|---|---|
| Einzelfehler (eine Ziffer falsch) | 100% | 12345 → 12385 (erkannt) |
| Vertauschte benachbarte Ziffern | ~98% | 12345 → 13245 (erkannt) |
| Vertauschte nicht-benachbarte Ziffern | 0% | 12345 → 14325 (nicht erkannt) |
| Mehrfachfehler (zwei oder mehr Ziffern falsch) | ~10% | 12345 → 17385 (evtl. nicht erkannt) |
Programmierung: Modulo 10 in verschiedenen Sprachen
Hier sind Implementierungen des Luhn-Algorithmus in gängigen Programmiersprachen:
JavaScript (wie in diesem Rechner verwendet)
function calculateCheckDigit(number, checkDigitPosition = 'end') {
let digits = number.replace(/\D/g, '').split('').map(Number);
let sum = 0;
let alternate = false;
// Standard Luhn (Prüfziffer am Ende)
if (checkDigitPosition === 'end') {
for (let i = digits.length - 1; i >= 0; i--) {
let n = digits[i];
if (alternate) {
n *= 2;
if (n > 9) n = (n % 10) + 1;
}
sum += n;
alternate = !alternate;
}
return (10 - (sum % 10)) % 10;
}
// Prüfziffer am Anfang (selten, z.B. einige Versicherungsnummern)
else {
for (let i = 0; i < digits.length; i++) {
let n = digits[i];
if (alternate) {
n *= 2;
if (n > 9) n = (n % 10) + 1;
}
sum += n;
alternate = !alternate;
}
return (10 - (sum % 10)) % 10;
}
}
Python
def luhn_checksum(number):
digits = [int(d) for d in str(number)]
odd = len(digits) % 2
sum = 0
for i, digit in enumerate(digits):
if (i % 2 == odd):
digit *= 2
if digit > 9:
digit -= 9
sum += digit
return (10 - (sum % 10)) % 10
Häufige Fragen zum Modulo-10-Verfahren
1. Warum wird der Algorithmus “Modulo 10” genannt?
Der Name kommt von der mathematischen Operation Modulo 10, die am Ende des Verfahrens angewendet wird. Der Algorithmus berechnet die Summe aller Ziffern (nach bestimmten Regeln) und bestimmt dann den Rest bei Division durch 10. Dieser Rest wird verwendet, um die Prüfziffer zu bestimmen.
2. Kann der Luhn-Algorithmus für alphanumerische Codes verwendet werden?
Nein, der Standard-Luhn-Algorithmus funktioniert nur mit numerischen Werten. Für alphanumerische Codes (wie IBANs, die Buchstaben enthalten) müssen die Buchstaben zunächst in Zahlen umgewandelt werden (A=10, B=11, …, Z=35), bevor der Algorithmus angewendet wird.
3. Warum verwenden Kreditkarten den Luhn-Algorithmus?
Kreditkartenunternehmen verwenden den Luhn-Algorithmus, weil er:
- Einfach zu implementieren ist (sowohl in Hardware als auch Software)
- Die meisten Tippfehler erkennt (z.B. beim manuellen Eintippen der Kartennummer)
- Schnell berechnet werden kann (wichtig für Echtzeit-Transaktionen)
- Keine zusätzlichen Kosten verursacht (im Gegensatz zu komplexeren Verfahren)
4. Gibt es bessere Alternativen zum Modulo-10-Verfahren?
Für höhere Sicherheitsanforderungen werden oft komplexere Algorithmen eingesetzt:
- Modulo 11: Erkennt mehr Fehlerarten, aber verwendet das Zeichen “X” für den Rest 10.
- Verhoeff-Algorithmus: Erkennt alle Einzelfehler und alle Vertauschungen benachbarter Ziffern.
- Damm-Algorithmus: Noch robuster, aber komplexer in der Implementierung.
- Kryptografische Hashes (SHA-256): Für echte Sicherheit, aber nicht für einfache Fehlererkennung geeignet.
Wichtig für Entwickler
Wenn Sie den Luhn-Algorithmus in einer produktiven Anwendung einsetzen, beachten Sie:
- Validieren Sie immer die Eingabelänge vor der Berechnung.
- Behandeln Sie Leerzeichen und Bindestriche in Nummern (z.B. Kreditkartenformat 4111-1111-1111-1111).
- Für IBANs müssen Sie zusätzlich die Ländercode-Prüfung (ISO 3166) implementieren.
- Testen Sie mit bekannten gültigen/ungültigen Nummern, z.B.:
- Gültige Kreditkarte: 4532 0151 1283 0366 (Visa)
- Ungültige Kreditkarte: 4532 0151 1283 0367 (letzte Ziffer falsch)
Offizielle Ressourcen und weiterführende Links
Für vertiefende Informationen zum Modulo-10-Verfahren und seinen Anwendungen empfehlen wir folgende autoritative Quellen:
- Europäische Zentralbank (EZB) – IBAN-Spezifikationen
Offizielle Dokumentation zur IBAN-Struktur und Prüfziffernberechnung (Modulo-97-10). - ISO 7064:2003 – Datenprüfungsziffern
Internationaler Standard für Prüfziffernsysteme, einschließlich Modulo-10 und Modulo-11. - NIST – Hash Functions (für fortgeschrittene Prüfmechanismen)
Informationen zu kryptografischen Alternativen für hochsichere Anwendungen.
Für Entwickler, die den Algorithmus in eigenen Projekten implementieren möchten, bietet die Rosetta Code-Seite Implementierungen in über 50 Programmiersprachen.