1. Por qué un código QR se lee aunque esté sucio o dañado
Cuando escaneas un código QR con marcas de dedos o pequeñas roturas, el dispositivo puede recuperarlo gracias a una característica especial. A diferencia del texto normal, donde si falta una letra la palabra cambia de significado o se vuelve ilegible, los códigos QR están diseñados para resistir pérdidas parciales. Esto es posible porque, desde el principio, el código incluye datos redundantes junto con la información original. Estos datos extra permiten calcular y recuperar la parte que falta mediante algoritmos matemáticos[1].
La clave no es adivinar qué había antes, sino usar la relación matemática entre los datos visibles para reconstruir los ocultos o dañados. Si el sistema detecta una inconsistencia en los datos recibidos, utiliza estos códigos de corrección para restaurar la información original. Así, aunque haya daños, es posible recuperar los datos originales a partir de las partes que quedan intactas[1].
2. Cómo y cuándo se creó el código QR en Denso
El código QR fue creado en 1994 por un equipo de dos personas, entre ellas Masahiro Hara, en Denso (actualmente Denso Wave). En aquella época, los códigos de barras tradicionales solo podían almacenar unos 20 caracteres alfanuméricos como máximo. Los trabajadores que usaban estos sistemas debían escanearlos unas 1.000 veces al día para gestionar inventarios y procesos[5]. El desarrollo del código QR tomó aproximadamente un año y medio.
La nueva solución permitía almacenar unos 7.000 caracteres numéricos e incluso incluía kanji (caracteres chinos usados en japonés). Esta capacidad masiva de datos hizo necesario establecer estándares internacionales para su uso correcto. El código QR se estandarizó como norma AIM en 1997, como norma JIS en Japón en 1999 y como norma internacional ISO/IEC 18004 en el año 2000. Dentro de estos estándares, se declaró que no se ejercerían derechos de patente[6].
3. Cómo se crean los datos extra para recuperar información perdida
Para entender la corrección de errores, imagina que quieres recordar tres números: 3, 5 y 2. Si además memorizas su suma total (10), puedes recuperar cualquier número si falta uno. Por ejemplo, si no recuerdas el "5", pero sabes que los otros son 3 y 2, y que la suma es 10, puedes calcular que el número perdido era 5 (10 - 3 - 2 = 5). Así, un dato extra te permite recuperar información perdida[1].
En los códigos QR reales, este proceso es más complejo, pero la idea es similar. Según la página oficial de QR Code, si tienes 100 unidades de datos y quieres corregir hasta 50 errores, necesitas añadir otros 100 unidades de datos de corrección usando el código Reed-Solomon. Esto significa que el total pasa a ser 200 unidades, pero solo 50 pueden estar dañadas. La tasa de corrección es entonces del 25% (50 dividido entre 200). En los códigos QR, la unidad básica se llama "codeword" y equivale a 8 bits[1].
4. El código Reed-Solomon, el método matemático de corrección de errores
El método utilizado se conoce como código Reed-Solomon, desarrollado en 1960 por Reed y Solomon. Esta técnica se usa no solo en códigos QR, sino también en CDs, DVDs y comunicaciones satelitales[2]. En los códigos QR, la información de los pequeños cuadrados blancos y negros se agrupa en bloques de 8 bits llamados "codewords". Estos grupos actúan como unidades básicas para la corrección.
Este tipo de código es especialmente resistente a daños continuos o agrupados. La regla general es que para corregir t errores en los símbolos de datos, se necesitan 2t símbolos adicionales de corrección[2]. Por eso, en el ejemplo anterior, para corregir 50 errores se necesitaban 100 datos extra. Los codewords del QR funcionan como estos símbolos base, lo que explica por qué son robustos ante ciertos tipos de deterioro físico[3].
5. Los cuatro niveles de corrección (L, M, Q y H): más protección, mayor tamaño
Los códigos QR tienen cuatro niveles de corrección de errores: L, M, Q y H. Se estima que estos permiten corregir aproximadamente el 7%, 15%, 25% y 30% de los datos dañados, respectivamente. Cuanto más alto es el nivel, mayor es la capacidad de recuperación, pero también aumenta la cantidad de datos extra necesarios, haciendo que el código sea más grande[1]. El nivel M es el más común en la práctica.
El tamaño del código depende de su "versión", que va de 1 a 40. La versión 1 tiene una matriz de 21×21 módulos, mientras que la versión 40 llega a 177×177. Cada vez que sube la versión, el lado aumenta en 4 módulos. Esto significa que el número total de celdas pasa de 441 a 31.329, unas 71 veces más grande[7]. Si quieres meter 100 dígitos numéricos con nivel M, necesitarás la versión 3 (29×29 módulos). Aquí existe un intercambio claro: para proteger contra daños, el código crece; si necesitas imprimirlo pequeño, debes reducir la protección[7].
6. Por qué el 30% del nivel H no significa tapar el 30% de la superficie
A menudo se dice que con el nivel H puedes ocultar hasta el 30% del código QR y seguir leyéndolo. ¿Significa esto que puedes cubrir el 30% de la superficie visual? La respuesta oficial indica que la tasa de corrección se refiere a la proporción de codewords (unidades de datos), no al área física. El daño o la suciedad no siempre afectan solo a los datos de corrección, por lo que medir en unidades de información es más preciso que medir centímetros cuadrados[1][3].
Una prueba individual realizada por un usuario en la plataforma Qiita mostró resultados interesantes. Al colocar un logotipo en el centro, con nivel H y cubriendo el 40% del lado (aproximadamente el 21% del área), el código se leía correctamente. Sin embargo, con nivel L y cubriendo el mismo tamaño (40% del lado, ~23% del área), fallaba. El autor sugiere que la falla en nivel L pudo deberse a que la versión del código bajó o a que el logo tapó los patrones de detección de posición, que no están protegidos por la corrección de errores. Esto es solo un caso particular y no una regla fija, pero demuestra que la relación entre área cubierta y legibilidad no es directa[4].
7. Preguntas para seguir investigando sobre cómo se crean los códigos QR
Si te interesa profundizar en el tema, puedes plantear algunas preguntas desde la perspectiva de quien crea los códigos. Por ejemplo: ¿qué nivel de corrección (L, M, Q o H) sería más adecuado para una pequeña etiqueta en un tren frente a un gran cartel en una tienda? Considera las razones detrás de tu elección.
También puedes hacer cálculos simples. Si tienes 100 unidades de datos y quieres corregir hasta 150 errores (usando la regla 2t), ¿cuántos datos extra necesitas? Y cuando veas la afirmación "oculta el 30%", pregúntate: ¿el 30% de qué exactamente? Para consultar fuentes fiables en japonés, puedes visitar las páginas de Denso Wave sobre corrección de errores, versiones e historia, así como la página de desarrollo del código QR[1][7][6][5].