Corrección de errores en códigos QR: cómo funcionan de verdad L, M, Q y H

por el equipo de KoloQRFundamentos

Los cuatro niveles de corrección de errores de un código QR como letras grandes sobre fichas redondeadas - Q, M, L y H - encima de una etiqueta redondeada que dice "Error Correction".

La corrección de errores es la redundancia incorporada en un código QR que permite a un escáner reconstruir los datos cuando parte del símbolo está dañada o cubierta. En cierto modo, un código QR guarda su contenido dos veces: una como datos y otra como información de recuperación derivada matemáticamente y repartida por todo el símbolo. Si una parte del código está rayada, manchada, doblada u oculta tras un logotipo, el escáner reconstruye los trozos que faltan a partir de lo que sobrevive.

Puntos clave

  • La corrección de errores es la redundancia incorporada en un código QR que permite a un escáner reconstruir los datos cuando parte del símbolo está dañada o cubierta.
  • Los cuatro niveles definidos en la norma ISO/IEC 18004 recuperan aproximadamente el 7% (L), el 15% (M), el 25% (Q) y el 30% (H) de los datos del código.
  • Una corrección de errores más alta reduce la capacidad de datos, así que la misma URL necesita una versión de símbolo mayor - y con un ancho impreso fijo, eso significa módulos más pequeños y un escaneo más difícil.
  • La corrección de errores solo repara el área de datos. Un daño en un patrón de localización, en los patrones de sincronización o en la zona de silencio suele dejar el código ilegible, sea cual sea el nivel usado.
  • La corrección de errores no puede compensar el poco contraste, el desenfoque, los reflejos ni un código impreso demasiado pequeño, porque eso degrada el símbolo entero a la vez en lugar de una zona concreta.

¿Qué es la corrección de errores de un código QR?

El mecanismo es la codificación Reed–Solomon, la misma familia de códigos que se usa en los CD y en las transmisiones del espacio profundo. La codificación Reed-Solomon es el esquema que genera las palabras de código de corrección de errores de un código QR y reconstruye los datos que faltan a partir de las que siguen intactas. Trabaja sobre palabras de código, no sobre cuadrados sueltos. Una palabra de código es un grupo de ocho módulos que un código QR trata como una unidad - o una unidad de datos, o una unidad de corrección de errores.

La corrección de errores se elige una vez, al generar el código, y queda fijada en el símbolo. El nivel se escribe en la información de formato, junto a los patrones de localización, así que cualquier escáner puede leer qué nivel se usó. El nivel de corrección de errores de un código QR impreso no puede cambiarse después; cambiarlo significa regenerar el código y volver a imprimirlo.

¿Qué significan los niveles de corrección de errores L, M, Q y H?

Los cuatro niveles de corrección de errores de un código QR recuperan aproximadamente el 7% (L), el 15% (M), el 25% (Q) y el 30% (H) de las palabras de código del código. Cada código QR usa exactamente uno de ellos. Los niveles más altos añaden más palabras de código de recuperación, lo que deja menos palabras de código para tus datos reales con un tamaño de símbolo dado.

NivelRecuperación nominalBytes en la versión 1 (21×21)Bytes en la versión 10 (57×57)Uso típico
L (baja)~7%17271Pantallas, apps, URL largas, superficies limpias en interior
M (media)~15%14213El valor por defecto habitual; trabajo impreso general
Q (cuartil)~25%11151Logotipo central pequeño, material manipulado o de exterior
H (alta)~30%7119Logotipo más grande, marcado industrial, abrasión, intemperie
Las cifras de capacidad proceden de las tablas de capacidad de caracteres de la norma ISO/IEC 18004, en modo byte.

Los porcentajes describen palabras de código, no superficie, y son nominales más que exactos. La versión 1 deja la aritmética a la vista: el símbolo guarda 26 palabras de código en total, y Reed–Solomon puede reparar hasta la mitad de las palabras de código de corrección de un bloque, menos una pequeña reserva que la norma aparta para reducir el riesgo de decodificar datos equivocados.

Nivel (versión 1)Palabras de datosPalabras de correcciónPalabras reparablesParte de las 26 totales
L19728%
M1610415%
Q1313623%
H917831%

En los símbolos más grandes, los datos se reparten en varios bloques Reed–Solomon y las palabras de código se entrelazan por todo el símbolo, así que una mancha se distribuye entre muchos bloques y cada bloque repara su parte. El entrelazado es la razón de que un cerco de café en una esquina suela ser sobrevivible, y de que el porcentaje nominal sea una guía razonable aunque la corrección ocurra bloque a bloque.

