Correção de erros de QR Code explicada (L, M, Q, H): qual nível você deve usar de fato?
Pegue qualquer gerador de QR code e você verá quatro opções rotuladas L, M, Q e H. A maioria deixa o padrão e segue em frente — até o código impresso voltar da gráfica sem escanear, ou o time de marketing colocar uma logo no centro e o código inteiro morrer. O nível de correção de erros não é uma configuração cosmética. Ele determina quanto dano físico um código pode sobreviver, e troca diretamente com a quantidade de dados que o código pode conter.
Este artigo explica o que esses níveis realmente fazem dentro da especificação do QR (ISO/IEC 18004), como mudam a capacidade com números reais, e como escolher o certo para o seu caso de uso.
O que a correção de erros realmente é
Um QR code não apenas codifica seus dados — ele também codifica informação redundante que permite a um leitor reconstruir partes danificadas ou ilegíveis do código. O mecanismo é a correção de erros Reed–Solomon, a mesma família de algoritmos usada em CDs, DVDs, discos Blu-ray e comunicação no espaço profundo.
Quando um QR code é gerado, a carga útil de dados é dividida em blocos, e para cada bloco o codificador calcula um conjunto de codewords de correção de erros. Se um leitor depois encontrar módulos (os quadrados pretos e brancos) que são ilegíveis — por causa de um arranhão, mancha de café, iluminação ruim, ou logo sobreposta — ele usa aqueles codewords redundantes para reconstruir matematicamente os ausentes.
Códigos Reed–Solomon têm uma propriedade útil: para corrigir t codewords errados em posições desconhecidas, você precisa de 2t codewords redundantes. (Se você conhece as posições dos codewords danificados — chamados de «apagamentos» — cada codeword de redundância corrige um.) O nível de correção de erros simplesmente controla quanto do orçamento total de codewords é gasto em redundância versus carga útil.
Os quatro níveis, pelos números
A especificação ISO/IEC 18004 define quatro níveis de correção de erros com estas capacidades de recuperação aproximadas — a fração de codewords que podem ser danificados e ainda ser totalmente recuperados:
| Nível | Nome | Capacidade de recuperação |
|---|---|---|
| L | Low | ~7% dos codewords |
| M | Medium | ~15% dos codewords |
| Q | Quartile | ~25% dos codewords |
| H | High | ~30% dos codewords |
Duas nuances importantes que a porcentagem única esconde:
- A porcentagem se aplica aos codewords, não à área dos módulos. A regra popular «nível H sobrevive 30% do código coberto» é aproximadamente verdadeira na prática porque o dano costuma ser contíguo, mas o limite formal é sobre codewords danificados. Danos espacialmente agrupados (como uma logo) são frequentemente mais fáceis de sobreviver do que o mesmo número de erros espalhados aleatoriamente, porque apagamentos são mais baratos de corrigir do que erros de posição desconhecida.
- Níveis mais altos custam capacidade. Mais redundância significa menos espaço para a carga útil na mesma versão (tamanho). Se os dados não cabem, o codificador precisa pular para uma versão maior — mais módulos, impressão mais densa, mais difícil de escanear à distância.
Capacidade: o que os níveis custam na prática
QR codes vêm em 40 tamanhos chamados versões. Versão 1 é 21×21 módulos, e cada versão subsequente adiciona 4 módulos por lado, até a versão 40 com 177×177. A tabela abaixo mostra capacidades máximas de caracteres da especificação para três tipos de carga útil representativos, nos quatro níveis. (Modo byte cobre dados binários arbitrários tipo UTF-8 e URLs típicos; modo alfanumérico cobre 0–9 A–Z espaço $%*+-./:; modo numérico é só dígitos.)
| Versão | Módulos | Nível | Numérico | Alfanumérico | Byte |
|---|---|---|---|---|---|
| 1 | 21×21 | L | 41 | 25 | 17 |
| 1 | 21×21 | M | 34 | 20 | 14 |
| 1 | 21×21 | Q | 27 | 16 | 11 |
| 1 | 21×21 | H | 17 | 10 | 7 |
| 5 | 37×37 | L | 255 | 154 | 106 |
| 5 | 37×37 | M | 202 | 122 | 84 |
| 5 | 37×37 | Q | 144 | 87 | 60 |
| 5 | 37×37 | H | 106 | 64 | 44 |
| 10 | 57×57 | L | 652 | 395 | 271 |
| 10 | 57×57 | M | 513 | 311 | 213 |
| 10 | 57×57 | Q | 364 | 221 | 151 |
| 10 | 57×57 | H | 288 | 174 | 119 |
| 20 | 97×97 | L | 2061 | 1249 | 858 |
| 20 | 97×97 | M | 1600 | 970 | 666 |
| 20 | 97×97 | Q | 1120 | 679 | 466 |
| 20 | 97×97 | H | 861 | 521 | 358 |
| 40 | 177×177 | L | 7089 | 4296 | 2953 |
| 40 | 177×177 | M | 5596 | 3391 | 2331 |
| 40 | 177×177 | Q | 3993 | 2420 | 1663 |
| 40 | 177×177 | H | 3057 | 1852 | 1273 |
Leia a versão 1 com atenção: ir de L para H corta a capacidade em bytes de 17 para 7 — uma redução de 59%. Essa troca geralmente vale a pena para impressão, mas é um custo real. Uma URL longa que cabe confortavelmente em um código versão 4 no nível M pode forçar um código versão 6 no nível H, e códigos maiores significam módulos menores no mesmo tamanho impresso.
Cargas úteis mais curtas sempre vencem correção de erros mais forte. Uma URL curta em um código de baixa versão no nível H vai escanear melhor do que uma URL longa em um código de alta versão no nível L quase sempre. Se você está codificando uma URL, use um domínio curto ou um redirecionamento. Isso importa mais do que qualquer outra otimização.
Tamanho de impressão e distância de leitura: a regra 10:1
Correção de erros não salva um código que é simplesmente pequeno demais para ser resolvido. A regra de campo amplamente usada é a proporção 10:1: a distância de leitura não deve ser mais do que cerca de 10 vezes a largura do código. Algumas referências consideram 10:1 conservador e citam leituras bem-sucedidas mais perto de 15:1 com boas câmeras e iluminação, mas 10:1 é o número para projetar.
- Código de cartão de visita, 2 cm de largura → confiável até ~20 cm
- Código de poster, 10 cm de largura → confiável até ~1 m
- Código de outdoor, 1 m de largura → confiável até ~10 m
Duas restrições relacionadas:
- Tamanho do módulo. Cada módulo deve ter pelo menos cerca de 0,4 mm (cerca de 2 mils é pequeno demais; 0,4 mm é um piso comum de impressão) para que câmeras de telefone consigam resolver. Para um código versão 10 (57 módulos), isso é um tamanho físico mínimo de cerca de 2,3 cm só para a área de dados.
- A zona de silêncio. A especificação exige uma margem de pelo menos 4 módulos de espaço em branco ao redor do código. Cortar a zona de silêncio é uma das razões mais comuns de falha de códigos impressos, e nenhum nível de correção de erros corrige isso — leitores usam a zona de silêncio para encontrar as bordas do código.
Por que logos exigem nível H
Embutir uma logo no centro de um QR code é a razão clássica pela qual o nível H existe. A logo cobre fisicamente módulos, destruindo os codewords por baixo. O orçamento de recuperação de ~30% do nível H é o que torna isso sobrevivível.
Regras práticas para sobreposição de logo:
- Use H. Sempre. No M (~15%) uma logo de tamanho modesto já consome a maior parte do orçamento.
- Mantenha a logo abaixo de ~30% da área total do código — e de preferência bem abaixo, porque a área coberta raramente se distribui de forma limpa pelos blocos de codewords. Uma logo cobrindo 20% da área no nível H é um design confortável; 28% é apostando.
- Fique no centro. Os três padrões de localização (os quadrados grandes nos cantos) e os padrões de timing/alinhamento carregam dados estruturais que a correção de erros não protege da mesma forma. Posicionamento central evita eles.
- Teste em telefones reais, em distância real, em iluminação ruim. Não só no seu flagship em uma mesa. Dispositivos Android antigos com câmeras medíocres são o piso para o qual você projeta.
Note que geradores que permitem colocar uma logo em um código sem perguntar o nível estão implicitamente apostando no nível que você escolheu em outro lugar. Se você define L e adiciona uma logo, você criou um código que falha com frequência mas não sempre — o pior resultado possível, porque passa em testes casuais e falha em campo.
Como escolher de fato
Nível L (~7%) — Contextos somente digitais onde a imagem é renderizada perfeitamente: handoff app-a-app, telas, ingressos gerados exibidos em um telefone. Pixels limpos significam que quase nada pode dar errado, então gaste o orçamento em capacidade e tamanho pequeno. Raramente a escolha certa fora disso.
Nível M (~15%) — O padrão geral para impressão limpa: cartões de visita, embalagem de produto, documentos. Sobrevive ao desgaste normal de manuseio, pequenos defeitos de impressão e brilho. A maioria dos padrões de geradores aterrissa aqui, e por boa razão.
Nível Q (~25%) — Ambientes físicos hostis sem sobreposição de logo: etiquetas industriais, prateleiras de armazém, tags de equipamento, sinalização externa exposta ao clima. Se a superfície for arranhada, suja ou parcialmente obscurecida em uso normal, Q é o cavalo de batalha.
Nível H (~30%) — Sobreposição de logo, ambientes muito hostis, ou situações onde uma leitura falhada é cara (códigos de pagamento, etiquetas críticas de segurança). Também a escolha certa quando você precisa imprimir muito pequeno e espera câmeras de baixa qualidade.
A árvore de decisão se comprime em: digital → L ou M; impressão limpa → M; ambiente áspero → Q; logo ou confiabilidade crítica → H. E independentemente do nível: mantenha a carga útil curta, mantenha a zona de silêncio, e respeite a regra de distância 10:1.
Verifique você mesmo
Teoria é bom, mas correção de erros de QR é fácil de testar empiricamente. Gere a mesma URL em cada nível com nosso Gerador de QR Code e compare:
- Gere o código no nível L, depois M, Q e H. Note o aumento na densidade de módulos — essa densidade visual é a redundância.
- Imprima a versão nível H, cubra o centro com uma moeda ou adesivo (~20% da área), e escaneie. Deve funcionar.
- Tente o mesmo com a versão nível L. Não vai funcionar.
- Pegue o código nível H e cubra progressivamente mais área até as leituras falharem — você vai descobrir que o limite prático está perto do teórico ~30%.
Você também verá a troca de capacidade diretamente: cole uma URL longa e veja qual versão (tamanho) cada nível requer. Esse experimento ensina a troca mais rápido do que qualquer tabela.
Resumo
- Correção de erros em QR codes é redundância Reed–Solomon; o nível define quanto do orçamento de codewords é redundância: L ≈ 7%, M ≈ 15%, Q ≈ 25%, H ≈ 30% de recuperação.
- Níveis mais altos cortam capacidade — na versão 1, H segura menos da metade dos bytes que L segura.
- Cargas úteis mais curtas vencem correção mais forte; reduza URLs antes de subir o nível.
- Projete o tamanho de impressão com a regra de distância 10:1 e nunca corte a zona de silêncio de 4 módulos.
- Sobreposição de logo ⇒ nível H, logo abaixo de ~30% da área, centralizada, testada em telefones baratos.
Gere algumas variantes com o Gerador de QR Code e o nível certo para seu caso de uso será óbvio em cinco minutos.