Pular para o conteúdo

Por que o QR Code não lê

Simulamos 3.024 fotografias de QR Code — reduzidas, borradas e com ruído, como sai de uma câmera de celular — e mandamos todas para o leitor do próprio sistema. A resposta é um número só, e não é nenhum dos suspeitos de sempre: quantos pixels de câmera sobram para cada quadradinho. Abaixo de 1,75, nenhuma das 864 fotos foi lida. A partir de 3, todas as 720 foram.

Esta página começou querendo provar outra coisa — que a borda é a culpada — e a medição não deixou. O que apareceu no lugar é mais útil, porque tem conserto: quem mais rouba resolução do seu código é o tamanho do link que você enfiou dentro dele, e ninguém associa uma coisa à outra.

A resposta curta

Se o seu QR não lê, é isto, nesta ordem

1. O conteúdo é longo demais para o tamanho impresso. Um link de 200 caracteres exige um código com muito mais quadradinhos que um de 30 — no mesmo adesivo, cada quadradinho fica menor, e é aí que a câmera desiste. É a causa que ninguém procura.

2. Está impresso pequeno demais para a distância. Mesmo problema, pelo outro lado.

3. O contraste é fraco. Custa resolução, mas menos do que se imagina — e código invertido, claro sobre escuro, leu tão bem quanto o preto no branco.

4. A borda. A norma pede quatro módulos e continua valendo pôr, mas na nossa medição ela não fez diferença nenhuma. Se o seu código não lê, o problema quase certamente não é esse.

A curva: onde a leitura começa e onde ela fica garantida

O experimento gera o símbolo com o encoder deste site, desenha ele dentro de uma cena, e transforma a cena em foto: reduz por média de área — que é o que o sensor faz com a luz —, borra com um núcleo de lente e salpica ruído. O que varia é a resolução da captura. 12 cenas × 21 resoluções × 12 fotos cada.

Pixels de câmera por móduloLeuTaxa
10 de 144
1,1250 de 144
1,250 de 144
1,3750 de 144
1,50 de 144
1,6250 de 144
1,752 de 1441%
1,8757 de 1445%
278 de 14454%
2,125120 de 14483%
2,25131 de 14491%
2,375127 de 14488%
2,5142 de 14499%
2,625144 de 144100%
2,75144 de 144100%
2,875143 de 14499%
3144 de 144100%
3,125144 de 144100%
3,25144 de 144100%
3,375144 de 144100%
3,5144 de 144100%

Três faixas, e elas são a página inteira. Abaixo de 1,75 pixels por módulo não existe leitura: 864 fotos, nenhuma lida, em nenhuma das 12 condições. A primeira leitura aparece em 1,75 — duas fotos em 144 —, e a maioria só passa a ler em 2. Entre 1,75 e 2,875, a leitura é sorteio: 72,1% no agregado, com a mesma cena lendo numa foto e falhando na seguinte. E de 3 para cima não houve uma falha sequer.

Por que a faixa do meio importa

É ela que produz a experiência que todo mundo já teve: o código que lê para uma pessoa e não lê para a outra, que abre hoje e não abre amanhã, que funciona quando você chega mais perto. Não é o celular de ninguém que está ruim — é um código projetado bem no meio da faixa de sorteio. Um QR ou está com folga, ou é loteria.

A borda: a explicação favorita da internet não sobreviveu

A norma ISO/IEC 18004 pede quatro módulos de margem clara em volta do símbolo, e a explicação é boa: o leitor precisa dessa faixa para achar onde o código começa. Testamos três fundos diferentes — papel branco, um fundo escuro encostando, e uma textura densa de blocos claros e escuros do tamanho de um módulo, que é o pior caso para quem procura o padrão de localização — cada um com borda de quatro módulos e sem borda nenhuma.

