Wyzwanie
Napisz najkrótszy program lub funkcję do obliczenia algorytmu Luhna do weryfikacji liczb (karty kredytowej).
Algorytm Luhna wyjaśniony
Z RosettaCode ten algorytm na potrzeby tego wyzwania jest określony jako taki, z przykładowym wejściem 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
Zasady IO
Dane wejściowe : ciąg lub liczba (do wyboru) w wybranym formacie wejściowym / wyjściowym języka
Wyjście : odpowiednio wartość prawdy lub fałszu , wskazująca, czy dane wejściowe są prawidłowe zgodnie z powyższym testem.
Uwagi / wskazówki
Staraj się nie publikować przypadkowo własnych numerów kart kredytowych lub kont, jeśli używasz ich do testowania :)
Jeśli dane wejściowe są niepoprawne i niemożliwe do przetworzenia przy użyciu określonego algorytmu (tj. Zbyt krótki, aby pracować z nim), możesz zrobić, co chcesz, w tym wysadzić mój komputer.
Jednak poprzedni punkt nie oznacza, że Twój język może robić, co chce, z liczbami, które są zbyt duże, aby można go było obsługiwać. Jeśli twój język nie jest w stanie obsłużyć przypadku testowego, rozważ wzięcie ciągu jako danych wejściowych.
Przykłady
Poniższe przykłady zostały sprawdzone przy pomocy tego skryptu Python ; jeśli uważasz, że ktoś się myli lub masz pytanie, po prostu ping @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 **
** zgodnie z implementacją Pythona, ale możesz zrobić wszystko, ponieważ są one zbyt krótkie, aby można je było spełnić poprzez ścisłe przestrzeganie specyfikacji.
Jeśli którakolwiek z powyższych unieważnia istniejące odpowiedzi (choć uważam, że nie powinno to być możliwe), to te odpowiedzi są nadal ważne. Jednak nowe odpowiedzi, aby były poprawne, powinny być zgodne z powyższą specyfikacją.