Correção de erros em QR code: como L, M, Q e H funcionam de verdade
pela equipe KoloQRFundamentos

A correção de erros é a redundância embutida em um QR code que permite ao scanner reconstruir os dados quando parte do símbolo está danificada ou coberta. Em certo sentido, um QR code guarda seu conteúdo duas vezes: uma como dados e outra como informação de recuperação derivada matematicamente e espalhada pelo símbolo. Se parte do código está arranhada, borrada, dobrada ou escondida atrás de um logo, o scanner reconstrói os pedaços que faltam a partir do que sobrou.
Pontos principais
- A correção de erros é a redundância embutida em um QR code que permite ao scanner reconstruir os dados quando parte do símbolo está danificada ou coberta.
- Os quatro níveis definidos na ISO/IEC 18004 recuperam aproximadamente 7% (L), 15% (M), 25% (Q) e 30% (H) dos dados do código.
- Uma correção de erros mais alta reduz a capacidade de dados, então a mesma URL precisa de uma versão de símbolo maior - com uma largura impressa fixa, isso significa módulos menores e leitura mais difícil.
- A correção de erros repara apenas a área de dados. Danos em um padrão de localização, nos padrões de temporização ou na zona de silêncio costumam tornar o código ilegível, não importa o nível usado.
- A correção de erros não compensa contraste baixo, desfoque, reflexo ou um código impresso pequeno demais, porque esses problemas degradam o símbolo inteiro de uma vez, e não uma região dele.
O que é a correção de erros de um QR code?
O mecanismo é a codificação Reed-Solomon, a mesma família de códigos usada em CDs e em transmissões do espaço profundo. A codificação Reed-Solomon é o esquema que gera as palavras-código de correção de erros de um QR code e reconstrói os dados perdidos a partir das que continuam intactas. Ela trabalha sobre palavras-código, não sobre quadrados individuais. Uma palavra-código é um grupo de oito módulos que um QR code trata como uma unidade - de dados ou de correção de erros.
A correção de erros é escolhida uma vez, na hora de gerar o código, e fica gravada no símbolo. O nível é escrito na informação de formato ao lado dos padrões de localização, então qualquer scanner consegue ler qual nível foi usado. O nível de correção de erros de um QR code impresso não pode ser alterado depois; mudá-lo significa gerar e imprimir o código de novo.
O que significam os níveis de correção de erros L, M, Q e H?
Os quatro níveis de correção de erros do QR recuperam aproximadamente 7% (L), 15% (M), 25% (Q) e 30% (H) das palavras-código do código. Todo QR code usa exatamente um deles. Níveis mais altos acrescentam mais palavras-código de recuperação, o que deixa menos palavras-código para os seus dados de verdade em qualquer tamanho de símbolo.
| Nível | Recuperação nominal | Bytes na versão 1 (21×21) | Bytes na versão 10 (57×57) | Uso típico |
|---|---|---|---|---|
| L (baixo) | ~7% | 17 | 271 | Telas, apps, URLs longas, superfícies internas limpas |
| M (médio) | ~15% | 14 | 213 | O padrão mais comum; trabalho impresso em geral |
| Q (quartil) | ~25% | 11 | 151 | Logo pequeno ao centro, material manuseado ou externo |
| H (alto) | ~30% | 7 | 119 | Logo maior, marcação industrial, abrasão, intempéries |
As porcentagens descrevem palavras-código, não área de superfície, e são nominais, não exatas. A versão 1 deixa a aritmética à vista: o símbolo guarda 26 palavras-código no total, e o Reed-Solomon consegue reparar até metade das palavras-código de correção de erros de um bloco, menos uma pequena reserva que a norma separa para reduzir o risco de decodificar dados errados.
| Nível (versão 1) | Palavras-código de dados | Palavras-código de correção | Palavras-código reparáveis | Fração das 26 totais |
|---|---|---|---|---|
| L | 19 | 7 | 2 | 8% |
| M | 16 | 10 | 4 | 15% |
| Q | 13 | 13 | 6 | 23% |
| H | 9 | 17 | 8 | 31% |
Em símbolos maiores, os dados são divididos em vários blocos Reed-Solomon e as palavras-código são intercaladas por todo o símbolo, então um borrão único se distribui por muitos blocos e cada bloco repara a sua parte. A intercalação é o motivo de uma marca de xícara em um canto costumar ser sobrevivível, e de a porcentagem nominal ser um guia razoável mesmo com a correção acontecendo bloco a bloco.
Qual nível de correção de erros você deve usar?
Use M na maioria dos QR codes impressos, Q ou H quando um logo fica sobre o código ou a superfície sofre maus-tratos, e L só em telas ou onde o conteúdo é longo e o código precisa manter os módulos grandes. M é o nível padrão da maioria dos geradores, e para um pôster, folheto, cardápio ou cartão de visita que não vai ser arranhado, M é a resposta certa.
Regras de decisão:
- Se o código vai ser exibido em uma tela, escolha L. As telas não têm sujeira, nem dobras, e têm contraste perfeito, então a capacidade de recuperação é redundância desperdiçada que só deixa o código mais denso.
- Se o código vai ser impresso em papel e não vai levar logo, escolha M. O M cobre manuseio normal, espalhamento de tinta e borrões leves.
- Se o código leva um logo ao centro, escolha Q no mínimo, e H se o logo for grande. O logo consome a capacidade de recuperação que absorveria erros de impressão e de leitura.
- Se o código vai para a rua, para uma embalagem, para uma máquina ou para qualquer lugar em que será esfregado, dobrado ou exposto ao tempo, escolha H. A abrasão remove módulos em definitivo.
- Se o conteúdo é longo e o código precisa continuar fisicamente pequeno, escolha L ou M e encurte o conteúdo. Aumentar o nível em uma URL longa força um símbolo mais denso, o que costuma ser o risco maior.
Um contraexemplo trabalhado ajuda aqui. O QR-bill suíço, o padrão nacional de pagamentos da Suíça e do Liechtenstein, especifica correção de erros de nível M, um símbolo fixo de 46 × 46 mm, um módulo mínimo de 0,4 mm e uma cruz suíça de 7 × 7 mm no centro do código. Essa cruz cobre cerca de 2,3% da área do símbolo. Um padrão bancário nacional coloca um logo sobre um QR code no nível M - porque o logo é pequeno e o tamanho do módulo é garantido. O nível H não é uma exigência para ter um logo; ele é a compensação por um logo grande.
Como a correção de erros muda o tamanho de um QR code impresso
Aumentar o nível de correção de erros deixa cada módulo menor com uma largura impressa fixa, porque os mesmos dados precisam de uma versão de símbolo mais alta, com mais módulos por lado. É o compromisso que a maioria das pessoas não percebe: o nível que protege contra danos também aumenta a densidade que causa as falhas de leitura em primeiro lugar.
Tome uma URL de 44 caracteres como https://koloqr.com/qr-codes-for/coffee-shops, codificada em modo byte e impressa com 25 mm de largura:
| Nível | Versão do símbolo | Grade | Largura do módulo a 25 mm | Largura mínima do símbolo com módulos de 0,4 mm |
|---|---|---|---|---|
| L | 3 | 29 × 29 | 0,86 mm | 11,6 mm |
| M | 4 | 33 × 33 | 0,76 mm | 13,2 mm |
| Q | 4 | 33 × 33 | 0,76 mm | 13,2 mm |
| H | 5 | 37 × 37 | 0,68 mm | 14,8 mm |
Duas coisas saem dessa tabela. Primeiro, ir de L para H encolhe cada módulo em cerca de 21% no mesmo tamanho impresso - em papel absorvente, essa é a diferença entre módulos nítidos e módulos que sangram uns nos outros. Segundo, M e Q produzem a mesma versão de símbolo para esse conteúdo, o que significa que Q sai de graça: o mesmo código físico, o mesmo tamanho de módulo, 25% de recuperação em vez de 15%.
Confira esse segundo ponto sempre. Como a capacidade anda em degraus, subir um nível de correção de erros muitas vezes não custa nada. Gere o código no nível escolhido, anote o tamanho da grade, gere um nível acima e compare. Se a grade não mudou, fique com o nível mais alto.
Quanto de um QR code um logo pode cobrir?
Um logo central que cobre até cerca de 20% da área de um QR code é recuperável com segurança no nível H na maioria dos fluxos de impressão. O teto teórico em H fica perto de 30%, mas gastar todo o orçamento de recuperação com o logo não deixa nada para o espalhamento da tinta, um reflexo, uma digital ou uma câmera um pouco fora de foco - e esses erros saem do mesmo orçamento.
Uma regra prática, fácil de conferir: um logo circular cujo diâmetro é metade da largura do QR code cobre cerca de 20% da área do símbolo. Um logo quadrado de lado 0,45 × a largura do código cobre mais ou menos o mesmo. Fique nisso e o nível H mantém cerca de um terço da capacidade em reserva.
Regras que importam mais do que a porcentagem:
- Mantenha o logo no centro. Um logo centralizado espalha o dano de forma uniforme pelos blocos Reed-Solomon intercalados. Um logo do mesmo tamanho fora do centro concentra o dano e tem mais chance de esgotar um bloco.
- Nunca deixe o logo encostar nos três padrões de localização. Aqueles quadrados grandes nos cantos são o que permite ao scanner encontrar o código, e eles não têm correção de erros nenhuma.
- Dê ao logo um fundo sólido. Um logo colocado direto sobre os módulos, com fundo transparente, cria meios-módulos ambíguos na borda, o que gera erros que o decodificador ainda tem de gastar capacidade para corrigir.
- Em símbolos da versão 7 para cima, fique de olho nos padrões de alinhamento. Da versão 7 em diante, os padrões de alinhamento ficam dentro da área de dados, inclusive perto do centro. Um logo central grande pode enterrar um deles, o que em geral ainda escaneia de frente, mas pode falhar em ângulo ou em uma superfície curva.
- Teste o código impresso, não a prévia na tela. Um logo que funciona com 400% de zoom em um monitor pode falhar a 25 mm em papel não revestido.
O KoloQR, um gerador de QR code grátis com QR codes circulares e de formatos personalizados, aceita a colocação de logo e deixa você definir o nível de correção de erros antes de exportar. Formatos decorativos de módulo - pontos arredondados, módulos circulares - reduzem a área de tinta impressa de cada módulo, então consomem parte da mesma tolerância que a correção de erros existe para oferecer. Estilizar nunca melhora o desempenho de leitura; é a correção de erros que absorve a diferença. Veja QR codes personalizados para saber como isso fica na prática.
Quais partes de um QR code a correção de erros não repara
A correção de erros protege apenas a área de dados. Os padrões estruturais de que um scanner precisa antes de decodificar qualquer coisa não são cobertos pela correção Reed-Solomon, então um dano ali costuma ser fatal, tenha o código sido gerado em L ou em H.
- Padrões de localização. Os três quadrados concêntricos nos cantos superior esquerdo, superior direito e inferior esquerdo dizem ao scanner onde o símbolo está e como ele está girado. Nenhuma redundância os protege. Cobrir um deles costuma significar que o código nunca é detectado.
- Zona de silêncio. A zona de silêncio é a margem vazia de quatro módulos ao redor de um QR code que permite ao scanner detectar onde o símbolo começa e termina. Um texto, uma borda ou uma foto empurrada para dentro dessa margem quebra a detecção mesmo com todos os módulos do código perfeitos.
- Padrões de temporização. As linhas alternadas de um módulo que correm entre os padrões de localização definem a grade de módulos. Um dano aqui desalinha a leitura inteira.
- Padrões de alinhamento. Presentes da versão 2 em diante, eles corrigem a distorção de perspectiva. Perder um costuma ser sobrevivível em uma leitura plana e de frente, e muito menos em uma garrafa curva ou em uma placa inclinada.
A informação de formato é a exceção. A faixa de módulos ao lado dos padrões de localização, que registra o nível de correção de erros e o padrão de máscara, é ela mesma protegida por um código BCH e guardada duas vezes no símbolo, então sobrevive sozinha a uma boa dose de dano.
Contra o que a correção de erros não protege
A correção de erros conserta danos localizados, não degradação geral. Subir o nível de M para H não faz nada por um código pequeno demais, claro demais, borrado ou mal iluminado - esses problemas afetam todos os módulos de uma vez, e não sobra região intacta para o decodificador reconstruir a partir dela.
Falhas que um nível de correção de erros mais alto não resolve:
- Um código impresso pequeno demais para os seus dados. Abaixo de mais ou menos 0,4 mm por módulo no impresso, as câmeras de celular têm dificuldade para resolver a grade. Aumentar o nível deixa os módulos menores e o problema pior.
- Contraste baixo. Um scanner precisa de uma distinção clara entre claro e escuro. Um código cinza-claro sobre um fundo creme falha em qualquer nível.
- Cores invertidas. Módulos claros sobre fundo escuro não têm suporte universal; vários apps de leitura e câmeras nativas esperam escuro sobre claro.
- Reflexo e laminação. Uma laminação brilhante sob um spot reflete na câmera e apaga o símbolo inteiro.
- Desfoque de movimento e pouca luz. Os dois degradam a imagem toda, não um canto dela.
- Uma URL de destino errada ou fora do ar. A correção de erros garante que o scanner leia corretamente a string codificada. Ela não diz nada sobre esse endereço ainda existir.
Quando um código falha de forma intermitente na rua e a amostra impressa parece limpa, a causa é quase sempre tamanho de módulo, contraste ou iluminação - não o nível de correção de erros.
Correção de erros na tela versus na impressão
Na tela, o nível L costuma ser a melhor escolha; no impresso, M é o piso sensato. Um QR code em um display não enfrenta nenhum dos riscos físicos para os quais a correção de erros existe - sem espalhamento de tinta, sem dobras, sem abrasão, sem sujeira -, então a capacidade de recuperação não compra nada e os módulos extras deixam o código mais denso do que precisa ser.
Considerações específicas de tela: um código mostrado em um celular e escaneado por outro disputa com reflexo e brilho da tela, coisa que uma correção de erros mais alta não resolve. Aumente o tamanho exibido e o brilho da tela.
Considerações específicas de impressão: papel absorvente espalha a tinta, e cada módulo cresce um pouco sobre os vizinhos. Esse ganho de ponto é uma fonte real de erros e é exatamente o que os níveis M e Q absorvem. Papel revestido espalha menos; papel jornal, papel kraft e tecido espalham mais. Exporte em SVG em vez de um PNG ampliado, para que os módulos fiquem geometricamente exatos na resolução da impressora - o KoloQR exporta PNG e SVG.
Como testar quanto dano seu QR code realmente suporta
Teste o código impresso de verdade em vez de confiar na porcentagem nominal - o nível diz qual é o orçamento, a tiragem diz quanto dele já foi gasto. O procedimento abaixo leva cerca de quinze minutos e devolve um número em que você pode confiar.
- Gere o código com os ajustes finais. O mesmo conteúdo, o mesmo nível de correção de erros, o mesmo logo, exportado em SVG.
- Imprima com os ajustes e no papel de produção. A mesma impressora, o mesmo papel, a mesma laminação. Uma prova a laser em papel de escritório não prevê como o cartão não revestido se comporta.
- Escaneie o impresso intacto na distância prevista com dois celulares. Um iOS e um Android, com a câmera nativa. Se falhar aqui, pare e ajuste o tamanho ou o contraste antes de testar danos.
- Cubra 10% da área do símbolo no centro com fita opaca. Em um código de 25 mm, um quadrado de 8 × 8 mm chega perto de 10%. Escaneie de novo.
- Aumente a área coberta em passos de 5% até o código parar de escanear. Anote a última porcentagem que funcionou - essa é a sua tolerância real.
- Repita com o dano em uma borda e depois atravessando um canto. Sem tocar nos padrões de localização. O dano na borda costuma falhar antes do dano no centro.
- Repita sob a iluminação real. O salão da loja, o restaurante à noite, o corredor do depósito.
- Compare o resultado com o nível nominal. Se um código de nível H falha com 12% de cobertura, o orçamento restante foi consumido pela qualidade de impressão. Aumente o código, encurte a URL ou mude para uma superfície menos absorvente.
Anote o número. É o dado mais útil que se pode ter antes de fechar uma tiragem.
Erros comuns ao escolher um nível de correção de erros
O erro mais comum de correção de erros é escolher H por padrão, na suposição de que mais proteção é sempre mais seguro. Em uma URL longa e um tamanho impresso pequeno, o H produz um código mais denso, que falha mais do que a versão em M que ele substituiu.
| Faça | Por quê |
|---|---|
| Encurte a URL antes de aumentar o nível | Menos caracteres significa uma versão de símbolo mais baixa, módulos maiores e mais tolerância no mundo real do que qualquer mudança de nível entrega |
| Verifique se o nível seguinte muda o tamanho da grade | A capacidade anda em degraus, então subir de nível sai de graça com frequência |
| Use H em códigos externos, industriais e de embalagem | A abrasão e o tempo removem módulos em definitivo, que é exatamente para isso que serve a capacidade de recuperação |
| Teste a amostra impressa com danos aplicados | A porcentagem nominal é um teto, não uma garantia |
| Não faça | Por quê |
|---|---|
| Usar H para compensar um código pequeno | Módulos menores causam mais falhas do que a correção de erros repara |
| Gastar todo o orçamento de recuperação com um logo | Erros de impressão, reflexo e foco saem do mesmo orçamento, e não sobra nada |
| Achar que o H protege os padrões de localização | Nenhum nível de correção de erros os protege; um padrão de localização coberto significa nenhuma detecção |
| Contar com a correção de erros para sobreviver à falta de zona de silêncio | A detecção falha antes de a decodificação começar, então a capacidade de recuperação nunca é usada |
| Aumentar o nível depois que um código falha na rua | Investigue contraste, tamanho e iluminação primeiro; o nível raramente é a causa |
Questions? Answered
Use Q no mínimo, e H se o logo cobrir mais de uns 15% do código. Mantenha o logo centralizado, sobre um fundo sólido e dentro de cerca de 20% da área do símbolo no nível H. Isso deixa capacidade de recuperação para erros de impressão e de câmera, que saem do mesmo orçamento que o logo.
Nem sempre. Níveis mais altos absorvem mais dano, mas reduzem a capacidade de dados, então o mesmo conteúdo precisa de uma versão de símbolo maior e de módulos menores na mesma largura impressa. Em uma URL longa e um código impresso pequeno, o nível M costuma escanear com mais confiabilidade que o nível H.
Não. O nível é codificado na informação de formato do símbolo e determina como o código inteiro é construído, então não dá para editá-lo depois. Gere o código de novo com o nível novo e reimprima. Se o destino também precisa mudar, isso é outro problema - códigos estáticos apontam para uma URL fixa.
O scanner normalmente informa uma leitura falha em vez de devolver dados errados. Os QR codes reservam um pequeno número de palavras-código de proteção contra decodificação incorreta nos menores tamanhos de símbolo justamente para reduzir a chance de um código corrompido decodificar em um valor plausível, porém errado.
Não. Os três padrões de localização, os padrões de temporização e a zona de silêncio não têm correção de erros. Um scanner precisa deles para encontrar e alinhar o símbolo antes de começar a decodificar, então cobrir um costuma significar que o código nunca é detectado - mesmo no nível H, com a área de dados perfeita.
A causa habitual é o tamanho do módulo ou o contraste, não o dano. O nível H reduz a capacidade de dados, então o símbolo fica mais denso na mesma largura impressa. Meça um módulo: abaixo de mais ou menos 0,4 mm no impresso, as câmeras de celular sofrem em qualquer nível. Aumente o código ou encurte a URL.
A maioria dos geradores usa o nível M por padrão, que recupera cerca de 15%. O padrão é um meio-termo razoável para impressão, mas vale conferir em vez de supor - algumas ferramentas usam L por padrão, e algumas sobem o nível em silêncio quando você adiciona um logo, o que muda a versão do símbolo e a densidade impressa.
Quase nada. Níveis mais altos acrescentam módulos, então a câmera resolve uma grade um pouco mais densa e o decodificador roda uma passagem Reed-Solomon um pouco mais longa, mas em celulares modernos a diferença não é perceptível. A velocidade de leitura depende muito mais de iluminação, distância de foco e tamanho do módulo.
Não. As palavras-código de correção de erros são derivadas matematicamente do conteúdo e não guardam nada de independente. Qualquer coisa que pareça acrescentar uma camada oculta - uma forma, uma cor, uma sobreposição artística - é decoração que consome capacidade de recuperação, não um segundo canal de dados.
Continue explorando
Páginas que seguem de onde esta parou: o mesmo contexto, o mesmo tipo de código ou a próxima decisão a tomar.
QR codes personalizados
Combine QR codes com a sua marca usando um logo, cores e formas customizadas - sem abrir mão da escaneabilidade.
Cardápios de restaurante
Cartões de mesa e embalagens para viagem que abrem o cardápio atual em um escaneamento - atualize um preço e todas as mesas mostram, sem reimprimir nada.
Lojas físicas
Detalhes do produto, estoque e links de avaliação em etiquetas de gôndola, vitrines e placas de caixa.
QR codes redondos
Módulos circulares e uma moldura redonda, para os porta-copos, selos e crachás em que um código quadrado nunca ficou bem.
QR code vs código de barras: como eles diferem e quando usar cada um
Capacidade, hardware de leitura, tamanho de impressão, tolerância a danos e custo - uma comparação lado a lado entre códigos de barras lineares e QR codes, com uma regra para escolher.
Resolução de QR code: quantos pixels e quanto DPI um QR code realmente precisa
A fórmula de impressão, o teto em pixels dos tamanhos de PNG mais comuns, o tamanho do módulo em milímetros e os erros de resolução que fazem um QR code impresso parar de escanear.
Por que a KoloQR?
- Crie QR codes para sites, cardápios, Wi-Fi, PDFs e cartões de visita
- Personalize cores, logos e formas únicas
- Baixe arquivos PNG e SVG de alta qualidade
- Feito tanto para impressão quanto para o digital
