Saltar al contenido

BlogDatos5 min de lectura

Corrección de errores y tamaño del código QR: L, M, Q y H probados

Una corrección de errores más alta permite que un código QR resista daños, pero también lo hace más denso. Generamos códigos para cuatro tipos comunes de contenido en cada nivel y los tapamos poco a poco hasta que dejaron de leerse.

Un código QR con un logotipo en el centro, escaneado por un teléfono, y los niveles L, M, Q y H.

Todo generador de códigos QR pide un nivel de corrección de errores: L, M, Q o H. La explicación habitual es que los niveles más altos permiten que un código resista más daño. Es cierto, pero tiene un coste que rara vez se menciona, y la tolerancia real es menor que las cifras que suelen citarse. Generamos códigos para cuatro tipos comunes de contenido en cada nivel y los tapamos poco a poco hasta que nuestro lector ya no pudo leerlos.

Qué hace la corrección de errores

Un código QR guarda su contenido como una serie de bytes, llamados palabras de código, y añade palabras de código adicionales calculadas a partir de ellas con la codificación Reed-Solomon, la misma técnica que se usa en los CD. Si algunas palabras de código se dañan, las adicionales permiten al lector reconstruirlas. Los cuatro niveles fijan cuánto del código se dedica a esto:

NivelPalabras de código recuperablesConsejo habitual
L (bajo)Alrededor del 7 %Pantallas y documentos limpios
M (medio)Alrededor del 15 %El valor por defecto habitual
Q (cuartil)Alrededor del 25 %Impresión, exteriores, logotipos
H (alto)Alrededor del 30 %Condiciones duras, logotipos grandes
Los porcentajes son los de la norma de los códigos QR.

Las palabras de código adicionales ocupan espacio que, si no, contendría contenido. Para el mismo contenido, un nivel más alto necesita una cuadrícula más grande de cuadros (llamados módulos).

Cuánto crece el código

Cuatro códigos QR para el mismo enlace lado a lado, en los niveles de corrección de errores L, M, Q y H. La cuadrícula crece de 37 por 37 cuadros en el nivel L a 53 por 53 en el nivel H, así que los cuadros se vuelven más pequeños y apretados.
El mismo enlace de 89 caracteres en los cuatro niveles. Impresos al mismo ancho, los cuadros del código H son un 30 % más pequeños que los del código L.
ContenidoCaracteresLMQH
Enlace corto1925 × 2525 × 2525 × 2529 × 29
Datos de Wi-Fi6133 × 3333 × 3341 × 4145 × 45
Enlace con códigos de seguimiento8937 × 3741 × 4149 × 4953 × 53
Tarjeta de contacto20253 × 5357 × 5765 × 6577 × 77
Tamaño de la cuadrícula del código QR más pequeño que contiene el contenido en cada nivel.

Un enlace corto cabe en la cuadrícula más pequeña en tres de los cuatro niveles, porque esa cuadrícula tiene espacio libre. El contenido más largo crece rápido: la tarjeta de contacto en el nivel H necesita 77 × 77 módulos, casi diez veces la superficie del enlace corto.

Esto importa porque lo que la cámara tiene que ver es el módulo, no el código. En un código impreso de 2,5 cm de ancho, el enlace corto tiene módulos de 1 mm, y la tarjeta de contacto en el nivel H módulos de 0,3 mm, más o menos el tamaño de un grano de sal. Los módulos pequeños son los que hacen fallar los códigos en impresiones de baja calidad, a distancia y con poca luz.

Cuánto daño resiste un código

Para probar los niveles, tapamos el centro de cada código con un cuadrado blanco, donde suele ir un logotipo, y aumentamos su tamaño un punto porcentual de la superficie del código cada vez hasta que falló el lector de nuestro lector de códigos QR.

ContenidoLMQH
Enlace corto5 %6 %9 %16 %
Datos de Wi-Fi5 %8 %14 %19 %
Enlace con códigos de seguimiento7 %11 %20 %20 %
Tarjeta de contacto8 %12 %19 %15 %
El mayor cuadrado centrado, como parte de la superficie del código, con el que todavía se leía.
Dos copias del mismo código QR de nivel H con un cuadrado blanco en el centro. Con el 20 % de la superficie tapada todavía se lee; con el 24 % tapado, no.
Nivel H con el centro tapado. Unos pocos puntos porcentuales más marcaron la diferencia.

