Der Luhn-Algorithmus oder die Luhn-Formel (Entwickler: IBM- Wissenschaftler Hans Peter Luhn ), auch bekannt als „ Modulus 10“- oder „Mod 10“ -Algorithmus , ist eine einfache Prüfziffernformel zur Validierung verschiedener Identifikationsnummern. [ a ] Ziel ist es, ein Nummerierungsschema so zu gestalten, dass ein Computer die eingegebene Zahl schnell auf Fehler überprüfen kann.
Der Algorithmus ist gemeinfrei und weit verbreitet. Er ist in ISO/IEC 7812-1 spezifiziert . [ 2 ] Er ist nicht als kryptografisch sichere Hash-Funktion gedacht ; er wurde zum Schutz vor versehentlichen Fehlern, nicht vor böswilligen Angriffen, entwickelt. Die meisten Kreditkartennummern und viele amtliche Ausweisnummern verwenden den Algorithmus als einfache Methode, um gültige Nummern von falsch eingegebenen oder anderweitig fehlerhaften Nummern zu unterscheiden.
Beschreibung
Die Prüfziffer wird wie folgt berechnet:
- Entfernen Sie die Prüfziffer aus der Nummer (falls sie bereits vorhanden ist). Dadurch bleibt die Nutzlast übrig.
- Beginnen Sie mit den Nutzlastziffern und verdoppeln Sie jede zweite Ziffer (eine Ziffer an einer ungeraden Position in umgekehrter Reihenfolge), wenn Sie von links nummerieren.
- Verarbeite die Nutzdaten von rechts nach links. Wenn eine verdoppelte Ziffer größer als 9 ist , subtrahiere 9 von der Ziffer.
- Addiere alle resultierenden Ziffern (einschließlich derer, die nicht verdoppelt wurden).
- Die Prüfziffer wird durch die Formel berechnet , wobei s die Summe aus Schritt 4 ist. Dies ist die kleinste Zahl (möglicherweise Null), die zu addiert werden muss, um ein Vielfaches von 10 zu erhalten.
- Andere gültige Formeln, die denselben Wert liefern, sind , , und . Beachten Sie, dass die Formel aufgrund von Unterschieden in der Behandlung negativer Zahlen durch die Modulo- Operation nicht in allen Umgebungen funktioniert.
Beispiel zur Berechnung der Prüfziffer
Nehmen wir als Beispiel die Kontonummer 1789372997 (nur die „Nutzdaten“, Prüfziffer noch nicht enthalten):
| Ziffern umgekehrt | 7 | 9 | 9 | 2 | 7 | 3 | 9 | 8 | 7 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|
| Multiplikatoren | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 |
| = | = | = | = | = | = | = | = | = | = | |
| 14 | 9 | 18 | 2 | 14 | 3 | 18 | 8 | 14 | 1 | |
| Ziffernsumme | 5 (1+4) | 9 | 9 (1+8) | 2 | 5 (1+4) | 3 | 9 (1+8) | 8 | 5 (1+4) | 1 |
Die Summe der resultierenden Ziffern beträgt 56.
Die Prüfziffer ist gleich .
Die vollständige Kontonummer lautet somit 17893729974.
Beispiel für die Validierung einer Prüfziffer
- Die Prüfziffer (letzte Ziffer) der Zahl wird zur Validierung entfernt. (z. B. 17893729974 → 1789372997)
- Berechnen Sie die Prüfziffer (siehe oben).
- Vergleichen Sie Ihr Ergebnis mit der ursprünglichen Prüfziffer. Stimmen beide Zahlen überein, ist das Ergebnis gültig. (z. B. (gegebene Prüfziffer = berechnete Prüfziffer) ⇔ (gültige Prüfziffer)).
Stärken und Schwächen
Der Luhn-Algorithmus erkennt alle Fehler einzelner Ziffern sowie nahezu alle Vertauschungen benachbarter Ziffern. Er erkennt jedoch nicht die Vertauschung der zweistelligen Ziffernfolge 09 zu 90 (oder umgekehrt). Die meisten möglichen Zwillingsfehler werden erkannt (ausgenommen sind 22 ↔ 55 , 33 ↔ 66 und 44 ↔ 77 ).
Andere, komplexere Prüfziffernalgorithmen (wie der Verhoeff-Algorithmus und der Damm-Algorithmus ) können mehr Übertragungsfehler erkennen. Der Luhn-mod-N-Algorithmus ist eine Erweiterung, die nicht-numerische Zeichenketten unterstützt.
Da der Algorithmus die Ziffern von rechts nach links verarbeitet und Nullziffern das Ergebnis nur dann beeinflussen, wenn sie eine Positionsverschiebung verursachen, hat das Auffüllen einer Zahlenfolge mit Nullen keinen Einfluss auf die Berechnung. Systeme, die auf eine bestimmte Anzahl von Ziffern auffüllen (z. B. durch Umwandlung von 1234 in 0001234), können daher die Luhn-Validierung vor oder nach dem Auffüllen durchführen und erzielen dasselbe Ergebnis.
Der Algorithmus wurde in einem US-Patent [ 1 ] für ein einfaches, handliches, mechanisches Gerät zur Berechnung der Prüfsumme beschrieben. Das Gerät ermittelte die Summe modulo 10 mechanisch. Die Ersatzziffern , d. h. die Ergebnisse der Verdopplungs- und Reduktionsprozedur, wurden nicht mechanisch erzeugt. Stattdessen waren die Ziffern in ihrer permutierten Reihenfolge auf dem Gehäuse des Geräts markiert.
Pseudocode-Implementierung
Die folgende Funktion nimmt eine Kartennummer einschließlich der Prüfziffer als Array von ganzen Zahlen entgegen und gibt true aus , wenn die Prüfziffer korrekt ist, andernfalls false .
Funktion isValid(Kartennummer[1..Länge]) sum := 0 Parität := Länge mod 2 für i von 1 bis (Länge - 1) tue wenn i mod 2 == Parität dann sum := sum + cardNumber[i] elseif cardNumber[i] > 4 then sum := sum + 2 * cardNumber[i] - 9 anders sum := sum + 2 * cardNumber[i] Ende falls Ende für Rückgabe Kartennummer[Länge] == ((10 - (Summe mod 10)) mod 10) Ende Funktion
Verwendung
Der Luhn-Algorithmus wird in einer Vielzahl von Systemen verwendet, darunter:
- Kreditkartennummern
- IMEI-Nummern
- CUSIP- Nummern für nordamerikanische Finanzinstrumente
- Nationale Anbieteridentifikationsnummern in den Vereinigten Staaten
- Kanadische Sozialversicherungsnummern
- Israelische Ausweisnummern
- Südafrikanische Ausweisnummern
- Südafrikanische Steuerreferenznummern
- Schwedische Personenkennnummern
- Schwedische Unternehmensidentifikationsnummern (OrgNr)
- Griechische Sozialversicherungsnummern (ΑΜΚΑ)
- ICCID von SIM-Karten
- Europäische Patentanmeldenummern
- Umfragecodes auf Kassenbons von McDonald's , Taco Bell und Tractor Supply Co.
- Die Sendungsverfolgungsnummern des United States Postal Service verwenden einen modifizierten Luhn-Algorithmus [ 3 ].
- Italienische Umsatzsteuer-Identifikationsnummern ( Partita Iva ) [ 4 ]
Referenzen
- ^ a b US-Patent 2950048A , Luhn, Hans Peter , "Computer for Verifying Numbers", veröffentlicht am 23. August 1960, erteilt am 23. August 1960
- ^ „Anhang B: Luhn-Formel zur Berechnung von Modulo-10-Prüfziffern (Doppeladdition-Doppelprüfung)“. Ausweise – Kennzeichnung der Aussteller – Teil 1: Nummerierungssystem (Norm). Internationale Organisation für Normung und Internationale Elektrotechnische Kommission . Januar 2017. ISO/IEC 7812-1 :2017.
- ^ Publikation 199: Leitfaden zur Implementierung des Intelligent Mail Package Barcode (IMpb) für Bestätigungsdienste und elektronische Zahlungssysteme (PDF) (28. Auflage). Vereinigte Staaten : United States Postal Service . 10. Oktober 2023. Archiviert (PDF) vom Original am 17. November 2023. Abgerufen am 29. November 2023 .
- ^ Albanese, Ilenia (10. August 2022). „A cosa serve la Partita Iva? Ecco cosa sapere“ [Wozu dient eine Umsatzsteuer-Identifikationsnummer? Hier erfahren Sie, was Sie wissen müssen]. Partitaiva.it (auf Italienisch). Archiviert vom Original am 29. Juni 2024. Abgerufen am 29. Juni 2024 .
Anmerkungen
Externe Links
- Luhn-Test von Kreditkartennummern auf Rosetta Code : Implementierung des Luhn-Algorithmus/der Luhn-Formel in 160 Programmiersprachen (Stand: 22. Juli 2024)