Luhn

Luhn

Einfach

Einführung

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.

Anleitung

Bestimme, ob eine Zahl nach der Luhn-Formel gültig ist.

Die Zahl wird als String übergeben.

Eine Zahl validieren

Strings mit einer Länge von 1 oder weniger sind nicht gültig. Leerzeichen sind in der Eingabe erlaubt, sollten aber vor der Prüfung entfernt werden. Alle anderen Zeichen, die keine Ziffern sind, sind nicht erlaubt.

Beispiele

Gültige Kreditkartennummer

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, angefangen bei der zweiten Ziffer von rechts und dann nach links wandernd.

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

Ist das Ergebnis der Verdopplung einer Ziffer größer als 9, ziehen wir 9 von diesem Ergebnis ab. Dann erhalten wir:

8569 6195 0383 3437

Zum Schluss summieren wir alle Ziffern. Ist die Summe durch 10 teilbar, 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 durch 10 teilbar, also ist die Zahl 4539 3195 0343 6467 gültig!

Ungültige kanadische SIN

Die zu prüfende Zahl ist 066 123 478.

Wir beginnen am Ende der Zahl und verdoppeln jede zweite Ziffer, angefangen bei der zweiten Ziffer von rechts und dann nach links wandernd.

066 123 478
 ↑  ↑ ↑  ↑  (double these)

Ist das Ergebnis der Verdopplung einer Ziffer größer als 9, ziehen wir 9 von diesem Ergebnis ab. Dann erhalten wir:

036 226 458

Wir summieren die Ziffern:

0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36

36 ist nicht durch 10 teilbar, also ist die Zahl 066 123 478 nicht gültig!

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Luhn zu starten?

Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.

Tauche tiefer in Luhn ein!

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!