¿Qué nivel de corrección de errores deberías usar?

Usa M para la mayoría de los códigos QR impresos, Q o H cuando haya un logotipo sobre el código o la superficie sufra maltrato, y L solo en pantallas o cuando el contenido sea largo y el código tenga que mantenerse poco denso. M es el nivel por defecto de la mayoría de los generadores, y para un cartel, un folleto, una carta o una tarjeta de visita que no se van a rozar, M es la respuesta correcta.

Reglas de decisión:

  • Si el código se va a mostrar en una pantalla, elige L. Las pantallas no tienen suciedad, ni pliegues, y su contraste es perfecto, así que la capacidad de recuperación es redundancia desperdiciada que solo hace el código más denso.
  • Si el código se imprime en papel y no va a llevar logotipo, elige M. M cubre la manipulación normal, la ganancia de punto y las manchas leves.
  • Si el código lleva un logotipo central, elige Q como mínimo, y H si el logotipo es grande. El logotipo consume capacidad de recuperación que de otro modo absorbería los errores de impresión y de escaneo.
  • Si el código va a exterior, a un envase, a una máquina o a cualquier sitio donde se roce, se doble o le dé la intemperie, elige H. La abrasión elimina módulos de forma permanente.
  • Si el contenido es largo y el código tiene que seguir siendo físicamente pequeño, elige L o M y acorta el contenido. Subir el nivel con una URL larga fuerza un símbolo más denso, que suele ser el riesgo mayor.

Aquí viene bien un contraejemplo trabajado. La QR-bill suiza, el estándar nacional de pagos de Suiza y Liechtenstein, especifica corrección de errores de nivel M, un símbolo fijo de 46 × 46 mm, un tamaño mínimo de módulo de 0,4 mm y una cruz suiza de 7 × 7 mm en el centro del código. Esa cruz cubre alrededor del 2,3% del área del símbolo. Un estándar bancario nacional pone un logotipo sobre un código QR en el nivel M - porque el logotipo es pequeño y el tamaño de módulo está garantizado. El nivel H no es un requisito para llevar logotipo; es la compensación por uno grande.

Cómo cambia la corrección de errores el tamaño de un código QR impreso

Subir el nivel de corrección de errores hace más pequeño cada módulo con un ancho impreso fijo, porque los mismos datos necesitan una versión de símbolo mayor, con más módulos por lado. Este es el compromiso que casi nadie ve: el nivel que protege frente al daño aumenta también la densidad que provoca los fallos de escaneo.

Toma una URL de 44 caracteres como https://koloqr.com/qr-codes-for/coffee-shops, codificada en modo byte e impresa a 25 mm de ancho:

NivelVersión de símboloCuadrículaAncho de módulo a 25 mmAncho mínimo del símbolo con módulos de 0,4 mm
L329 × 290,86 mm11,6 mm
M433 × 330,76 mm13,2 mm
Q433 × 330,76 mm13,2 mm
H537 × 370,68 mm14,8 mm

De esa tabla salen dos cosas. Primera: pasar de L a H encoge cada módulo alrededor de un 21% al mismo tamaño impreso - en un soporte absorbente, esa es la diferencia entre módulos nítidos y módulos que se funden entre sí. Segunda: M y Q producen la misma versión de símbolo para este contenido, lo que significa que Q sale gratis: el mismo código físico, el mismo tamaño de módulo, un 25% de recuperación en lugar de un 15%.

Comprueba ese segundo punto siempre. Como la capacidad avanza por escalones, subir un nivel de corrección de errores a menudo no cuesta nada. Genera el código con el nivel que hayas elegido, anota el tamaño de la cuadrícula, genéralo un nivel por encima y compara. Si la cuadrícula no cambia, quédate con el nivel más alto.

¿Cuánto de un código QR puede cubrir un logotipo?

Un logotipo central que cubra hasta alrededor del 20% del área de un código QR es recuperable de forma fiable en el nivel H en la mayoría de los flujos de impresión. El techo teórico en H está cerca del 30%, pero gastar todo el presupuesto de recuperación en el logotipo no deja nada para la ganancia de punto, un reflejo, una huella o una cámara ligeramente desenfocada - y esos errores salen del mismo presupuesto.

