Qraft

Las matemáticas detrás de los códigos QR - Campos finitos y corrección de errores Reed-Solomon

Por qué los códigos QR dañados siguen escaneándose

Los códigos QR incluyen datos redundantes calculados mediante algoritmos matemáticos. Esta redundancia permite reconstruir la información original incluso cuando partes del código están dañadas, sucias u oscurecidas. La matemática detrás de esto, los códigos Reed-Solomon sobre campos finitos, es la misma tecnología que protege los datos en CDs, transmisiones satelitales y almacenamiento en la nube.

Campos finitos - La base matemática

Los códigos QR operan en GF(2^8), un campo finito con exactamente 256 elementos. A diferencia de la aritmética ordinaria donde los números se extienden hasta el infinito, la aritmética de campos finitos se envuelve dentro de un conjunto fijo. Cada byte de datos (0-255) corresponde a un elemento en este campo. La suma se realiza mediante XOR y la multiplicación usa tablas logarítmicas, asegurando que todos los resultados permanezcan dentro de los 256 elementos.

Cómo funcionan los códigos Reed-Solomon - Proteger datos con polinomios

Los datos del código QR se representan como coeficientes de un polinomio. El algoritmo Reed-Solomon evalúa este polinomio en puntos adicionales, creando símbolos de redundancia. Si algunos puntos de datos se dañan, los puntos restantes más los símbolos de redundancia contienen suficiente información para reconstruir el polinomio original. Es como definir una línea recta: necesitas 2 puntos, pero si tienes 5, puedes perder 3 y aún determinar la línea.

Las dos cifras de los niveles de corrección de errores: tasa de recuperación y proporción de redundancia

Al hablar de los niveles de corrección de errores conviene separar dos cifras que suelen confundirse. La primera es la tasa de recuperación: cuánto daño puede soportar el código, alrededor del 7% en el nivel L, 15% en M, 25% en Q y 30% en H. La segunda es la proporción de redundancia: cuántas de las palabras de código que caben en el símbolo quedan reservadas para la corrección de errores. La frase habitual «el nivel H se lee aunque se destruya el 30% del código» se refiere a la primera cifra, no a la parte del símbolo dedicada a la corrección.

La proporción de redundancia aparece en el desglose de palabras de código que fija la norma ISO/IEC 18004. La versión 1 (21 × 21 módulos) contiene 26 palabras de código en total: el nivel L las reparte en 19 de datos más 7 de corrección, y el nivel H en 9 de datos más 17 de corrección. Eso supone cerca del 27% de corrección en el nivel L y cerca del 65% en el nivel H, mucho más que el 7% y el 30% que se citan de costumbre. La diferencia se explica porque Reed-Solomon gasta dos palabras de corrección por cada palabra corrompida que arregla, y porque la norma no agota a propósito su capacidad de corrección, para rechazar un código muy dañado en lugar de «recuperarlo» como un dato distinto. Es el compromiso fundamental de Shannon en forma concreta: la fiabilidad en un canal con ruido se paga con redundancia.

El reparto decide además el tamaño físico. En la versión 1 el nivel L guarda 19 palabras de código de datos frente a las 9 del nivel H, así que llevar los mismos datos en nivel H exige aproximadamente el doble de palabras de código y, por tanto, una versión mayor: lo que cabe en la versión 3 (29 × 29 módulos) con nivel L puede necesitar la versión 5 (37 × 37 módulos) con nivel H. Los niveles L o M encajan cuando el espacio de impresión es escaso; el nivel H, en entornos exteriores o de fábrica donde la suciedad y el desgaste son probables.

Matemáticas avanzadas ocultas en la vida cotidiana

Cada vez que escaneas un código QR, tu teléfono realiza aritmética de campos finitos, evaluación de polinomios y decodificación de síndromes en milisegundos. Las mismas matemáticas protegen tus fotos en discos duros, tus llamadas telefónicas vía satélite y tus transacciones financieras. Los códigos QR son quizás el ejemplo más visible de matemáticas abstractas avanzadas funcionando silenciosamente en la vida cotidiana.