Luhn

Luhn

Media

Introducción

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

Un lote de identificadores acaba de llegar a tu mesa. Todos ellos deben superar la prueba de Luhn para garantizar que son legítimos. Si alguno no la supera, se marcará como no válido, lo que evita errores como transacciones incorrectas o verificaciones de cuenta fallidas.

¿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 proporcionará como un string.

Validar un número

Los strings de longitud 1 o menos no son válidos. Se permiten espacios en la entrada, pero hay que eliminarlos antes de comprobar el número. 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 hay que comprobar es 4539 3195 0343 6467.

El primer paso del algoritmo de Luhn es empezar por el final del número y duplicar cada segundo dígito, comenzando 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. Nos queda lo siguiente:

8569 6195 0383 3437

Por último, sumamos todos los dígitos. Si la suma es divisible por 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 por 10, así que el número 4539 3195 0343 6467 es válido!

Número de seguro social canadiense no válido

El número que hay que comprobar es 066 123 478.

Empezamos por el final del número y duplicamos cada segundo dígito, comenzando 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. Nos queda lo siguiente:

036 226 458

Sumamos los dígitos:

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

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

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Zig Exercism

¿Listo para empezar Luhn?

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

¡Análisis en profundidad de Luhn!

Exploramos 8 versiones distintas de Luhn, empezando por una implementación de Ruby muy pulida, pasando por algunos enfoques imperativos y funcionales y terminando con una versión en SQLite que a Erik y Jeremy les costó un poco descifrar.