CenaLeuNunca mais falhou a partir de
Borda de 4 módulos, em papel branco61,9%2
Sem borda nenhuma, em papel branco61,1%2,25
Borda de 4 módulos, com fundo escuro em volta57,5%2,125
Sem borda, com fundo escuro encostando55,6%3
Borda de 4 módulos, com textura densa em volta57,1%2,125
Sem borda, com textura densa encostando63,1%2,25

Somando tudo: 58,9% com borda contra 59,9% sem borda. A diferença é menor que a variação entre repetições da mesma cena, e o sinal chega a inverter: no fundo de textura densa — justamente onde a borda deveria salvar o dia — a versão sem borda leu mais.

O que isso quer dizer, com cuidado, porque é fácil concluir demais. Não quer dizer que a borda é inútil e pode ser cortada. Quer dizer que o decodificador que testamos é bom o suficiente para dispensá-la, e que num código que não abre a borda é a última coisa a investigar, não a primeira. Leitores mais antigos, leitores industriais de laser e bibliotecas mais simples não são todos assim, a norma pede os quatro módulos, e o gerador daqui os coloca sempre. Manter é barato; a questão é parar de culpá-la.

Contraste e cor: o invertido lê melhor que o cinza

Aqui a medição confirma parte do senso comum e derruba a outra parte. A razão de contraste da coluna é a da WCAG, a mesma que se usa para texto, calculada a partir das cores exatas de cada cena:

CenaContrasteLeuEstável a partir de
Preto no branco21:161,9%2
Invertido: claro sobre fundo escuro21:163,9%2
Cinza médio no branco3,9:157,1%2,125
Cinza claro no branco2,2:154,4%2,625
Cinza bem claro no branco1,5:150,8%2,5
Amarelo no branco1,7:153,2%2,5

O código invertido não é problema. Claro sobre fundo escuro foi a cena com a MAIOR taxa de leitura de todas as doze, e estabilizou na mesma resolução do preto no branco. A crença de que leitor não lê QR invertido é verdadeira para leitores antigos e falsa para o que está no bolso das pessoas — e a razão é simples: em contraste os dois são idênticos, 21:1.

O que custa é contraste baixo, e ele custa resolução. O cinza claro e o amarelo no branco não param de ler — eles exigem que a câmera chegue mais perto. O preto no branco estabiliza em 2 pixels por módulo; o cinza claro e o amarelo, em 2,625 e 2,5. É de 25% a 30% de resolução a mais para dizer a mesma coisa — ou seja, um código colorido precisa ser impresso proporcionalmente maior, e é esse o preço que a agência não conta quando pinta o QR na cor da marca.

Este é o experimento que vale por todos os outros. O adesivo tem sempre o mesmo tamanho impresso e é fotografado da mesma distância — as quatro colunas são quatro combinações de tamanho e distância, escritas como o número de pixels que o adesivo inteiro ocupa na foto. A única coisa que muda entre as linhas é quanto texto foi enfiado lá dentro.

CaracteresMódulos80 px120 px160 px240 px
2525 × 25leu (1,78)leu (2,67)leu (3,56)leu (5,33)
3029 × 29 (1,63)leu (2,45)leu (3,27)leu (4,9)
4029 × 29 (1,63)leu (2,45)leu (3,27)leu (4,9)
5033 × 33 (1,51) (2,26)leu (3,02)leu (4,53)
6033 × 33 (1,51) (2,26)leu (3,02)leu (4,53)
7537 × 37 (1,4)leu (2,11)leu (2,81)leu (4,21)
9041 × 41 (1,31) (1,97)leu (2,62)leu (3,93)
11045 × 45 (1,23) (1,85)leu (2,46)leu (3,69)
13049 × 49 (1,16) (1,74) (2,32)leu (3,48)
16053 × 53 (1,1) (1,64)leu (2,19)leu (3,29)
20057 × 57 (1,04) (1,56)leu (2,08)leu (3,12)
25061 × 61 (0,99) (1,48) (1,98)leu (2,96)
32069 × 69 (0,9) (1,35) (1,8)leu (2,7)
40077 × 77 (0,82) (1,24) (1,65)leu (2,47)
50085 × 85 (0,76) (1,14) (1,52) (2,29)
700101 × 101 (0,66) (0,99) (1,32)leu (1,98)
1.000121 × 121 (0,57) (0,85) (1,13) (1,7)
1.400141 × 141 (0,5) (0,75) (0,99) (1,49)
1.800157 × 157 (0,45) (0,68) (0,9) (1,36)