Destacan dos cosas. Primero, la tolerancia real fue menor que las cifras de la norma, a menudo en un tercio o más. Un cuadrado tapado corta palabras de código por sus bordes, dañando más de las que su tamaño sugiere, y puede ocultar marcas de alineación que el lector usa para encontrar la cuadrícula. Segundo, los niveles más altos no siempre ganaron: en la tarjeta de contacto, H falló antes que Q. Los códigos más grandes tienen más marcas de alineación que un cuadrado centrado puede tapar, y cada lector maneja el daño de forma un poco distinta.

La lección práctica es dejar margen. Si un código debe resistir daños, no cuentes con usar toda su corrección de errores.

Logotipos en los códigos QR

Un logotipo funciona dañando el código a propósito y confiando en que la corrección de errores lo repare. Nuestro generador de códigos QR sube el nivel a Q cuando añades un logotipo, si estaba más bajo, y limita la superficie que tapa el logotipo a una parte de lo que ese nivel puede recuperar. Comprobamos todas las combinaciones de nuestros cuatro tipos de contenido, los niveles M, Q y H y tamaños de logotipo del 24 al 40 %, el mayor que ofrece el generador: todas se leyeron.

Cómo hacer un código QR que siempre se lea

  • Mantén corto el contenido. Usa un enlace corto en lugar de uno largo con códigos de seguimiento. Es la mayor ganancia de todas, porque menos módulos significa módulos más grandes.
  • Usa M para pantallas e impresiones limpias, y Q para carteles, envases y todo lo que lleve logotipo. Usa H solo cuando el contenido sea corto, para que la cuadrícula siga siendo pequeña.
  • Imprímelo lo bastante grande. Una regla habitual es un ancho de código de al menos una décima parte de la distancia de lectura: 3 cm para una tarjeta de mesa leída a 30 cm, 30 cm para un cartel leído a 3 metros.
  • Mantén un contraste fuerte y un margen. Cuadros oscuros sobre fondo claro, y un borde libre de al menos cuatro módulos. No todas las apps leen códigos claros sobre fondo oscuro.
  • Pruébalo antes de imprimir, con un teléfono antiguo además de uno nuevo, a la distancia real.

Los códigos creados con nuestro generador son estáticos: el contenido está en el propio código, así que funciona para siempre y no depende de ningún servicio. Algunos servicios de QR crean códigos «dinámicos» que apuntan a su propio servidor y redirigen desde allí, lo que permite cambiar el destino más tarde, pero dejan de funcionar si el servicio o tu suscripción terminan.

Preguntas y respuestas

¿Qué nivel de corrección de errores debo usar en un código QR?

M para pantallas e impresiones limpias, Q para impresión, exteriores y códigos con logotipo. H hace el código mucho más denso, así que úsalo solo con contenido corto.

¿Qué parte de un código QR se puede tapar?

Menos de lo que sugieren el 7, 15, 25 y 30 % de la norma. En nuestra prueba, un cuadrado centrado podía tapar del 5 al 8 % en L, del 6 al 12 % en M, del 9 al 20 % en Q y del 15 al 20 % en H.

¿Un logotipo hace más difícil leer un código QR?

Consume parte de la corrección de errores. Con la corrección en el nivel Q y un logotipo de tamaño moderado, todos nuestros códigos de prueba se leyeron.

¿Cuál es el tamaño mínimo de un código QR impreso?

Una regla habitual es un ancho de una décima parte de la distancia de lectura, unos 2 a 3 cm para algo que se lee con el brazo extendido. Un contenido corto permite códigos más pequeños.

Herramientas de este artículo

Más del blog

Datos6 min de lectura

CSV, Excel o JSON: ¿qué formato para tus datos?

Guardamos la misma tabla de 100 000 filas en CSV, en un libro de Excel y en JSON, y comparamos los pesos, la velocidad de lectura en código y lo que falla con las fechas, los ceros a la izquierda y los números largos.

Datos5 min de lectura

Las marcas de tiempo Unix, explicadas

Una marca de tiempo Unix es solo un conteo de segundos, y sin embargo causa un flujo constante de errores. Qué cuenta, cómo distinguir segundos de milisegundos de un vistazo, qué pasa con las zonas horarias y los segundos intercalares, y por qué importa 2038.

Esc