Herausforderung
Schreiben Sie das kürzeste Programm oder die kürzeste Funktion zur Berechnung des Luhn-Algorithmus zur Überprüfung von Kreditkartennummern.
Luhn-Algorithmus erklärt
Von RosettaCode wird dieser Algorithmus für die Zwecke dieser Herausforderung als solcher angegeben, mit der Beispieleingabe von 49927398716
:
Reverse the digits, make an array:
6, 1, 7, 8, 9, 3, 7, 2, 9, 9, 4
Double the numbers in odd indexes:
6, 2, 7, 16, 9, 6, 7, 4, 9, 18, 4
Sum the digits in each number:
6, 2, 7, 7, 9, 6, 7, 4, 9, 9, 4
Sum all of the numbers:
6 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 4 = 70
If the sum modulo 10 is 0, then the number is valid:
70 % 10 = 0 => valid
IO-Regeln
Eingabe : Eine Zeichenfolge oder Zahl (Ihre Wahl) im Eingabe- / Ausgabeformat Ihrer Sprache
Ausgabe : Ein wahrer oder falscher Wert , der angibt, ob die Eingabe gemäß dem obigen Test gültig ist oder nicht.
Hinweise / Tipps
Versuchen Sie nicht, versehentlich Ihre eigenen Kreditkarten- oder Kontonummern zu veröffentlichen, wenn Sie diese zum Testen verwenden :)
Wenn die Eingabe ungültig und mit dem angegebenen Algorithmus nicht zu verarbeiten ist (dh zu kurz, um damit zu arbeiten), können Sie alles tun, was Sie wollen, auch meinen Computer in die Luft jagen.
Das vorige Aufzählungszeichen bedeutet jedoch nicht, dass Ihre Sprache mit Zahlen, die zu groß sind, um sie verarbeiten zu können, tun kann, was sie will. Wenn Ihre Sprache keinen Testfall verarbeiten kann, sollten Sie eine Zeichenfolge als Eingabe verwenden.
Beispiele
Die folgenden Beispiele wurden mit diesem Python-Skript überprüft. Wenn Sie der Meinung sind, dass eine falsch ist oder eine Frage hat, senden Sie einfach einen Ping an @cat.
49927398716 True
49927398717 False
1234567812345670 True
1234567812345678 False
79927398710 False
79927398711 False
79927398712 False
79927398713 True
79927398714 False
79927398715 False
79927398716 False
79927398717 False
79927398718 False
79927398719 False
374652346956782346957823694857692364857368475368 True
374652346956782346957823694857692364857387456834 False
8 False **
0 True **
** Gemäß der Python-Implementierung können Sie jedoch alles Mögliche tun, da diese zu kurz sind, um durch strikte Einhaltung der Spezifikation in Frage zu kommen.
Wenn eine der oben genannten Antworten vorhandene Antworten ungültig macht (obwohl ich glaube, dass dies nicht möglich sein sollte), sind diese Antworten weiterhin gültig. Jedoch neue Antworten, um gültig zu sein, sollten die Spezifikation oben folgen.