Bei der Global Verification Authority wurde dir gerade ein wichtiger Auftrag anvertraut. In der ganzen Stadt, von Online-Käufen bis hin zu sicheren Logins, verlassen sich unzählige Vorgänge auf die Korrektheit numerischer Kennungen wie Kreditkartennummern, Bankkontonummern, Transaktionscodes und Tracking-IDs. Der Luhn-Algorithmus ist eine einfache Prüfsummenformel, mit der sich falsch eingegebene Zahlen erkennen lassen.
Gerade ist ein Stapel Kennungen auf deinem Schreibtisch eingetroffen. Alle müssen den Luhn-Test bestehen, damit sichergestellt ist, dass sie echt sind. Wenn eine durchfällt, wird sie als ungültig markiert. So lassen sich Fehler wie falsche Transaktionen oder fehlgeschlagene Kontoverifizierungen vermeiden.
Kannst du dafür sorgen, dass das richtig gemacht wird? Die Integrität vieler Dienste hängt von dir ab.
Bestimme, ob eine Zahl nach der Luhn-Formel gültig ist.
Die Zahl wird als String übergeben.
Strings der Länge 1 oder weniger sind nicht gültig. Leerzeichen sind in der Eingabe erlaubt, aber sie sollten vor der Prüfung entfernt werden. Alle anderen Zeichen, die keine Ziffern sind, sind unzulässig.
Die zu prüfende Zahl ist 4539 3195 0343 6467.
Der erste Schritt des Luhn-Algorithmus besteht darin, am Ende der Zahl zu beginnen und jede zweite Ziffer zu verdoppeln. Du fängst bei der zweiten Ziffer von rechts an und gehst nach links.
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
Ergibt das Verdoppeln einer Ziffer einen Wert größer als 9, ziehen wir 9 von diesem Ergebnis ab. Wir erhalten:
8569 6195 0383 3437
Zum Schluss summieren wir alle Ziffern. Wenn die Summe ohne Rest durch 10 teilbar ist, ist die ursprüngliche Zahl gültig.
8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80
80 ist ohne Rest durch 10 teilbar, also ist die Zahl 4539 3195 0343 6467 gültig!
Die zu prüfende Zahl ist 066 123 468.
Wir beginnen am Ende der Zahl und verdoppeln jede zweite Ziffer. Wir fangen bei der zweiten Ziffer von rechts an und gehen nach links.
066 123 478
↑ ↑ ↑ ↑ (double these)
Ergibt das Verdoppeln einer Ziffer einen Wert größer als 9, ziehen wir 9 von diesem Ergebnis ab. Wir erhalten:
036 226 458
Wir summieren die Ziffern:
0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36
36 ist nicht ohne Rest durch 10 teilbar, also ist die Zahl 066 123 478 nicht gültig!
Melde dich bei Exercism an, um YAMLScript mit 60 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.
Wir erkunden 8 verschiedene Versionen von Luhn, beginnen mit einer sehr aufgeräumten Ruby-Implementierung, schauen uns einige imperative und funktionale Ansätze an und landen schließlich bei einer SQLite-Version, die Erik und Jeremy nur mit einiger Mühe entschlüsseln konnten!