Saltar al contenido principal
Tutorial

Corrección de errores en códigos QR explicada (L, M, Q, H): ¿Qué nivel deberías usar realmente?

· 11 min de lectura

Abre cualquier generador de códigos QR y verás cuatro opciones etiquetadas como L, M, Q y H. La mayoría de la gente deja el valor por defecto y sigue adelante — hasta que el código impreso vuelve de la imprenta siendo imposible de escanear, o el equipo de marketing coloca un logotipo en el centro y el código entero muere. El nivel de corrección de errores no es un ajuste cosmético. Determina cuánto daño físico puede sobrevivir un código, y se intercambia directamente contra la cantidad de datos que el código puede contener.

Este artículo explica qué hacen realmente esos niveles dentro de la especificación QR (ISO/IEC 18004), cómo cambian la capacidad con cifras reales, y cómo elegir el adecuado para tu caso de uso.

Qué es realmente la corrección de errores

Un código QR no solo codifica tus datos — también codifica información redundante que permite al lector reconstruir partes dañadas o ilegibles del código. El mecanismo es la corrección de errores Reed–Solomon, la misma familia de algoritmos utilizada en CDs, DVDs, discos Blu-ray y en comunicaciones del espacio profundo.

Cuando se genera un código QR, la carga útil de datos se divide en bloques, y para cada bloque el codificador calcula un conjunto de codewords de corrección de errores. Si un lector encuentra después módulos (los cuadrados negros y blancos) que son ilegibles — por un arañazo, una mancha de café, mala iluminación o un logotipo superpuesto — usa esos codewords redundantes para reconstruir matemáticamente los que faltan.

Los códigos Reed–Solomon tienen una propiedad útil: para corregir t codewords erróneos en posiciones desconocidas, necesitas 2t codewords redundantes. (Si conoces las posiciones de los codewords dañados — llamados “borrados” — cada codeword de redundancia arregla uno.) El nivel de corrección de errores simplemente controla cuánto del presupuesto total de codewords se gasta en redundancia frente a carga útil.

Los cuatro niveles, con cifras

La especificación ISO/IEC 18004 define cuatro niveles de corrección de errores con estas capacidades de recuperación aproximadas — la proporción de codewords que pueden estar dañados y aun así recuperarse por completo:

NivelNombreCapacidad de recuperación
LBajo~7% de los codewords
MMedio~15% de los codewords
QCuartil~25% de los codewords
HAlto~30% de los codewords

Dos matices importantes que el simple porcentaje oculta:

  1. El porcentaje se aplica a los codewords, no al área de módulos. La regla popular “el nivel H sobrevive a que el 30% del código esté cubierto” es aproximadamente cierta en la práctica porque el daño suele ser contiguo, pero el límite formal es sobre codewords dañados. El daño agrupado espacialmente (como un logotipo) suele ser más fácil de sobrevivir que el mismo número de errores dispersos aleatoriamente, porque los borrados son más baratos de corregir que los errores de posición desconocida.
  2. Los niveles más altos cuestan capacidad. Más redundancia significa menos espacio para la carga útil a la misma versión (tamaño). Si los datos no caben, el codificador debe saltar a una versión más grande — más módulos, impresión más densa, más difícil de escanear a distancia.

Capacidad: lo que te cuestan los niveles en la práctica

Los códigos QR vienen en 40 tamaños llamados versiones. La versión 1 es de 21×21 módulos, y cada versión posterior añade 4 módulos por lado, hasta la versión 40 con 177×177. La tabla siguiente muestra las capacidades máximas de caracteres de la especificación para tres tipos representativos de carga útil, en los cuatro niveles. (El modo byte cubre datos binarios arbitrarios tipo UTF-8 y URLs típicas; el modo alfanumérico cubre 0–9 A–Z espacio $%*+-./:; el modo numérico es solo dígitos.)

VersiónMódulosNivelNuméricoAlfanuméricoByte
121×21L412517
121×21M342014
121×21Q271611
121×21H17107
537×37L255154106
537×37M20212284
537×37Q1448760
537×37H1066444
1057×57L652395271
1057×57M513311213
1057×57Q364221151
1057×57H288174119
2097×97L20611249858
2097×97M1600970666
2097×97Q1120679466
2097×97H861521358
40177×177L708942962953
40177×177M559633912331
40177×177Q399324201663
40177×177H305718521273

Lee la versión 1 con atención: pasar de L a H reduce la capacidad en bytes de 17 a 7 — una reducción del 59%. Ese intercambio suele merecer la pena para impresión, pero es un coste real. Una URL larga que cabe cómodamente en un código versión 4 con nivel M podría forzar un código versión 6 con nivel H, y códigos más grandes significan módulos más pequeños al mismo tamaño impreso.

Las cargas útiles más cortas siempre ganan a una corrección de errores más fuerte. Una URL corta en un código de versión baja con nivel H escaneará mejor que una URL larga en un código de versión alta con nivel L casi siempre. Si estás codificando una URL, usa un dominio corto o una redirección. Esto importa más que cualquier otra optimización.

Tamaño de impresión y distancia de escaneo: la regla 10:1

La corrección de errores no puede salvar un código que simplemente es demasiado pequeño para resolverse. La regla de campo ampliamente utilizada es la proporción 10:1: la distancia de escaneo no debe ser superior a aproximadamente 10 veces el ancho del código. Algunas referencias consideran 10:1 conservador y citan escaneos exitosos más cerca de 15:1 con buenas cámaras e iluminación, pero 10:1 es la cifra para la que hay que diseñar.

  • Código de tarjeta de visita, 2 cm de ancho → fiable hasta ~20 cm
  • Código de póster, 10 cm de ancho → fiable hasta ~1 m
  • Código de valla publicitaria, 1 m de ancho → fiable hasta ~10 m

