Un código QR no es más que una cuadrícula de cuadrados blancos y negros que la cámara lee como una larga cadena de unos y ceros. Los tres cuadrados grandes de las esquinas le indican al teléfono dónde está el código y hacia dónde mira, mientras que el resto del patrón transporta los datos junto con copias de respaldo integradas que permiten al código sobrevivir a arañazos, manchas y pegatinas. Veamos cómo funciona cada pieza, en lenguaje sencillo.
De la imagen de la cámara a la cuadrícula de módulos
Cuando apuntas la cámara hacia un código QR, la primera tarea de la aplicación es convertir una foto en algo que un programa pueda procesar. Convierte la imagen a blanco y negro aplicando un umbral de brillo: todo lo más oscuro que esa línea se vuelve negro, y todo lo más claro, blanco. Las fotos borrosas o con sombras dificultan este paso, y por eso un código nítido y bien iluminado se escanea con más fiabilidad.
El cuadrado más pequeño del patrón se llama módulo. Para el lector, cada módulo es un único bit de información: un módulo oscuro es un valor binario, y uno claro, el otro. Todo lo que viene después, desde los cuadrados grandes de las esquinas hasta los propios datos, son solo módulos dispuestos sobre una cuadrícula.
Alrededor del código hay un margen en blanco llamado zona silenciosa, que por convención mide cuatro módulos de ancho. Da a la cámara un borde limpio que detectar y separa el código de los fondos cargados. Un código impreso pegado a otros gráficos es más difícil de escanear precisamente por esta razón.
Los tres patrones de posición
En tres esquinas —superior izquierda, superior derecha e inferior izquierda— se encuentra el rasgo más distintivo del código QR: un cuadrado grande formado por anillos concéntricos, con un anillo exterior oscuro, un anillo claro y un centro oscuro sólido de 3×3. Son los patrones de posición (finder patterns), y resuelven el primer problema al que se enfrenta todo escáner: ¿dónde está el código y en qué orientación se encuentra?
El escáner los localiza deslizando una línea por la imagen y buscando un ritmo muy concreto. Una línea que atraviesa el centro de un patrón de posición cruza oscuro, claro, oscuro, claro, oscuro, con anchos en la proporción 1:1:3:1:1: un módulo oscuro, uno claro, tres oscuros y luego uno y uno otra vez. Esa firma es lo bastante peculiar para destacar sobre casi cualquier otra cosa de una foto.
¿Por qué tres y no cuatro? Tres esquinas bastan para fijar un cuadrado, y la esquina que falta tiene significado: le indica al lector cuál es el lado de arriba. Aunque escanees un código al revés o de lado, el lector sabe exactamente cómo rotar la cuadrícula antes de decodificarlo.
Patrones de temporización y de alineación
Saber dónde están las esquinas no basta. Si el código se fotografió en ángulo o se imprimió sobre una superficie curva, la cuadrícula intermedia puede estar estirada o torcida. Dos estructuras más la mantienen en línea.
El patrón de temporización es una línea discontinua de módulos oscuros y claros alternos que corre entre los patrones de posición: uno por la parte superior y otro por el lateral izquierdo. Funciona como una regla: contando las alternancias, el lector confirma el tamaño exacto de los módulos y cómo debe espaciarse la cuadrícula en todo el código.
El patrón de alineación es un cuadrado anidado más pequeño, de cinco módulos de lado, que aparece a partir de la versión 2 y se coloca hacia la esquina inferior derecha. Los códigos más grandes llevan varios. Cada uno actúa como una referencia adicional que permite al lector medir y corregir la distorsión de su zona de la cuadrícula, algo esencial cuando un código rodea una botella o va en una etiqueta ligeramente arrugada.
Versiones 1 a 40
Los códigos QR existen en 40 tamaños, llamados versiones. La versión 1 es una cuadrícula de 21×21 módulos. Cada versión siguiente añade cuatro módulos por lado, de modo que la versión 2 es de 25×25, la versión 3 de 29×29, y así hasta la versión 40, de 177×177.
Una cuadrícula mayor significa más espacio para los datos. Como regla orientativa, las versiones más grandes pueden almacenar unos 7.000 dígitos, mientras que una URL corta cabe con holgura en un código mucho más pequeño. La capacidad exacta también depende de qué codifiques —los números se comprimen mejor que el texto— y del nivel de corrección de errores que elijas.
Esta es también la razón de que los códigos generados varíen tanto en apariencia. Las herramientas de generación eligen la versión más pequeña que quepa en el contenido, así que un enlace breve produce un código disperso y de módulos gruesos, mientras que uno largo genera un patrón denso y de grano fino.
Palabras de código de datos y de corrección de errores
Una vez que los patrones estructurales han reclamado su espacio, el área restante contiene la carga útil. Los bits se agrupan en unidades de ocho módulos llamadas palabras de código (codewords): cada una es un solo byte de información.
Hay de dos tipos. Las palabras de código de datos transportan el contenido real: la URL, el texto o cualquier otra cosa que codifique el código. Las palabras de código de corrección de errores son copias de repuesto de un tipo especial, calculadas a partir de los datos mediante una rama de las matemáticas llamada codificación Reed–Solomon, la misma familia de técnicas que protegía los datos de los CD y DVD. El lector las usa para comprobar los datos y reparar lo que falte.
Los códigos QR ofrecen cuatro niveles de corrección de errores, llamados L, M, Q y H. A grandes rasgos, pueden restaurar aproximadamente el 7 %, el 15 %, el 25 % o el 30 % de las palabras de código, respectivamente. La contrapartida es el espacio: cuanto más alto es el nivel, más parte del código se reserva para los repuestos y menos queda para los datos, de modo que el mismo contenido puede necesitar una versión mayor.
Por eso un código QR con un logotipo superpuesto en el centro sigue escaneando: el diseñador eligió un nivel de corrección alto y dejó que las palabras de código de repuesto absorbieran la zona cubierta.
Enmascarado
Dejados al azar, los datos en bruto podrían producir una cuadrícula de aspecto incómodo: grandes zonas en blanco o grupos de cuadrados que imitan por accidente un patrón de posición y confunden al escáner. La solución es el enmascarado.
La herramienta de codificación toma uno de los ocho patrones de máscara predefinidos —tableros de ajedrez, rayas horizontales o verticales y diseños repetitivos similares— e invierte cada módulo donde la máscara tiene un cuadrado oscuro. Los datos no cambian; solo su apariencia, y la inversión es perfectamente reversible.
La herramienta prueba las ocho máscaras, puntúa cada resultado con reglas de penalización (cadenas largas del mismo color, imitaciones de patrones de posición, zonas con demasiado desequilibrio entre oscuro y claro) y se queda con la de penalización más baja. Qué máscara se usó queda registrado en una pequeña franja de información de formato junto a los patrones de posición, escrita dos veces por seguridad, para que una esquina rozada no deje al lector adivinando.
Esta es también la razón de que un mismo enlace codificado con dos herramientas distintas pueda producir dos códigos visualmente diferentes. Ambos son correctos; simplemente eligieron máscaras distintas.
Un pequeño ejemplo práctico
Toma el texto «HI». El codificador escribe primero unos bits de configuración —qué tipo de datos siguen y cuánto miden— y después el contenido. Cada carácter se almacena como ocho bits: H se convierte en 01001000 e I en 01001001. Esos dieciséis bits se convierten en dieciséis módulos de la cuadrícula, un bit cada uno.
Los bits se colocan en la cuadrícula en franjas de dos columnas que serpentean hacia arriba y hacia abajo desde la esquina inferior derecha, saltándose las zonas de los patrones de posición, de temporización y de formato. Tras los datos viene un bloque de palabras de código de corrección de errores, calculadas a partir de ellos e insertadas a su lado. Por último se aplica la máscara elegida, que invierte algunos módulos para romper los patrones desafortunados.
Esa es toda la receta: primero la estructura, luego los datos, después los repuestos y por último una máscara. Cada código QR que has escaneado en tu vida es este mismo procedimiento repetido a mayor escala.
La idea clave
Un código QR es una imagen que se describe a sí misma. Los patrones de posición dicen «aquí estoy, y este es el lado de arriba»; los patrones de temporización y de alineación enderezan la cuadrícula; la versión fija el tamaño; las palabras de código transportan tus datos con repuestos integrados, y el enmascarado mantiene el patrón legible. La próxima vez que escanees uno —o generes el tuyo en QRCodeMax.Vip—, acerca la imagen y verás todas estas piezas trabajando juntas.