www.wikidata.de-de.nina.az
Der Luhn Algorithmus oder die Luhn Formel auch bekannt als Modulo 10 oder mod 10 Algorithmus und als Double Add Double Methode ist eine einfache Methode zur Berechnung einer Prufsumme Er wurde in den 1950er Jahren von dem deutsch amerikanischen Informatiker Hans Peter Luhn entwickelt zum Patent angemeldet 1 und ist heute gemeinfrei und sehr weit verbreitet Unter anderem dient der Luhn Algorithmus der Verifizierung von Kreditkartennummern und kanadischen Sozialversicherungsnummern ISINs und den siebenstelligen Kontonummern der Deutschen Bank und der Commerzbank sowie vieler Sparkassen Er kommt auch bei den Nummern der Lokomotiven und Triebwagen nach dem Kennzeichnungsschema der UIC zum Einsatz ebenso wie seit 1968 schon im Baureihenschema der Bundesbahn Loknummer mit Prufziffer 2 nach dem Luhn Algorithmus bei der Deutschen BahnDer Luhn Algorithmus erkennt jeden Fehler an einzelnen Ziffern ebenso in den meisten Fallen Vertauschungen von benachbarten Ziffern Inhaltsverzeichnis 1 Informelle Erlauterung 2 Beispielimplementierungen 2 1 Pseudo Code 2 2 Java 2 3 JavaScript 2 4 Python 2 5 VB VBA 2 6 TSQL 3 Beispiel 4 Anwendung bei der Girocard ehemals EC Karte 5 Weblinks 6 EinzelnachweiseInformelle Erlauterung BearbeitenDer Luhn Algorithmus nutzt eine Prufziffer die in der Regel hinten an die unvollstandige Identifikationsnummer angehangt ist Auf diese Weise ergibt sich die vollstandige Nummer Diese wird als gultig angesehen wenn sie den folgenden Pruf Algorithmus besteht Durchlaufe die Nummer mit der Prufziffer ziffernweise von rechts nach links und bilde die Summe der Ziffern aber Verdoppele dabei jede zweite Ziffer und wenn dabei ein Wert grosser als 9 herauskommt subtrahiere 9 Wenn die Summe als letzte Ziffer eine 0 hat erkenne die Nummer als gultig an und sonst nichtUm beispielsweise die Nummer 18937 zu prufen Prufziffer ist hier 7 werden die Ziffern von rechts nach links also beginnend bei der 7 durchlaufen und aufsummiert Jede zweite Ziffer wird dabei verdoppelt also in diesem Beispiel die 3 und die 8 Da beim Verdoppeln der 8 ein Wert grosser als 9 herauskommt wird hiervon 9 subtrahiert sodass sich 16 9 7 ergibt Somit wird die Summe berechnet als 7 2 3 9 2 8 9 1 7 6 9 7 1 30 Da die 30 auf 0 endet ist die Nummer gultig Technisch gesehen wird eine gewichtete Quersumme der Zahl berechnet mit der besonderen Behandlung jeder zweiten Stelle Das Ergebnis wird modulo 10 reduziert dies bedeutet dass es nicht auf das Ergebnis selbst ankommt sondern nur auf den Rest der bei ganzzahliger Division durch 10 herauskommt Dieser Rest ist gleich der letzten Stelle des Ergebnisses Ist dieser Rest gleich 0 was gleichbedeutend damit ist dass das Ergebnis durch 10 teilbar ist so wird die Nummer als gultig angesehen ansonsten nicht Der Luhn Algorithmus erkennt es wenn bei der Eingabe einer Nummer versehentlich eine Ziffer falsch eingegeben wird Damit verandert sich die Summe um einen Betrag zwischen 1 und 9 und ist damit nicht mehr durch 10 teilbar Wenn in obigem Beispiel statt der 1 eine 4 eingegeben wird so ist das Ergebnis 33 und damit nicht durch 10 teilbar Wenn statt der 8 eine 6 eingegeben wird ist das Ergebnis 26 und damit nicht durch 10 teilbar Eine einzelne falsche Zifferneingabe wurde auch bei einer normalen Quersummenbildung erkannt nicht dagegen einer der haufig vorkommenden Zahlendreher also die Vertauschung zweier aufeinander folgenden Ziffern Die normale Quersumme wurde sich dadurch nicht andern Der Luhn Algorithmus erkennt einen solchen Zahlendreher dadurch dass nunmehr eine andere Ziffer als vorher verdoppelt wird und sich die Quersumme andert Beispielsweise ist die Zahl 190 gultig Luhn Prufsumme 10 910 jedoch nicht Luhn Prufsumme 11 d h der Zahlendreher 19 zu 91 wird erkannt Ausgenommen sind lediglich Zahlendreher der Ziffern 0 und 9 da ihre Quersummen mit und ohne Verdopplung jeweils gleich sind So sind beispielsweise 190 und 109 beide gultig Luhn Prufsumme 10 d h der Zahlendreher 90 zu 09 wird nicht erkannt Nicht erkannt werden Vertauschungen von Ziffern deren Positionen sich um einen geraden Betrag unterscheiden wenn also beispielsweise die 3 und die 5 Ziffer oder die 2 und 6 Ziffer vertauscht werden Ebenso wird moglicherweise nicht erkannt wenn zwei oder mehr Ziffern falsch eingegeben werden Beispielimplementierungen BearbeitenBei den folgenden Implementierungen des Algorithmus wird die Nummer als Zeichenfolge also als String number an die Funktion checkLuhn ubergeben In der Funktion wird dieser String in naturlicher Weise von links nach rechts durchlaufen also umgekehrt als in der Definition des Algorithmus Indem aber zu Anfang ermittelt wird ob die Lange des Strings gerade oder ungerade ist gelingt es trotzdem die Ziffern an den richtigen Positionen zu verdoppeln Pseudo Code Bearbeiten function checkLuhn string number int sum 0 int lng length number int parity lng modulo 2 for i from 0 to lng 1 int digit toInteger number i if i modulo 2 parity digit digit 2 if digit gt 9 digit digit 9 sum sum digit return sum modulo 10 0 Java Bearbeiten public static boolean check int digits int sum 0 int length digits length for int i 0 i lt length i get digits in reverse order int digit digits length i 1 every 2nd number multiply with 2 if i 2 1 digit 2 sum digit gt 9 digit 9 digit return sum 10 0 JavaScript Bearbeiten function check code if Number isNaN code return var len code length var parity len 2 var sum 0 for var i len 1 i gt 0 i var d parseInt code charAt i if i 2 parity d 2 if d gt 9 d 9 sum d return sum 10 toString Python Bearbeiten def checkLuhn number sum 0 parity len number 2 for i digit in enumerate int x for x in number if i 2 parity digit 2 if digit gt 9 digit 9 sum digit return sum 10 0 Oder def checkLuhn number digits list map int number return 0 sum digits d d gt 4 for d in digits 2 2 10 VB VBA Bearbeiten Public Function checkLuhn number As String As Long Dim StringLength As Long parity As Long sum As Long i As Long digit As Long StringLength Len number parity StringLength Mod 2 sum 0 For i StringLength To 1 Step 1 digit CLng Mid number i 1 If i Mod 2 lt gt parity Then digit digit 2 If digit gt 9 Then digit digit 9 End If End If sum sum digit Next i checkLuhn sum Mod 10 End Function TSQL Bearbeiten CREATE FUNCTION FN CheckLuhn Input NVARCHAR MAX RETURNS BIT BEGIN DECLARE CurrentDigit INT DECLARE Cnt INT 0 DECLARE Checksum BIGINT 0 check if input is numeric else return null IF ISNUMERIC Input 0 RETURN NULL WHILE Cnt lt LEN Input BEGIN get next rightmost digit SET CurrentDigit CAST SUBSTRING Input LEN Input Cnt 1 AS INT add double every second digit SET CurrentDigit CurrentDigit CurrentDigit Cnt 2 IF CurrentDigit gt 9 SET CurrentDigit CurrentDigit 9 SET Checksum Checksum CurrentDigit SET Cnt Cnt 1 END RETURN IIF Checksum 10 0 1 0 END GOBeispiel BearbeitenGegeben sei die Beispielidentifikationsnummer 446 667 651 Ziffer Verdoppelt Reduziert Summe der Ziffern1 1 15 10 10 9 16 6 67 14 14 9 56 6 66 12 12 9 36 6 64 8 8 84 4 4Gesamtsumme 40Die Summe 40 wird ganzzahlig durch 10 dividiert der Rest ist 0 also ist die Nummer gultig Anwendung bei der Girocard ehemals EC Karte BearbeitenBei der Girocard unterscheidet sich die Berechnung der Nummer geringfugig Es wird namlich jede zweite Ziffer ausgehend von der ganz rechten statt der zweiten von rechts verdoppelt Weblinks BearbeitenLuhn mod 10 Prufziffer Rechner Luhn mod 10 Fehlerprufung ahnlich siehe Check Digit Verification of CAS Registry NumbersEinzelnachweise Bearbeiten Patent US2950048A Computer for verifying numbers Angemeldet am 1 Juni 1954 veroffentlicht am 23 August 1960 Anmelder International Business Machines Corporation Erfinder Hans P Luhn Abgerufen von https de wikipedia org w index php title Luhn Algorithmus amp oldid 234780270