Explicación
¿Qué es un código QR?
Un código QR es un código de barras bidimensional que guarda texto en una cuadrícula de cuadros blancos y negros. Esta guía desmonta uno —las marcas de las esquinas, la zona de datos, la información de reparación— y explica por qué esa estructura decide cuánto se puede codificar.
Un código QR es una cuadrícula de cuadros blancos y negros que guarda texto. Eso es todo. No es un enlace, no es una imagen y no es una cuenta en ningún sitio: es una forma de escribir caracteres de manera que una cámara pueda leerlos.
Las siglas vienen de Quick Response, respuesta rápida, y describen el problema que se inventó para resolver. En 1994, en la fábrica de Denso Wave, un código de barras normal obligaba a alinear el lector con las rayas y solo cabían unos veinte caracteres. El equipo de Masahiro Hara buscaba algo que se pudiera leer desde cualquier ángulo y que guardara bastante más. La solución fue pasar de una dimensión a dos: en lugar de rayas de distinta anchura, una malla en la que cada celda —cada módulo— vale un bit.
Qué es cada parte del dibujo
Si miras un código QR de cerca verás que no todo es aleatorio. Hay zonas con una función concreta.
Los tres cuadrados grandes de las esquinas son los patrones de posicionamiento. Son lo primero que busca el lector, y su proporción de anillos —negro, blanco, negro, en relación 1:1:3:1:1— es un patrón que casi nunca aparece por casualidad en una fotografía. Al encontrar tres, el teléfono sabe dónde están tres de las cuatro esquinas y, por tanto, en qué ángulo está el código. Por eso puedes escanear uno torcido, o boca abajo, y funciona igual: la orientación se deduce de qué esquina no tiene cuadrado.
El cuadrado pequeño cerca de la cuarta esquina es el patrón de alineación. Corrige la deformación cuando el código está sobre una superficie curva o se fotografía en ángulo. Los códigos más pequeños no lo llevan porque no lo necesitan; a partir de cierto tamaño aparecen varios.
Las dos líneas de módulos alternos que unen los cuadrados de las esquinas son los patrones de temporización. Le dicen al lector el tamaño exacto de un módulo, que es lo que le permite dividir correctamente la malla aunque la foto esté algo desenfocada.
El resto son datos y corrección de errores, mezclados según un orden que define la norma.
Cómo se convierte el texto en cuadros
El proceso tiene tres pasos y merece la pena entenderlos porque explican casi todas las decisiones prácticas.
Primero, el texto se codifica en bits usando el modo más compacto que sirva. Si solo hay dígitos, cada carácter ocupa unos 3,3 bits. Si hay mayúsculas y algunos símbolos, 5,5 bits. Si hay minúsculas, tildes o eñes, se pasa al modo byte y cada carácter cuesta ocho bits o más. Esta es la razón de que un mensaje en español con acentos genere un código más denso que el mismo texto sin ellos.
Segundo, se añade la información de corrección de errores mediante un algoritmo llamado Reed-Solomon. No es un extra: es lo que permite que un código siga funcionando con una parte tapada, rayada o mal impresa. Hay cuatro niveles —L, M, Q y H— que recuperan aproximadamente el 7 %, el 15 %, el 25 % y el 30 % del contenido. Cuanto más alto el nivel, más módulos ocupa la reparación y menos espacio queda para datos.
Tercero, todo se coloca en la malla siguiendo un recorrido en zigzag y se le aplica una máscara: un patrón que se combina con los datos para evitar que salgan grandes manchas uniformes o formas que se parezcan a los cuadrados de las esquinas. El codificador prueba las ocho máscaras posibles y se queda con la que produce el dibujo más equilibrado. Por eso dos códigos con el mismo contenido pueden verse distintos si se generan con herramientas diferentes: ambos son correctos.
Por qué el tamaño no lo decides tú
El número de módulos por lado no es una preferencia, es una consecuencia. El formato tiene cuarenta versiones: la 1 es de 21×21 módulos y cada versión siguiente añade cuatro filas y cuatro columnas, hasta la 40, de 177×177. El codificador elige la versión más pequeña en la que quepan tus datos con el nivel de corrección que hayas pedido.
De ahí salen las dos reglas prácticas más útiles que existen sobre códigos QR:
- Menos texto, código más grueso. Y los módulos gruesos son los que sobreviven a una impresión pequeña, a una cámara mediocre y a un papel que absorbe tinta.
- Más corrección de errores, código más fino. Subir de M a H con el mismo contenido puede aumentar bastante el número de módulos, así que solo compensa cuando de verdad esperas daño o vas a tapar parte del código con un logo.
Qué ocurre en el segundo del escaneo
Cuando apuntas la cámara, el teléfono hace todo esto en unos milisegundos: localiza los tres cuadrados, deduce la orientación, calcula el tamaño de módulo con los patrones de temporización, corrige la perspectiva, lee los bits, deshace la máscara, aplica la corrección de errores para reparar lo que falte y obtiene el texto original.
Y entonces —y solo entonces— decide qué hacer con ese texto. Si empieza por
https://, ofrece abrirlo. Si empieza por WIFI:, ofrece conectarse. Si
empieza por BEGIN:VCARD, ofrece guardar un contacto. Ese prefijo es la única
diferencia entre un «código QR de wifi» y un «código QR de enlace»: los cuadros
funcionan exactamente igual, lo que cambia es lo que llevan escrito.
Entender eso es lo que evita el error más común del formato, que es esperar que un código haga algo que su contenido no le pide.