¿Cómo funcionan los códigos QR?

Qué hace cada parte del patrón, cómo una cámara convierte los cuadrados de nuevo en texto y por qué un código con un agujero sigue escaneándose.

Respuesta cortaUn código QR guarda datos como cuadrados negros y blancos llamados módulos. Unos patrones fijos en las esquinas permiten al lector encontrar y orientar el código; el resto de la cuadrícula contiene los datos y unos códigos de corrección de errores Reed–Solomon que permiten reconstruir el texto original aunque parte del símbolo no se pueda leer.

Las partes del patrón

No todos los cuadrados de un código QR llevan datos. Una parte considerable es estructura, y saber qué es cada cosa explica casi todo el comportamiento del formato.

Las estructuras fijas de todo código QR
ParteDóndeQué hace
Patrones de localizaciónTres esquinasCuadrados grandes, uno dentro de otro, que permiten al lector situar el código y deducir su rotación.
SeparadoresAlrededor de cada patrón de localizaciónUn borde blanco de un módulo que evita que el patrón se confunda con los datos cercanos.
Patrones de sincronizaciónUna fila y una columnaMódulos negros y blancos alternos que indican al lector el tamaño y el paso de la cuadrícula.
Patrones de alineaciónVersión 2 en adelanteCuadrados más pequeños que corrigen la deformación de perspectiva al escanear en ángulo o sobre una curva.
Información de formatoJunto a los patrones de localizaciónQué nivel de corrección de errores y qué máscara se usaron. Se guarda dos veces para que resista los daños.
Zona de silencioFuera del símboloCuatro módulos de espacio libre. No es decoración: sin ella, el lector no sabe dónde termina el código.

Todo lo que queda contiene el mensaje y su corrección de errores, escritos en zigzag desde la esquina inferior derecha hacia arriba, de dos en dos columnas.

Versiones: cómo crece la cuadrícula

Los códigos QR existen en cuarenta tamaños, llamados versiones. La versión 1 mide 21 × 21 módulos; cada paso añade cuatro módulos por lado, así que la versión 40 mide 177 × 177. Un generador elige la versión más pequeña en la que caben tus datos con el nivel de corrección pedido.

Por eso una URL corta produce un código visiblemente más grueso que una larga al mismo tamaño impreso. El cuadrado físico es el mismo; el número de módulos que se meten dentro, no. Un código grueso tolera la poca luz, la impresión barata y la distancia. Uno denso, no.

El generador de este sitio indica la versión y el número de módulos bajo cada código que crea, para que veas la densidad antes de mandarlo a imprenta.

Corrección de errores: por qué los daños no importan

Los códigos QR usan corrección de errores Reed–Solomon, la misma familia de matemáticas que hace que un CD rayado siga sonando. Los datos redundantes se intercalan por todo el símbolo, de modo que lo que se pierde en una zona se puede reconstruir con la información de otra.

Los cuatro niveles de corrección de errores
NivelRecuperableUso típico
L (bajo)alrededor del 7 %Pantallas limpias, máximo de datos en mínimo espacio.
M (medio)alrededor del 15 %El valor por defecto habitual. Buen equilibrio para impresión.
Q (cuartil)alrededor del 25 %Impresos que se van a manosear, o códigos con un logo en el centro.
H (alto)alrededor del 30 %Etiquetas industriales, mucho desgaste, logos grandes superpuestos.

Más corrección no sale gratis: la redundancia ocupa capacidad, así que el mismo texto empuja el código a una versión mayor con módulos más pequeños. A partir de cierto punto, la robustez extra se anula porque los módulos son demasiado pequeños para leerse con fiabilidad.

Por ese equilibrio, este generador usa el nivel Q en los códigos hasta la versión 12 y baja a M por encima. Por debajo de ese umbral, la protección extra compensa la densidad; por encima, los módulos más pequeños hacen fallar más lecturas de las que salva la redundancia. Si añades un logo en el centro, sube a H para que el código aguante la zona tapada.

Máscaras: por qué dos enlaces parecidos se ven totalmente distintos

Una codificación en bruto puede producir fácilmente grandes zonas en blanco, tiradas largas del mismo color o formas que recuerdan a un patrón de localización, y todo eso confunde a los lectores. Para evitarlo, el codificador aplica una máscara: un patrón regular combinado mediante XOR sobre la zona de datos para romper esas tiradas.

Hay ocho máscaras definidas. El codificador prueba todas, puntúa cada resultado según unas reglas que penalizan los rasgos indeseables y se queda con la mejor. La máscara elegida se anota en la información de formato para que el lector pueda deshacerla.

Por eso cambiar un solo carácter de una URL puede reorganizar todo el patrón: puede que ahora gane otra máscara, y toda la zona de datos se transforma de otra manera.

Qué pasa cuando apuntas la cámara a uno

  1. El fotograma de la cámara se convierte a blanco y negro mediante un umbral.
  2. El software busca la proporción 1:1:3:1:1 de un patrón de localización a lo largo de líneas horizontales y verticales.
  3. Los tres patrones de localización dan la posición, la escala y la rotación; los de alineación corrigen la perspectiva.
  4. Los patrones de sincronización fijan la cuadrícula de módulos y se lee la información de formato para saber la máscara y el nivel de corrección.
  5. Se quita la máscara, se separan los bloques de datos y de corrección y la descodificación Reed–Solomon repara los daños.
  6. Los bytes resultantes se interpretan —como URL, tarjeta de contacto o texto— y el móvil ofrece la acción correspondiente.

Todo eso ocurre muchas veces por segundo, y por eso el código parece resolverse en cuanto entra en el encuadre.

Mira la versión, el nivel de corrección y el número de módulos de tu propio enlace:Generar un código QR

Preguntas relacionadas

Por la corrección de errores Reed–Solomon. La información redundante está repartida por todo el símbolo, así que puede faltar entre un 7 % y un 30 % —según el nivel elegido al crear el código— y los datos originales se reconstruyen exactamente.

Es el margen en blanco de cuatro módulos alrededor del símbolo, y sí. Sin él, el lector no puede saber dónde acaba el código y dónde empieza el diseño de alrededor. Recortar la zona de silencio para que encaje en un diseño es la causa más común de que un código impreso falle.

Porque el codificador elige la máscara, de entre ocho, que mejor puntúa para esos datos concretos, y un cambio de un carácter puede cambiar la ganadora. La máscara se aplica con XOR a toda la zona de datos, así que otra elección reorganiza el código entero.

Tienen que ser oscuros sobre fondo claro y con buen contraste. Negro sobre blanco es lo más fiable; una tinta oscura sobre un fondo pálido suele funcionar. Invertirlos a claro sobre oscuro rompe muchos lectores, y los acabados metálicos o de poco contraste reducen mucho la tasa de lectura. Por eso este generador exige un contraste mínimo de 4,5:1 y rechaza los colores invertidos.