QR From Link

Como funciona o QR Code?

O que cada parte do padrão faz, como a câmera transforma quadradinhos de volta em texto e por que um código com um furo no meio ainda funciona.

Resposta curtaUm QR Code guarda dados em quadradinhos pretos e brancos chamados módulos. Padrões fixos nos cantos permitem que o leitor encontre e oriente o código; o restante da grade guarda os dados mais os códigos de correção de erros Reed–Solomon, que permitem reconstruir o texto original mesmo quando parte do símbolo está ilegível.

As partes do padrão

Nem todo quadradinho de um QR Code carrega dados. Uma boa parte é estrutura, e saber o que é o quê explica quase todo o comportamento do formato.

As estruturas fixas de todo QR Code
ParteOnde ficaO que faz
Padrões de localizaçãoTrês cantosQuadrados grandes, um dentro do outro, que permitem ao leitor localizar o código e descobrir a rotação.
SeparadoresEm volta de cada padrão de localizaçãoUma borda branca de um módulo que impede o padrão de se misturar com os dados ao redor.
Padrões de temporizaçãoUma linha e uma colunaMódulos alternados pretos e brancos que informam ao leitor o tamanho e o espaçamento da grade.
Padrões de alinhamentoDa versão 2 em dianteQuadrados menores que corrigem a distorção de perspectiva ao ler de lado ou sobre uma superfície curva.
Informação de formatoAo lado dos padrões de localizaçãoQual nível de correção de erros e qual máscara foram usados. Fica gravada duas vezes, para sobreviver a danos.
Zona de silêncioFora do símboloQuatro módulos de espaço livre. Não é enfeite — sem ela o leitor não sabe onde o código termina.

Todo o resto guarda a mensagem e a correção de erros, escritas em zigue-zague a partir do canto inferior direito, para cima, duas colunas por vez.

Versões: como a grade cresce

Existem quarenta tamanhos de QR Code, chamados versões. A versão 1 tem 21 × 21 módulos; cada passo acrescenta quatro módulos por lado, então a versão 40 tem 177 × 177. O gerador escolhe a menor versão que comporta os seus dados no nível de correção de erros pedido.

É por isso que um link curto gera um código visivelmente mais “graúdo” do que um link longo, no mesmo tamanho de impressão. O quadrado físico continua igual; o número de módulos espremidos nele, não. Um código espaçado tolera pouca luz, impressão barata e distância. Um código denso, não.

O gerador deste site mostra a versão e a quantidade de módulos embaixo de cada código que cria, para você ver a densidade antes de mandar imprimir.

Correção de erros: por que os danos não importam

O QR Code usa correção de erros Reed–Solomon, a mesma família de matemática que faz um CD riscado continuar tocando. Dados redundantes ficam intercalados pelo símbolo, de modo que uma perda em uma área pode ser reconstruída com informações de outra.

Os quatro níveis de correção de erros
NívelRecuperávelUso típico
L (baixo)cerca de 7%Telas digitais limpas, o máximo de dados no mínimo de espaço.
M (médio)cerca de 15%O padrão mais comum. Bom equilíbrio para impressão.
Q (quartil)cerca de 25%Impressos que vão ser manuseados, ou códigos com logo no centro.
H (alto)cerca de 30%Etiquetas industriais, desgaste pesado, logos grandes sobrepostos.

Mais correção tem um preço: a redundância ocupa capacidade, então o mesmo texto empurra o código para uma versão maior, com módulos menores. A partir de certo ponto, a robustez extra é anulada pelos módulos ficarem pequenos demais para uma leitura confiável.

Esse equilíbrio é o motivo pelo qual este gerador usa o nível Q em códigos até a versão 12 e passa para o M acima dela (um código com logo usa o H). Abaixo desse limite, a proteção extra compensa a densidade; acima dele, os módulos menores custam mais leituras do que a redundância salva.

Máscaras: por que dois links parecidos geram códigos totalmente diferentes

Uma codificação crua pode facilmente gerar grandes áreas vazias, sequências longas da mesma cor ou formas parecidas com um padrão de localização — tudo isso confunde os leitores. Para evitar isso, o codificador aplica uma máscara: um padrão regular combinado por XOR sobre a área de dados para quebrar essas sequências.

Existem oito máscaras definidas. O codificador testa cada uma, dá uma pontuação ao resultado segundo regras de penalidade para características indesejadas e fica com a melhor. A máscara escolhida é gravada na informação de formato para que o leitor consiga desfazê-la.

É por isso que mudar um único caractere de um link pode reorganizar o padrão inteiro: outra máscara pode passar a ter a melhor pontuação, e toda a área de dados é transformada de outro jeito.

O que acontece quando você aponta a câmera

  1. O quadro da câmera é convertido em preto e branco.
  2. O software procura a proporção 1:1:3:1:1 de um padrão de localização ao longo de linhas horizontais e verticais.
  3. Os três padrões de localização dão a posição, a escala e a rotação; os padrões de alinhamento corrigem a perspectiva.
  4. Os padrões de temporização definem a grade de módulos, e a informação de formato é lida para descobrir a máscara e o nível de correção.
  5. A máscara é removida, os blocos de dados e de correção são desintercalados e a decodificação Reed–Solomon conserta qualquer dano.
  6. Os bytes resultantes são interpretados — como link, cartão de contato ou texto simples — e o celular oferece a ação correspondente.

Tudo isso acontece várias vezes por segundo, e é por isso que o código parece ser reconhecido no instante em que entra no enquadramento.

Veja a versão, o nível de correção e a quantidade de módulos do seu próprio link:Gerar um QR Code

Perguntas relacionadas

Por causa da correção de erros Reed–Solomon. Informações redundantes ficam espalhadas por todo o símbolo, então algo entre 7% e 30% dele — dependendo do nível escolhido ao criar o código — pode faltar e os dados originais ainda são reconstruídos com exatidão.

É a margem em branco de quatro módulos em volta do símbolo — e precisa, sim. Sem ela, o leitor não consegue saber onde o código termina e onde começa a arte ao redor. Cortar a zona de silêncio para encaixar o código no layout é o motivo mais comum de um código impresso não funcionar.

Porque o codificador escolhe, entre as oito máscaras, a que tem a melhor pontuação para aqueles dados específicos, e a mudança de um caractere pode alterar a vencedora. A máscara é aplicada por XOR em toda a área de dados, então outra escolha reorganiza o código inteiro.

Precisa ser escuro sobre claro, com contraste forte. Preto sobre branco é o mais confiável; uma tinta escura sobre um fundo claro costuma funcionar. Inverter para claro sobre escuro quebra muitos leitores, e acabamentos metálicos ou de baixo contraste reduzem bastante a taxa de leitura.