O número entre parênteses é a resolução em pixels por módulo que aquele caso alcançou — e é ele que explica a tabela inteira. Cada célula desta tabela obedece à curva da primeira seção: tudo o que ficou abaixo de 1,75 falhou, tudo o que passou de 2,5 leu, e as trocas de resultado que parecem erráticas no meio da tabela estão todas dentro da faixa de sorteio.

Na prática, para quem imprime: no adesivo de 120 pixels — o cartãozinho de mesa visto de perto — 40 caracteres leem e 90 não leem. No de 240, o limite vai para a casa dos 400. Nenhuma dessas linhas tem defeito de impressão, de cor ou de borda: é o mesmo adesivo, com um endereço mais comprido dentro.

O conserto que quase ninguém tenta

Encurtar o que vai dentro do código. Tirar os parâmetros de campanha do fim da URL, usar o domínio sem www, criar uma página curta que redireciona. Sair de 200 para 30 caracteres derruba o símbolo de 57 para 29 módulos de lado — e faz cada quadradinho crescer 97% no mesmo espaço de papel, de graça. É mais eficaz do que qualquer coisa que se faça com a cor, a borda ou o nível de correção.

De pixels para milímetros: que tamanho imprimir

Pixels por módulo é a grandeza certa, mas ninguém compra papel em pixels. A tradução exige duas hipóteses, e elas estão declaradas: uma foto de 4.032 pixels de largura (12 megapixels) e uma abertura de 68 graus, que é a faixa comum da câmera principal de celular. Com isso, e exigindo os 3 pixels por módulo em que nenhuma foto falhou:

Distância de leituraMódulo mínimoSímbolo de 33 módulosRegra de bolso (1:10)
20 cm0,2 mm0,8 cm2 cm
30 cm0,3 mm1,2 cm3 cm
50 cm0,5 mm2,1 cm5 cm
1 m1 mm4,1 cm10 cm
2 m2,01 mm8,2 cm20 cm
5 m5,02 mm20,6 cm50 cm

A última coluna é a regra que circula em todo lugar — o símbolo mede um décimo da distância de leitura — e a comparação é o ponto desta seção: ela pede um código cerca de 2,4 vezes maior do que a nossa conta. As duas estão certas, e a diferença tem nome: margem. Nossa medição é o melhor caso possível — foco perfeito, luz uniforme, código de frente, impressão impecável, sem tremida. A regra de bolso já vem com o desconto de tudo isso embutido.

Por isso a recomendação prática desta página é a regra de bolso, não a nossa tabela. O que a nossa tabela dá é a outra coisa, que a regra de bolso não dá: o piso absoluto. Abaixo dele não existe celular bom, luz boa nem mão firme que resolva — e é útil saber a diferença entre “está apertado” e “é impossível”.

Duas ressalvas de impressão que não medimos e que circulam com força: que o módulo não deve ficar abaixo de 0,4 mm no papel, e a própria regra 1:10. Procuramos e não encontramos fonte primária de nenhuma das duas — a ISO/IEC 18004 é paga e não foi aberta aqui, e o que se acha são páginas de fabricantes de QR repetindo os números umas das outras. Elas entram nesta página como o que são: prática consolidada, sem documento atrás.

E o logotipo no meio?

Essa medição já está publicada aqui, e é de outro tipo: em vez de simular câmera, ela cobre uma área do símbolo e pergunta até onde a correção de erro segura. No nível M — o padrão da maioria dos geradores — o símbolo aguentou até 5% da área tapada, e não os 15% que se costuma anunciar, porque a porcentagem anunciada é a fração de BYTES que a correção recupera, não a fração de área que dá para cobrir. Os quatro níveis estão na página do gerador.

