Desafío
Escriba el programa o función más corto para calcular el algoritmo de Luhn para verificar los números (tarjeta de crédito).
Algoritmo de Luhn explicado
Desde RosettaCode , este algoritmo para los propósitos de este desafío se especifica como tal, con la entrada de ejemplo de 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
Reglas IO
Entrada : una cadena o número (su elección), en el formato de entrada / salida de su idioma de elección
Salida : Un valor verdadero o falso , respectivamente, que indica si la entrada es válida o no de acuerdo con la prueba anterior.
Notas / Consejos
Intente no publicar accidentalmente su propia tarjeta de crédito o números de cuenta, si los usa para probar :)
Si la entrada es inválida e imposible de procesar con el algoritmo especificado (es decir, demasiado corto para trabajar), puede hacer lo que quiera, incluso hacer estallar mi computadora.
Sin embargo , la viñeta anterior no significa que su idioma pueda hacer lo que quiera con Números que son demasiado grandes para manejarlos. Si su idioma no es capaz de manejar un caso de prueba, considere tomar una cadena como entrada.
Ejemplos
Los siguientes ejemplos fueron validados con este script Python ; Si cree que uno está equivocado o tiene una pregunta, simplemente haga ping a @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 **
** según la implementación de Python, pero puede hacer cualquier cosa porque estos son demasiado cortos para ser elegibles por un estricto cumplimiento de la especificación.
Si alguno de los anteriores invalida las respuestas existentes (aunque creo que eso no debería ser posible), esas respuestas aún son válidas. Sin embargo, las nuevas respuestas, para ser válidas, deben seguir la especificación anterior.