Una regla práctica fácil de comprobar: un logotipo circular cuyo diámetro sea la mitad del ancho del código QR cubre alrededor del 20% del área del símbolo. Un logotipo cuadrado de lado 0,45 × el ancho del código cubre más o menos lo mismo. Si te ciñes a eso, el nivel H deja aproximadamente un tercio de su capacidad en reserva.

Reglas que importan más que el porcentaje:

  • Mantén el logotipo en el centro. Un logotipo centrado reparte su daño de forma uniforme entre los bloques Reed–Solomon entrelazados. Un logotipo del mismo tamaño descentrado concentra el daño y tiene más probabilidades de agotar un bloque.
  • Nunca dejes que el logotipo toque los tres patrones de localización. Esos cuadrados grandes de las esquinas son los que permiten a un escáner encontrar el código, y no llevan corrección de errores.
  • Dale al logotipo un fondo sólido. Un logotipo colocado directamente sobre los módulos con fondo transparente crea medios módulos ambiguos en su borde, que producen errores que el decodificador tiene que arreglar gastando capacidad igualmente.
  • En los símbolos de la versión 7 en adelante, vigila los patrones de alineación. Desde la versión 7 hay patrones de alineación dentro del área de datos, incluso cerca del centro. Un logotipo central grande puede tapar uno, lo que normalmente sigue escaneando de frente pero puede fallar en ángulo o sobre una superficie curva.
  • Prueba el código impreso, no la vista previa en pantalla. Un logotipo que funciona al 400% de zoom en un monitor puede fallar a 25 mm sobre papel sin estucar.

KoloQR, un generador de códigos QR gratuito con códigos QR circulares y de formas personalizadas, admite colocar un logotipo y permite fijar el nivel de corrección de errores antes de exportar. Las formas decorativas de módulo - puntos redondeados, módulos circulares - reducen el área de tinta impresa de cada módulo, así que consumen parte de la misma tolerancia que la corrección de errores está ahí para dar. El estilo nunca mejora el rendimiento del escaneo; la corrección de errores es lo que absorbe la diferencia. Mira códigos QR con marca para ver cómo queda esto en la práctica.

Qué partes de un código QR no puede reparar la corrección de errores

La corrección de errores protege solo el área de datos. Los patrones estructurales que un escáner necesita antes de poder decodificar nada no están cubiertos por la corrección Reed–Solomon, así que un daño ahí suele ser fatal tanto si el código se generó en L como en H.

  • Patrones de localización. Los tres cuadrados concéntricos de las esquinas superior izquierda, superior derecha e inferior izquierda le dicen al escáner dónde está el símbolo y cómo está girado. Ninguna redundancia los protege. Cubrir uno suele significar que el código no llega a detectarse.
  • Zona de silencio. La zona de silencio es el margen vacío de cuatro módulos alrededor de un código QR que permite a un escáner detectar dónde empieza y dónde acaba el símbolo. Un texto, un borde o una fotografía metidos en ese margen rompen la detección aunque todos los módulos de dentro del código estén perfectos.
  • Patrones de sincronización. Las líneas alternas de un módulo que corren entre los patrones de localización fijan la cuadrícula de módulos. Un daño aquí desalinea toda la lectura.
  • Patrones de alineación. Presentes a partir de la versión 2, corrigen la distorsión de perspectiva. Perder uno es a menudo sobrevivible en un escaneo plano y frontal, y mucho menos en una botella curva o un cartel en ángulo.

La información de formato es la excepción. La franja de módulos junto a los patrones de localización que registra el nivel de corrección de errores y el patrón de máscara está protegida a su vez por un código BCH y guardada dos veces en el símbolo, así que aguanta bastante daño por sí sola.

Contra qué no protege la corrección de errores

La corrección de errores arregla daños localizados, no degradación global. Subir el nivel de M a H no hace nada por un código demasiado pequeño, demasiado pálido, borroso o mal iluminado - esos problemas afectan a todos los módulos a la vez, y no queda ninguna zona intacta desde la que el decodificador pueda reconstruir.

