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