Cómo crear un código QR que siempre se pueda escanear: tamaño, contraste y corrección de errores
Generamos códigos QR, los tapamos con logotipos, bajamos el contraste, los encogimos y les quitamos el margen, y después intentamos leerlos. Esto es lo que hace fiable un código QR y lo que lo estropea sin que te des cuenta.
Un código QR en un folleto, una carta de restaurante o un paquete tiene una sola tarea: abrir lo correcto en cuanto alguien lo enfoca con el móvil. Si falla, casi nadie lo intenta dos veces. La mayoría de los fallos se deben a unas pocas decisiones de diseño, y todas se pueden comprobar antes de imprimir. Generamos códigos con la misma biblioteca que usa nuestro Generador de códigos QR y los leímos con dos decodificadores de código abierto: ZBar 0.23 y OpenCV 5.0.
Cómo guarda los datos un código QR
El código QR lo creó Denso Wave en Japón en 1994 y está normalizado como ISO/IEC 18004 (última edición de 2024). Está formado por pequeños cuadrados llamados módulos. La versión más pequeña tiene 21 × 21 módulos; cada una de las 40 versiones añade cuatro módulos por lado, hasta 177 × 177. Los tres cuadrados grandes de las esquinas indican al escáner dónde está el código y cómo está girado.
Parte de cada código es redundancia (corrección de errores Reed-Solomon), para que un código dañado o sucio siga siendo legible. Tú eliges cuánta:
| Nivel | Datos recuperables | Uso típico |
|---|---|---|
| L | aprox. 7 % | Pantallas limpias, contenido muy largo |
| M | aprox. 15 % | El valor habitual para papel y pantallas |
| Q | aprox. 25 % | Exteriores, superficies rugosas o curvas |
| H | aprox. 30 % | Códigos con logotipo, condiciones duras |
La norma exige además una zona de silencio: un margen vacío de cuatro módulos alrededor del código. Como muestran nuestras pruebas, importa más de lo que parece.
Más contenido, código más denso
Cuantos más caracteres codificas y más corrección de errores eliges, más módulos necesita el código. Codificamos cuatro contenidos típicos:
| Contenido | Caracteres | L | M | Q | H |
|---|---|---|---|---|---|
| URL de inicio (https://omid57.eu/) | 18 | 25 | 25 | 25 | 29 |
| URL de una página (…/en-US/tools/qr-code-generator) | 47 | 29 | 33 | 37 | 41 |
| La misma URL con cuatro parámetros UTM de seguimiento | 128 | 41 | 49 | 53 | 61 |
| Acceso wifi (nombre de red y contraseña) | 54 | 33 | 33 | 37 | 41 |
Los parámetros de seguimiento hicieron crecer el código de nivel M de 33 a 49 módulos por lado. Impreso al mismo tamaño, cada módulo es entonces un 28 % más pequeño, porque el ancho se reparte entre 57 anchos de módulo en lugar de 41 (contando la zona de silencio). Una URL corta es la forma más sencilla de conseguir un código robusto.
¿Qué tamaño debe tener un código QR?
Que un código se lea depende de cuántos píxeles de la cámara cubre cada módulo. Redujimos códigos hasta que cada módulo medía un número concreto de píxeles, los desenfocamos un poco, como lo haría el objetivo de una cámara, e intentamos leerlos:
| Píxeles por módulo | Código 25 × 25 | Código 33 × 33 | Código 49 × 49 |
|---|---|---|---|
| 2 | no leído | no leído | no leído |
| 2,5 | solo ZBar | no leído | solo ZBar |
| 3 | leído por ambos | leído por ambos | leído por ambos |
| 4 | leído por ambos | leído por ambos | leído por ambos |
Ambos decodificadores necesitaron unos tres píxeles por módulo. Para quien escanea, eso significa que si los módulos son el doble de grandes, el código se puede leer desde el doble de distancia, y un código más denso hay que escanearlo desde más cerca. Puedes calcular el tamaño de módulo de tu impresión:
tamaño de módulo = ancho impreso ÷ (módulos por lado + 8)
3 cm de ancho, código 33 × 33: 30 mm ÷ 41 ≈ 0,73 mm
3 cm de ancho, código 49 × 49: 30 mm ÷ 57 ≈ 0,53 mm Elijas el tamaño que elijas, imprime una prueba y escanéala desde la distancia a la que la gente se colocará de verdad, por ejemplo al otro lado de una mesa o desde la acera frente a un escaparate.
Logotipos: ¿cuánto puedes tapar?
La corrección de errores permite que un código sobreviva a daños, por eso muchos diseños colocan un logotipo en el centro. Tapamos el centro del código de la URL de 47 caracteres con un cuadrado vacío cada vez más grande y comprobamos cuándo dejaba de leerse:
| Nivel | Datos recuperables | Mayor área central tapada que aún se leyó |
|---|---|---|
| L | aprox. 7 % | 3 % del área del código |
| M | aprox. 15 % | 7 % |
| Q | aprox. 25 % | 12 % (OpenCV: 15 %) |
| H | aprox. 30 % | 18 % |
En la práctica solo puedes tapar entre la mitad y dos tercios del valor nominal: un logotipo también corta parcialmente palabras de código, y el valor nominal es el mejor caso. Si añades un logotipo, elige el nivel H, quédate claramente por debajo del 15 % del área y no toques los tres cuadrados de las esquinas. Nuestro generador no añade logotipos; si colocas uno con un editor de imágenes, genera el código con nivel H y prueba el resultado.
Contraste y color
En imágenes digitales limpias, ambos decodificadores leyeron incluso códigos muy pálidos. Las fotos de una cámara son distintas, así que añadimos ruido del sensor, un ligero desenfoque y una luz que cae al 65 % a lo ancho del código, y repetimos cada prueba diez veces:
| Valor de gris de los módulos oscuros | Contraste con el fondo blanco | ZBar | OpenCV |
|---|---|---|---|
| 0 (negro) | 100 % | 10 de 10 | 8 de 10 |
| 64 | 75 % | 10 de 10 | 10 de 10 |
| 96 | 62 % | 7 de 10 | 7 de 10 |
| 128 | 50 % | 1 de 10 | 9 de 10 |
| 160 | 37 % | 0 de 10 | 9 de 10 |
| 192 | 25 % | 0 de 10 | 0 de 10 |
Mantén los módulos oscuros realmente oscuros: alrededor de un 75 % más oscuros que el fondo fue fiable para ambos decodificadores. Lo que cuenta es la luminosidad, no el color. Azul marino o negro sobre blanco es ideal; el rojo puro sobre blanco solo es un 66 % más oscuro y ya está en el límite; el azul claro (un 33 %) y el amarillo (un 21 %) sobre blanco no sirven.
La zona de silencio no es opcional
Colocamos códigos sobre un patrón blanco y negro muy recargado, con un margen vacío de 0, 1, 2 o 4 módulos, cada uno sobre diez fondos aleatorios distintos:
| Zona de silencio | ZBar | OpenCV |
|---|---|---|
| 0 módulos | 8 de 10 | 0 de 10 |
| 1 módulo | 10 de 10 | 10 de 10 |
| 2 módulos | 10 de 10 | 9 de 10 |
| 4 módulos (norma) | 10 de 10 | 10 de 10 |
Sin ningún margen, OpenCV falló siempre. Nuestro generador añade siempre el margen estándar de cuatro módulos. No lo recortes en tu diseño y mantenlo libre de texto, fotos y patrones.
Los códigos estáticos no caducan
Nuestro generador crea códigos estáticos: el contenido en sí, como la URL, los datos del wifi o la dirección de correo, está guardado en el dibujo, así que el código funciona para siempre sin ningún servicio detrás. Los llamados códigos dinámicos de algunos proveedores solo contienen un enlace corto al proveedor, que luego redirige a los visitantes; si termina la suscripción, todos los códigos impresos dejan de funcionar. Para material impreso, un código estático que apunte a una dirección de tu propio dominio te da las dos cosas: nunca caduca y puedes cambiar su destino con una redirección en tu web.
Seguridad: escanea con cuidado
Nadie puede leer un código QR a simple vista, lo que lo hace ideal para esconder un enlace dañino. En diciembre de 2023, la Comisión Federal de Comercio de Estados Unidos (FTC) advirtió de que los estafadores pegan sus propios códigos encima de los auténticos, por ejemplo en parquímetros, y envían códigos por correo o SMS con mensajes urgentes. Antes de abrir un enlace escaneado, comprueba la dirección que muestra el móvil; no escanees códigos de mensajes inesperados; y revisa de vez en cuando que nadie haya tapado tus propios códigos impresos con una pegatina.
Lista de comprobación antes de imprimir
- El contenido es lo más corto posible, sin parámetros de seguimiento innecesarios.
- Nivel M para el uso normal; Q o H en exteriores, en superficies curvas o rugosas o con logotipo.
- Módulos oscuros sobre fondo claro con mucho contraste, nunca invertidos.
- La zona de silencio de cuatro módulos está completa y libre de texto y gráficos.
- SVG para imprimir, porque se escala sin perder nitidez; PNG para pantallas y documentos.
- Una línea de texto junto al código dice adónde lleva, por ejemplo «Carta: example.com/carta».
- La prueba se ha escaneado con al menos dos móviles distintos, a la distancia y con la luz reales.
Herramientas de esta guía
Preguntas frecuentes
¿Qué nivel de corrección de errores elijo?
El nivel M sirve para la mayoría de los códigos en papel y pantalla. Elige Q o H para códigos en exteriores, en superficies curvas o rugosas o con logotipo, y L solo para contenidos muy largos que se muestran en una pantalla.
¿Caducan los códigos QR?
Los códigos estáticos, como los de nuestro generador, no caducan nunca porque el contenido está en el propio código. Los dinámicos de algunos servicios dependen de ese servicio y dejan de funcionar si cierra o termina la suscripción.
¿Puedo poner un logotipo en el centro de un código QR?
Sí, con el nivel H. En nuestra prueba, con nivel H aún se leyó un área vacía de hasta el 18 % del código, y con nivel M solo del 7 %. Quédate claramente por debajo del 15 %, deja libres las esquinas y prueba la impresión.
¿Por qué no se escanea mi código QR?
Las causas más habituales son un código demasiado pequeño o denso para la distancia, poco contraste, colores invertidos, falta de zona de silencio, reflejos en materiales brillantes y superficies curvas como botellas.
¿Es segura una contraseña de wifi en un código QR?
La contraseña se guarda como texto sin cifrar en el código, así que cualquiera que lo escanee o lo fotografíe puede leerla. Usa códigos de wifi para redes de invitados y cambia la contraseña cuando haga falta.
¿Se envían mis datos a algún sitio al crear un código?
No. Nuestro generador de códigos QR crea el código en tu navegador; lo que escribes no se envía a nuestro servidor.