Fallos que un nivel de corrección de errores más alto no va a resolver:

  • Un código impreso demasiado pequeño para sus datos. Por debajo de unos 0,4 mm por módulo impreso, las cámaras de los teléfonos tienen problemas para resolver la cuadrícula. Subir el nivel hace los módulos más pequeños y el problema peor.
  • Poco contraste. Un escáner necesita una distinción clara entre claro y oscuro. Un código gris pálido sobre fondo crema falla en todos los niveles.
  • Colores invertidos. Los módulos claros sobre fondo oscuro no funcionan en todas partes; varias apps de escaneo y cámaras nativas esperan oscuro sobre claro.
  • Reflejos y plastificado. Un plastificado brillante bajo un foco refleja hacia la cámara y borra el símbolo entero.
  • Desenfoque de movimiento y poca luz. Los dos degradan la imagen entera, no una esquina.
  • Una URL de destino equivocada o muerta. La corrección de errores garantiza que el escáner lea correctamente la cadena codificada. No dice nada sobre si esa dirección sigue resolviendo.

Cuando un código falla de forma intermitente sobre el terreno y la muestra impresa se ve limpia, la causa es casi siempre el tamaño de módulo, el contraste o la iluminación - no el nivel de corrección de errores.

Corrección de errores en pantalla frente a impresión

En pantalla, el nivel L suele ser la mejor opción; impreso, M es el suelo sensato. Un código QR en una pantalla no se enfrenta a ninguno de los riesgos físicos para los que existe la corrección de errores - ni ganancia de punto, ni pliegues, ni abrasión, ni suciedad - así que la capacidad de recuperación no compra nada y los módulos de más hacen el código más denso de lo necesario.

Consideraciones propias de la pantalla: un código mostrado en un teléfono y escaneado por otro compite con los reflejos y el brillo de la pantalla, algo que una corrección de errores más alta no resuelve. Aumenta en su lugar el tamaño mostrado y el brillo de la pantalla.

Consideraciones propias de la impresión: los soportes absorbentes extienden la tinta, y cada módulo crece un poco sobre sus vecinos. Esa ganancia de punto es una fuente real de errores y es exactamente lo que absorben los niveles M y Q. Los soportes estucados la extienden menos; el papel de periódico, el papel kraft y la tela, más. Exporta en SVG en lugar de un PNG ampliado para que los módulos se mantengan geométricamente exactos a la resolución de la imprenta - KoloQR exporta tanto PNG como SVG.

Cómo probar cuánto daño aguanta de verdad tu código QR

Prueba el código impreso real en lugar de fiarte del porcentaje nominal - el nivel te dice el presupuesto, la tirada te dice cuánto se gastó ya. El procedimiento de abajo lleva unos quince minutos y te da una cifra en la que puedes confiar.

  1. Genera el código con los ajustes definitivos. El mismo contenido, el mismo nivel de corrección de errores, el mismo logotipo, exportado en SVG.
  2. Imprime con los ajustes y el soporte de producción. La misma impresora, el mismo papel, el mismo plastificado. Una prueba láser en papel de oficina no predice cómo se comporta el cartón sin estucar.
  3. Escanea la impresión intacta a la distancia prevista con dos teléfonos. Uno iOS y otro Android, con la cámara nativa. Si falla aquí, para y corrige el tamaño o el contraste antes de probar el daño.
  4. Cubre el 10% del área del símbolo en el centro con cinta opaca. Para un código de 25 mm, un cuadrado de 8 × 8 mm se acerca al 10%. Vuelve a escanear.
  5. Aumenta el área cubierta en pasos del 5% hasta que el código deje de escanear. Anota el último porcentaje que funcionó - esa es tu tolerancia real.
  6. Repite con el daño colocado en un borde y cruzando una esquina. Evitando los patrones de localización. El daño en el borde falla a menudo antes que el daño central.
  7. Repite con la iluminación real. La sala de la tienda, el restaurante de noche, el pasillo del almacén.
  8. Compara el resultado con el nivel nominal. Si un código de nivel H falla con un 12% cubierto, la calidad de impresión se comió el presupuesto restante. Agranda el código, acorta la URL o pasa a una superficie menos absorbente.

Anota la cifra. Es el dato más útil que puedes tener antes de comprometerte con una tirada de impresión.

Errores habituales al elegir un nivel de corrección de errores

El error más común con la corrección de errores es elegir H por defecto suponiendo que más protección siempre es más seguro. Con una URL larga a un tamaño impreso pequeño, H produce un código más denso que falla más a menudo que la versión en M a la que sustituyó.

