Luhn

Luhn

Intermedia

Introducción

En la Autoridad Global de Verificación acabas de recibir una asignación crítica. Por toda la ciudad, desde las compras en línea hasta los inicios de sesión seguros, innumerables operaciones dependen de la exactitud de identificadores numéricos como números de tarjetas de crédito, números de cuentas bancarias, códigos de transacción e identificadores de seguimiento. El algoritmo de Luhn es una fórmula de suma de verificación sencilla que sirve para ayudar a identificar números mal escritos.

Acaba de llegar a tu escritorio un lote de identificadores. Todos deben pasar la prueba de Luhn para asegurar que son legítimos. Si alguno falla, se marcará como inválido, lo que evita errores como transacciones incorrectas o verificaciones de cuentas que no se completan.

¿Puedes asegurarte de que esto se haga bien? La integridad de muchos servicios depende de ti.

Instrucciones

Determina si un número es válido según la fórmula de Luhn.

El número se te dará como string.

Cómo validar un número

Los strings de longitud 1 o menos no son válidos. Se permiten espacios en la entrada, pero deben eliminarse antes de la verificación. Cualquier otro carácter que no sea un dígito no está permitido.

Ejemplos

Número de tarjeta de crédito válido

El número que se va a verificar es 4539 3195 0343 6467.

El primer paso del algoritmo de Luhn es comenzar por el final del número y duplicar cada segundo dígito, empezando por el segundo dígito desde la derecha y avanzando hacia la izquierda.

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

Si el resultado de duplicar un dígito es mayor que 9, le restamos 9 a ese resultado. Obtenemos lo siguiente:

8569 6195 0383 3437

Por último, sumamos todos los dígitos. Si la suma es divisible entre 10, el número original es válido.

8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80

80 es divisible entre 10, así que el número 4539 3195 0343 6467 es válido.

SIN canadiense no válido

El número que se va a verificar es 066 123 478.

Comenzamos por el final del número y duplicamos cada segundo dígito, empezando por el segundo dígito desde la derecha y avanzando hacia la izquierda.

066 123 478
 ↑  ↑ ↑  ↑  (double these)

Si el resultado de duplicar un dígito es mayor que 9, le restamos 9 a ese resultado. Obtenemos lo siguiente:

036 226 458

Sumamos los dígitos:

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

36 no es divisible entre 10, así que el número 066 123 478 no es válido.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Bash Exercism

¿Todo listo para empezar Luhn?

Regístrate en Exercism para aprender y dominar Bash con 97 ejercicios y mentoría humana real, todo gratis.

¡Profundiza en Luhn!

Exploramos 8 versiones diferentes de Luhn, comenzando con una implementación de Ruby muy pulcra, explorando algunos enfoques imperativos y funcionales, y terminando con una versión en SQLite que a Erik y Jeremy les costó algo de trabajo descifrar.