Dos restricciones relacionadas:

  1. Tamaño de módulo. Cada módulo debe ser al menos aproximadamente 0,4 mm (unos 2 mils es demasiado pequeño; 0,4 mm es un suelo de impresión habitual) para que las cámaras de los teléfonos puedan resolverlo. Para un código versión 10 (57 módulos), eso es un tamaño físico mínimo de unos 2,3 cm solo para el área de datos.
  2. La zona de silencio. La especificación exige un margen de al menos 4 módulos de espacio en blanco alrededor del código. Recortar la zona de silencio es una de las razones más comunes por las que los códigos impresos fallan, y ningún nivel de corrección de errores lo arregla — los lectores usan la zona de silencio para encontrar los bordes del código.

Por qué los logotipos exigen nivel H

Incrustar un logotipo en el centro de un código QR es la razón clásica por la que existe el nivel H. El logotipo cubre físicamente módulos, destruyendo los codewords que hay debajo. El presupuesto de recuperación del ~30% del nivel H es lo que hace que esto sea sobrevivible.

Reglas prácticas para la superposición de logotipos:

  • Usa H. Siempre. En M (~15%) un logotipo modestamente grande ya se come la mayor parte del presupuesto.
  • Mantén el logotipo por debajo de ~30% del área total del código — y preferiblemente bastante por debajo, porque el área cubierta rara vez se distribuye limpiamente entre los bloques de codewords. Un logotipo que cubre el 20% del área con nivel H es un diseño cómodo; un 28% es jugártela.
  • Quédate en el centro. Los tres patrones de localización (los cuadrados grandes en las esquinas) y los patrones de timing/alineación llevan datos estructurales que la corrección de errores no protege del mismo modo. La colocación centrada los evita.
  • Prueba en teléfonos reales, a distancia real, con mala iluminación. No solo tu teléfono insignia sobre una mesa. Los dispositivos Android más antiguos con cámaras mediocres son el suelo para el que estás diseñando.

Fíjate en que los generadores que te dejan colocar un logotipo sobre un código sin preguntar por el nivel están apostando implícitamente por el nivel que elegiste en otro lugar. Si configuras L y añades un logotipo, has creado un código que falla a menudo pero no siempre — el peor resultado posible, porque pasa las pruebas casuales y falla en el campo.

Cómo elegir de verdad

Nivel L (~7%) — Contextos solo digitales donde la imagen se renderiza perfectamente: traspaso app-a-app, pantallas, entradas generadas mostradas en un teléfono. Píxeles limpios significan que casi nada puede ir mal, así que invierte el presupuesto en capacidad y tamaño pequeño. Rara vez es la elección correcta fuera de eso.

Nivel M (~15%) — El valor por defecto general para impresión limpia: tarjetas de visita, packaging de producto, documentos. Sobrevive al desgaste por manipulación normal, defectos menores de impresión y reflejos. La mayoría de los valores por defecto de los generadores caen aquí, y por buenas razones.

Nivel Q (~25%) — Entornos físicos exigentes sin superposición de logotipos: etiquetas industriales, estanterías de almacén, etiquetas de equipamiento, señalización exterior expuesta a la intemperie. Si la superficie se va a rayar, ensuciar u oscurecer parcialmente en uso normal, Q es el caballo de batalla.

Nivel H (~30%) — Superposición de logotipos, entornos muy exigentes, o situaciones en las que un escaneo fallido es caro (códigos de pago, etiquetas críticas para la seguridad). También es la elección correcta cuando debes imprimir muy pequeño y esperas cámaras de baja calidad.

El árbol de decisión se comprime en: digital → L o M; impresión limpia → M; entorno agresivo → Q; logotipo o fiabilidad crítica → H. E independientemente del nivel: mantén la carga útil corta, mantén la zona de silencio y respeta la regla de distancia 10:1.

Verifícalo tú mismo

La teoría está bien, pero la corrección de errores del QR es fácil de probar empíricamente. Genera la misma URL en cada nivel con nuestro Generador de Códigos QR y compara:

  1. Genera el código en nivel L, y luego M, Q y H. Observa el aumento de densidad de módulos — esa densidad visual es la redundancia.
  2. Imprime la versión de nivel H, cubre el centro con una moneda o pegatina (~20% del área) y escanéalo. Debería seguir funcionando.
  3. Prueba lo mismo con la versión de nivel L. No funcionará.
  4. Toma el código de nivel H y cubre progresivamente más área hasta que los escaneos fallen — encontrarás que el límite práctico está cerca del ~30% teórico.

También verás el intercambio de capacidad directamente: pega una URL larga y observa qué versión (tamaño) requiere cada nivel. Ese experimento enseña la compensación más rápido que cualquier tabla.

Resumen

  • La corrección de errores en códigos QR es redundancia Reed–Solomon; el nivel establece cuánto del presupuesto de codewords es redundancia: L ≈ 7%, M ≈ 15%, Q ≈ 25%, H ≈ 30% de recuperación.
  • Los niveles más altos recortan capacidad — en la versión 1, H contiene menos de la mitad de los bytes que contiene L.
  • Las cargas útiles más cortas ganan a la corrección más fuerte; acorta las URLs antes de subir los niveles.
  • Diseña el tamaño de impresión con la regla de distancia 10:1 y nunca recortes la zona de silencio de 4 módulos.
  • Superposición de logotipo ⇒ nivel H, logotipo por debajo del ~30% del área, centrado, probado en teléfonos baratos.

Genera unas variantes con el Generador de Códigos QR y el nivel adecuado para tu caso de uso será obvio en cinco minutos.