Qué hacerPor qué
Acortar la URL antes de subir el nivelMenos caracteres significan una versión de símbolo más baja, módulos más grandes y más tolerancia real que la que da cualquier cambio de nivel
Comprobar si el nivel siguiente cambia el tamaño de la cuadrículaLa capacidad avanza por escalones, así que subir de nivel es a menudo gratis
Usar H en códigos de exterior, industriales y de envaseLa abrasión y la intemperie eliminan módulos de forma permanente, que es justo para lo que sirve la capacidad de recuperación
Probar la muestra impresa con el daño aplicadoEl porcentaje nominal es un techo, no una garantía
Qué evitarPor qué
Usar H para compensar un código pequeñoLos módulos más pequeños causan más fallos de los que repara la corrección de errores
Llenar todo el presupuesto de recuperación con un logotipoLos errores de impresión, reflejo y enfoque salen del mismo presupuesto y ya no queda nada
Suponer que H protege los patrones de localizaciónNingún nivel de corrección de errores los protege; un patrón de localización cubierto significa que no hay detección
Confiar en la corrección de errores para sobrevivir sin zona de silencioLa detección falla antes de empezar a decodificar, así que la capacidad de recuperación no se usa nunca
Subir el nivel después de que un código falle sobre el terrenoDiagnostica primero el contraste, el tamaño y la iluminación; el nivel rara vez es la causa

Questions? Answered

Usa Q como mínimo, y H si el logotipo cubre más de un 15% aproximado del código. Mantén el logotipo centrado, sobre un fondo sólido y dentro de alrededor del 20% del área del símbolo en el nivel H. Eso deja capacidad de recuperación para los errores de impresión y de cámara, que salen del mismo presupuesto que el logotipo.

No siempre. Los niveles altos absorben más daño pero reducen la capacidad de datos, así que el mismo contenido necesita una versión de símbolo mayor y módulos más pequeños con el mismo ancho impreso. Con una URL larga en un código impreso pequeño, el nivel M escanea a menudo con más fiabilidad que el nivel H.

No. El nivel está codificado en la información de formato del símbolo y determina cómo se construye el código entero, así que no puede editarse después. Regenera el código con el nivel nuevo y vuelve a imprimirlo. Si también hay que cambiar el destino, eso es otro problema - los códigos estáticos apuntan a una URL fija.

El escáner suele informar de una lectura fallida en lugar de devolver datos equivocados. Los códigos QR reservan un pequeño número de palabras de código de protección frente a decodificación errónea en los símbolos más pequeños, precisamente para reducir la probabilidad de que un código corrupto se decodifique como un valor plausible pero incorrecto.

No. Los tres patrones de localización, los patrones de sincronización y la zona de silencio no llevan corrección de errores. Un escáner los necesita para situar y alinear el símbolo antes de empezar a decodificar, así que cubrir uno suele significar que el código no llega a detectarse - incluso en el nivel H y con un área de datos por lo demás perfecta.

La causa habitual es el tamaño de módulo o el contraste, no el daño. El nivel H reduce la capacidad de datos, así que el símbolo se vuelve más denso con el mismo ancho impreso. Mide un módulo: por debajo de unos 0,4 mm impresos, las cámaras de los teléfonos tienen problemas sea cual sea el nivel. Agranda el código o acorta la URL.

La mayoría de los generadores usan por defecto el nivel M, que recupera alrededor del 15%. Ese valor por defecto es un compromiso razonable para imprimir, pero conviene comprobarlo en lugar de darlo por hecho - algunas herramientas usan L, y otras suben el nivel en silencio al añadir un logotipo, lo que cambia la versión de símbolo y la densidad impresa.

Apenas. Los niveles altos añaden módulos, así que la cámara resuelve una cuadrícula algo más densa y el decodificador ejecuta una pasada Reed-Solomon algo más larga, pero en el hardware de un teléfono moderno la diferencia no se percibe. La velocidad de escaneo la determinan mucho más la iluminación, la distancia de enfoque y el tamaño del módulo.

No. Las palabras de código de corrección de errores se derivan matemáticamente del contenido y no guardan nada por su cuenta. Cualquier cosa que parezca añadir una capa oculta - una forma, un color, una superposición artística - es decoración que consume capacidad de recuperación, no un segundo canal de datos.

¿Por qué KoloQR?

  • Crea códigos QR para sitios web, menús, Wi-Fi, PDF y tarjetas de visita
  • Personaliza colores, logotipos y formas únicas
  • Descarga archivos PNG y SVG de alta calidad
  • Pensado tanto para impresión como para digital
Generar código QR
Un código QR negro sencillo junto al mismo código rediseñado como un círculo con los colores de la marca