Un regex de millones de caracteres para validar números de tarjeta con Luhn
El autor construye un DFA para el algoritmo de Luhn y lo convierte en una expresión regular ejecutable, demostrando que la validación de checksums es posible, aunque inviable en producción.
Se ha publicado un análisis técnico que resuelve una pregunta clásica de la informática teórica: ¿puede una expresión regular validar correctamente los dígitos de control de una tarjeta de crédito según el algoritmo de Luhn? La respuesta es sí, aunque el resultado sea una regex de millones de caracteres que nadie debería usar en código real.
El autor parte de un reto intelectual planteado por un colega. A diferencia de las respuestas habituales en StackOverflow, que simplemente emulan los prefijos (IIN) y las longitudes típicas de las grandes entidades emisoras sin verificar la integridad matemática del número, esta solución construye un Automata Finito Determinista (DFA) capaz de reconocer cualquier secuencia válida de longitud arbitraria. El objetivo es puramente técnico: demostrar que el conjunto de números de tarjeta válidos es un lenguaje regular.
La dificultad radica en que los DFAs procesan cadenas de izquierda a derecha, pero el algoritmo de Luhn suele describirse iterando de derecha a izquierda. Para sortearlo, el artículo propone una formulación alternativa basada en la paridad de la longitud total de los dígitos. A partir de ahí, se define la función de "duplicación de Luhn", que no es otra cosa que una permutación sobre el conjunto {0, ..., 9} diseñada para que cualquier transposición de dígitos altere la suma acumulada. Esta propiedad asegura que la suma final, si es válida, será siempre divisible por 10.
Para pasar de la teoría a la práctica, el autor utiliza la librería Python greenery. Esta herramienta permite manipular expresiones regulares como estructuras de datos y ejecutar operaciones conjuntas sobre ellas. Mediante la minimización del DFA resultante y su posterior conversión a regex, se genera una cadena de configuración de patrones extremadamente larga. El texto menciona que herramientas como ripgrep podrían técnicamente ejecutarla, aunque el coste computacional y la complejidad de mantenimiento la hacen inviable para cualquier entorno de producción.
El artículo también toca la normativa PCI DSS. Si bien una regex así no sustituye a los sistemas certificados para el almacenamiento y procesamiento de datos sensibles, entender la estructura matemática detrás de los checksums es útil para arquitectos y desarrolladores que diseñan validaciones de entrada. No se trata de reemplazar las librerías de pago existentes, sino de entender que la validación de integridad de datos no requiere necesariamente llamadas a APIs de verificación en tiempo real, aunque sí requiere gestión cuidadosa de los estados internos del algoritmo.
La pieza sirve de recordatorio de que en la teoría de la computación, si un problema admite una solución con un autómata finito, existe una expresión regular equivalente. El valor aquí no es la utilidad operativa del patrón generado, sino la demostración formal de la equivalencia entre el checksum de Luhn y los lenguajes regulares, un ejercicio que conecta la teoría de autómatas con las restricciones prácticas de las librerías de regex modernas.


