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.
Determina si un número es válido según la fórmula de Luhn.
El número se proporcionará como un string.
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.
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!
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.
Regístrate en Exercism para aprender y dominar PowerShell con 136 ejercicios y mentoría humana real, todo gratis.
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.