Pular para o conteúdo

BlogDados5 min de leitura

Correção de erros e tamanho do QR code: L, M, Q e H testados

Uma correção de erros maior deixa um QR code resistir a danos, mas também o deixa mais denso. Geramos códigos para quatro tipos comuns de conteúdo em cada nível e os cobrimos aos poucos até pararem de ser lidos.

Um QR code com um logotipo no centro, lido por um celular, e os níveis L, M, Q e H.

Todo gerador de QR code pede um nível de correção de erros: L, M, Q ou H. A explicação comum é que níveis mais altos deixam o código resistir a mais dano. É verdade, mas tem um custo que raramente se menciona, e a tolerância real é menor que os números que costumam ser citados. Geramos códigos para quatro tipos comuns de conteúdo em cada nível e os cobrimos aos poucos até nosso leitor não conseguir mais lê-los.

O que a correção de erros faz

Um QR code guarda seu conteúdo como uma série de bytes, chamados palavras de código, e acrescenta palavras de código extras calculadas a partir delas com a codificação Reed-Solomon, a mesma técnica usada nos CDs. Se algumas palavras de código forem danificadas, as extras permitem ao leitor reconstruí-las. Os quatro níveis definem quanto do código é dedicado a isso:

NívelPalavras de código recuperáveisConselho comum
L (baixo)Cerca de 7%Telas e documentos limpos
M (médio)Cerca de 15%O padrão comum
Q (quartil)Cerca de 25%Impressão, áreas externas, logotipos
H (alto)Cerca de 30%Condições difíceis, logotipos grandes
As porcentagens são as da norma do QR code.

As palavras de código extras ocupam espaço que, de outro modo, guardaria conteúdo. Para o mesmo conteúdo, um nível maior precisa de uma grade maior de quadrados (chamados módulos).

Quanto o código cresce

Quatro QR codes para o mesmo link lado a lado, nos níveis de correção de erros L, M, Q e H. A grade cresce de 37 por 37 quadrados no nível L a 53 por 53 no nível H, então os quadrados ficam menores e mais apertados.
O mesmo link de 89 caracteres nos quatro níveis. Impressos com a mesma largura, os quadrados do código H são 30% menores que os do código L.
ConteúdoCaracteresLMQH
Link curto1925 × 2525 × 2525 × 2529 × 29
Dados de Wi-Fi6133 × 3333 × 3341 × 4145 × 45
Link com códigos de rastreamento8937 × 3741 × 4149 × 4953 × 53
Cartão de contato20253 × 5357 × 5765 × 6577 × 77
Tamanho da grade do menor QR code que comporta o conteúdo em cada nível.

Um link curto cabe na menor grade em três dos quatro níveis, porque essa grade tem espaço sobrando. Conteúdo mais longo cresce rápido: o cartão de contato no nível H precisa de 77 × 77 módulos, quase dez vezes a área do link curto.

Isso importa porque o que a câmera precisa enxergar é o módulo, não o código. Num código impresso com 2,5 cm de largura, o link curto tem módulos de 1 mm, e o cartão de contato no nível H módulos de 0,3 mm, mais ou menos o tamanho de um grão de sal. Módulos pequenos são o que faz os códigos falharem em impressões de baixa qualidade, à distância e com pouca luz.

Quanto dano um código suporta

Para testar os níveis, cobrimos o centro de cada código com um quadrado branco, onde costuma ficar um logotipo, e aumentamos seu tamanho um ponto percentual da área do código por vez até o leitor do nosso leitor de QR code falhar.

ConteúdoLMQH
Link curto5%6%9%16%
Dados de Wi-Fi5%8%14%19%
Link com códigos de rastreamento7%11%20%20%
Cartão de contato8%12%19%15%
O maior quadrado centralizado, como parte da área do código, com que ainda houve leitura.
Duas cópias do mesmo QR code de nível H com um quadrado branco no centro. Com 20% da área coberta ele ainda é lido; com 24% coberta, não.
Nível H com o centro coberto. Alguns pontos percentuais a mais fizeram a diferença.