O que as duas medições juntas dizem sobre logotipo é o seguinte: ele gasta correção de erro que você provavelmente vai precisar para impressão imperfeita, sujeira e ângulo. E, pior, ele costuma vir acompanhado do erro de verdade — para caber o logotipo, alguém sobe o nível de correção, o que aumenta o número de módulos, o que encolhe cada um deles. Ou seja: o logotipo cobra duas vezes, e a segunda é a que derruba a leitura.

Checklist, em ordem de efeito medido

1. Encurte o conteúdo. É o que mais mexe na resolução por módulo, e é grátis. Link curto, sem parâmetros de campanha, sem utm_source de 60 caracteres.

2. Imprima maior, ou aceite ler mais perto. As duas coisas são a mesma grandeza. Use a regra de um décimo da distância.

3. Se for colorir, compense no tamanho. Contraste baixo custou de 25% a 30% de resolução na medição — então o código da cor da marca precisa ser proporcionalmente maior, e um QR amarelo pequeno é a pior combinação possível.

4. Inverter pode. Claro sobre escuro leu tão bem quanto o contrário. Se a arte pede, use — e mantenha o contraste alto.

5. Mantenha a borda, sem esperança. Custa quase nada e a norma pede. Só não conte com ela para consertar código que não lê.

6. Teste no pior aparelho que você tiver, na distância real. Testar no seu celular novo, a 15 cm, com luz de escritório, é o teste que aprova o código que vai falhar no balcão.

O que esta medição não cobre

Um leitor só. Todas as 3.024 fotos passaram pelo CIDetector do Core Image. É o leitor do sistema da Apple, o mesmo da câmera do iPhone, e é excelente — o que faz dele um teste generoso. Um aparelho Android, um leitor embutido em aplicativo de banco ou uma pistola de código de barras podem ser bem menos tolerantes, e a conclusão sobre a borda é a que mais depende disso.

A câmera é simulada, e simulada bem-comportada. Redução por média de área, borrão de lente e ruído de sensor. Não há desfoque de foco, tremida, luz irregular, sombra, reflexo em plástico, perspectiva nem papel amassado — e todos esses só pioram. Por isso os números daqui são piso, e a página recomenda a regra de bolso e não a própria tabela.

Um conteúdo e um nível. A curva usa um símbolo só (45 caracteres, versão 4, 33 módulos) no nível de correção M. O experimento do adesivo varia o conteúdo, mas com uma foto por caso — as trocas de resultado dentro da faixa de sorteio são exatamente o que a curva prevê, e não devem ser lidas como “este tamanho lê e aquele não”.

Impressão de verdade não entrou. Nada aqui saiu numa impressora. Ganho de ponto, tinta espalhando em papel poroso e registro de cor são causas reais de código ilegível que esta medição não toca.

Como refazer

Tudo que a página afirma sai de três peças abertas: o encoder em gerador-de-qr-code/qr.ts, que escreve a ISO/IEC 18004 inteira em casa; a simulação de câmera e os números, no arquivo de medição ao lado desta página, com o método escrito em cima de cada constante; e o leitor, que é do sistema operacional. As tabelas de geometria — módulos, versões e milímetros — são calculadas no momento em que a página é publicada, e o build cai se algum símbolo desta página deixar de ser o mesmo que foi fotografado.

Fontes

  • Medição própria, feita em 9 de agosto de 2026: 3.024 fotos simuladas lidas pelo CIDetector do Core Image, no macOS 26.5, mais 76 casos do experimento do adesivo.
  • ISO/IEC 18004 — a norma do QR Code: as versões, os níveis de correção, a borda de quatro módulos. Paga; o que este site usa dela está implementado e testado no encoder próprio, não copiado do documento.
  • CIDetector — documentação da Apple do detector usado como leitor.
  • WCAG 2.2, razão de contraste — a fórmula usada na coluna de contraste.