Duas coisas se destacam. Primeiro, a tolerância real foi menor que os números da norma, muitas vezes em um terço ou mais. Um quadrado coberto corta palavras de código nas bordas, danificando mais do que seu tamanho sugere, e pode esconder marcas de alinhamento que o leitor usa para achar a grade. Segundo, os níveis mais altos nem sempre ganharam: no cartão de contato, o H falhou antes do Q. Códigos maiores têm mais marcas de alinhamento para um quadrado central atingir, e cada leitor lida com o dano de um jeito um pouco diferente.

A lição prática é deixar margem. Se um código precisa resistir a danos, não conte com usar toda a sua correção de erros.

Logotipos em QR codes

Um logotipo funciona danificando o código de propósito e contando com a correção de erros para consertá-lo. Nosso gerador de QR code sobe o nível para Q quando você acrescenta um logotipo, se ele estava mais baixo, e limita a área que o logotipo cobre a uma parte do que esse nível consegue recuperar. Conferimos todas as combinações dos nossos quatro tipos de conteúdo, dos níveis M, Q e H e de tamanhos de logotipo de 24 a 40%, o maior que o gerador oferece: todas foram lidas.

Como fazer um QR code que sempre funciona

  • Mantenha o conteúdo curto. Use um link curto em vez de um longo com códigos de rastreamento. É o maior ganho de todos, porque menos módulos significa módulos maiores.
  • Use M para telas e impressões limpas, e Q para cartazes, embalagens e tudo com logotipo. Use H só quando o conteúdo for curto, para a grade continuar pequena.
  • Imprima grande o bastante. Uma regra comum é largura do código de pelo menos um décimo da distância de leitura: 3 cm para um display de mesa lido a 30 cm, 30 cm para um cartaz lido a 3 metros.
  • Mantenha contraste forte e margem. Quadrados escuros sobre fundo claro, e uma borda livre de pelo menos quatro módulos. Nem todo app lê códigos claros sobre fundo escuro.
  • Teste antes de imprimir, com um celular antigo e com um novo, na distância real.

Os códigos criados com nosso gerador são estáticos: o conteúdo está no próprio código, então funcionam para sempre e não dependem de nenhum serviço. Alguns serviços de QR criam códigos «dinâmicos» que apontam para o próprio servidor e redirecionam de lá, o que permite mudar o destino depois, mas param de funcionar se o serviço ou sua assinatura acabarem.

Perguntas e respostas

Qual nível de correção de erros usar num QR code?

M para telas e impressões limpas, Q para impressão, áreas externas e códigos com logotipo. O H deixa o código bem mais denso, então use só para conteúdo curto.

Quanto de um QR code pode ser coberto?

Menos do que sugerem os 7, 15, 25 e 30% da norma. No nosso teste, um quadrado centralizado podia cobrir de 5 a 8% no L, de 6 a 12% no M, de 9 a 20% no Q e de 15 a 20% no H.

Um logotipo dificulta a leitura de um QR code?

Ele consome parte da correção de erros. Com a correção no nível Q e um logotipo de tamanho moderado, todos os nossos códigos de teste foram lidos.

Qual o tamanho mínimo de um QR code impresso?

Uma regra comum é largura de um décimo da distância de leitura, uns 2 a 3 cm para algo lido com o braço estendido. Conteúdo curto permite códigos menores.

Ferramentas deste artigo

Mais do blog

Dados6 min de leitura

CSV, Excel ou JSON: qual formato para seus dados?

Salvamos a mesma tabela de 100 mil linhas em CSV, em uma pasta de trabalho do Excel e em JSON, e comparamos os tamanhos, a velocidade de leitura no código e o que dá errado com datas, zeros à esquerda e números longos.

Dados5 min de leitura

Timestamps Unix explicados

Um timestamp Unix é só uma contagem de segundos, mas causa um fluxo constante de bugs. O que ele conta, como distinguir segundos de milissegundos num relance, o que acontece com fusos horários e segundos bissextos, e por que 2038 importa.

Esc