Como funciona realmente um código QR? A tecnologia por trás do mosaico de píxeis
Basta uma leitura rápida com a câmara do smartphone – e abre-se um site, o Wi-Fi liga-se ou uma vCard é guardada na agenda. O que no dia a dia parece magia é, na verdade, uma combinação extremamente sofisticada de informática, matemática e ótica.
Mas como é que um endereço web comprido ou um texto se transforma, afinal, neste padrão preto e branco tão característico? Onde estão escondidos os dados no código, e porque é que a câmara reconhece o conteúdo mesmo quando o código QR está inclinado ou ligeiramente danificado?
Neste artigo, explicamos passo a passo como funciona o código Quick Response (QR).
1. O princípio básico é simples: os caracteres são convertidos em zeros e uns.
Os computadores falam a linguagem binária, ou seja, só entendem 0 e 1. Antes de a informação poder ser representada como padrão no código QR, tem por isso de ser convertida em bits. Para poupar espaço, o software de QR usa vários modos de codificação:
- Modo numérico: só para números (0–9). Muito eficiente, porque três algarismos são agrupados em dez bits.
- Modo alfanumérico: para algarismos, letras maiúsculas e alguns caracteres especiais.
- Modo byte: para texto em geral, letras minúsculas, caracteres acentuados (UTF-8) e URL.
- Modo kanji: especialmente comprimido para caracteres japoneses.
Um olhar nos bastidores mostra como «QR» se torna um código binário.
Para perceberes quão eficiente um código QR é com o espaço, vejamos o modo alfanumérico. Neste modo, cada carácter recebe um valor numérico fixo (A = 10, B = 11, ..., Q = 26, R = 27).
Para não ter de guardar cada letra individualmente, o algoritmo junta sempre dois caracteres.
- Calculam-se os valores de Q (26) e R (27): $26 \times 45 + 27 = 1197$.
- O número 1197 é representado como número binário de 11 bits:
10010101101.
Assim, as duas letras QR dão exatamente 11 bits de zeros e uns. Se no fim de uma sequência sobrar uma única letra, ela é codificada com 6 bits (p. ex., $Q \rightarrow 26 \rightarrow 011010$).
2. O caminho do código binário até ao padrão final
Depois de o teu texto ter sido traduzido numa sequência de zeros e uns, passa por vários passos técnicos de processamento:
Passo A: dados técnicos adicionais e correção de erros
A sequência de zeros e uns com o teu conteúdo não é a única parte do código. Antes dos dados úteis é colocado um cabeçalho. Ele diz ao leitor: «Atenção, aí vem um texto em modo byte com 25 caracteres!»
Depois, um processo matemático – a chamada correção de erros Reed-Solomon – calcula bits de paridade adicionais. Estes garantem que o código continua legível mesmo que até cerca de 30% dos dados (nível H) estejam tapados ou danificados (p. ex., por um logótipo de empresa colocado ao centro).
Passo B: distribuição na grelha (módulos)
Os quadradinhos individuais do código QR chamam-se módulos. Regra geral:
- 0 = módulo branco
- 1 = módulo preto
No entanto, os bits não são simplesmente escritos linha a linha, de cima à esquerda para baixo à direita. A codificação dos dados começa no canto inferior direito e serpenteia pela grelha em colunas estreitas de duas, alternando entre subir e descer. As zonas funcionais reservadas (como os cantos) são saltadas automaticamente.
É por isso que nunca consegues apontar para um único quadrado preto no código QR pronto e dizer: «Este é o ‹h› do endereço web.»
Passo C: o truque da máscara (porque 1 nem sempre é preto)
Se os bits fossem desenhados diretamente, poderiam surgir por acaso grandes blocos pretos, longas faixas brancas ou padrões enganadores que confundiriam a câmara.
Por isso, o software aplica um padrão de máscara sobre a matriz. Existem ao todo oito máscaras normalizadas. Através de uma operação matemática XOR, a máscara inverte determinados bits:
- 0 passa a 1 (branco passa a preto)
- 1 passa a 0 (preto passa a branco)
O leitor usa a informação de formato junto aos quadrados dos cantos para saber que máscara foi usada e, ao descodificar, desfaz este passo numa fração de segundo.
3. A anatomia de um código QR: o que significam os vários padrões?
Olhando com mais atenção, um código QR parece um mosaico aleatório. Na realidade, porém, cada elemento está posicionado rigorosamente segundo a norma ISO. Podes imaginar a sua estrutura como a anatomia de um rosto: certas características estão sempre no mesmo sítio, para que um smartphone reconheça o código à primeira vista.
Um código QR clássico divide-se nas seguintes zonas principais:
1. Os três grandes quadrados dos cantos (padrões de deteção de posição/finder patterns)
- Ficam em cima à esquerda, em cima à direita e em baixo à esquerda.
- Para que servem: são a característica mais marcante do código QR. Estes três pontos de ancoragem sinalizam de imediato à câmara: «Atenção, está aqui um código QR!» Indicam instantaneamente ao software a posição, o tamanho e o ângulo de inclinação, para que a câmara perceba se o smartphone está a ser segurado direito ou inclinado.
2. As linhas pontilhadas de ligação (padrões de temporização/timing patterns)
- Correm entre os três quadrados dos cantos – na horizontal entre o de cima à esquerda e o de cima à direita, na vertical entre o de cima à esquerda e o de baixo à esquerda. Definem a grelha (tamanho dos módulos); a orientação vem dos três quadrados dos cantos.
- Para que servem: estas linhas são formadas por módulos pretos e brancos alternados. Funcionam como uma régua para o leitor: com estes pontos, o software calcula o tamanho da grelha (da versão 1, com 21 × 21 células, até à versão 40, com 177 × 177 células).
3. Os pequenos quadrados interiores (padrões de alinhamento/alignment patterns)
- Ficam na zona inferior direita e, em códigos mais complexos, distribuídos por todo o padrão.
- Para que servem: estes quadrados mais pequenos funcionam como miras digitais. Ajudam o leitor a compensar distorções, por exemplo quando o código QR está impresso numa lata de refrigerante curva ou o folheto ficou amarrotado.
4. A zona de controlo (informação de formato)
- Fica imediatamente junto aos três grandes quadrados dos cantos.
- Para que serve: é aqui que estão guardadas as instruções técnicas para o leitor. Nestes poucos píxeis estão codificadas duas informações decisivas: 1. que nível de correção de erros (L, M, Q ou H) é usado e que padrão de máscara foi aplicado aos dados.
5. A margem de proteção invisível (zona de silêncio/quiet zone)
- É a margem totalmente branca e sem impressão à volta de todo o código QR.
- Função: para que a câmara capte com precisão os limites exteriores do código, precisa de uma distância de segurança em relação a texto, imagens ou grafismos de fundo. Esta margem tem de ter pelo menos quatro módulos (larguras de píxel). Se faltar a zona de silêncio, a câmara muitas vezes recusa-se a ler o código.
4. O que acontece quando lês um código QR com o smartphone?
Quando apontas a câmara para um código QR, acontecem em segundo plano os seguintes passos:
- Procura: a câmara procura na imagem de vídeo os três grandes padrões de posição.
- Transformação: o software calcula a perspetiva e «endireita» digitalmente uma imagem que possa ter sido captada de lado.
- Remoção da máscara: o sistema lê a informação de formato, reconhece o padrão de máscara e retira-o.
- Aplicação da correção de erros: riscos, desfocagem ou partes tapadas são corrigidos matematicamente.
- Descodificação: os zeros e uns são convertidos de volta em texto legível, números ou comandos, segundo as regras do modo.
- Execução da ação: o smartphone reconhece o tipo de dados (p. ex.,
https://para um URL,WIFI:para dados de acesso ouBEGIN:VCARDpara contactos) e sugere a aplicação adequada.
Mergulho técnico: as perguntas mais importantes explicadas
É preciso ligação à internet para ler um código QR?
Não, não para a leitura em si. A conversão dos píxeis em texto acontece localmente no teu smartphone. Se o conteúdo for texto simples, uma vCard ou dados de acesso ao Wi-Fi, tudo funciona completamente offline. Só precisas de ligação de dados quando o código contém um endereço web (URL) e o queres abrir.
Um código QR é encriptado?
Não. Um código QR é apenas codificado, não encriptado. Qualquer leitor de códigos QR consegue ler os dados que contém. Informação confidencial, como palavras-passe, dados bancários ou PIN pessoais, nunca deve por isso ser guardada sem proteção num código QR normal.
Porque é que alguns códigos QR parecem muito mais finos e densos do que outros?
Quantos mais dados estiverem guardados diretamente no código – por exemplo, um texto longo em vez de um link curto –, mais módulos são necessários. O código passa então para uma versão superior (da versão 1, com 21 × 21 módulos, até à versão 40, com 177 × 177 módulos).
Estático vs. dinâmico: porque é que os códigos dinâmicos ficam mais compactos
- Códigos QR estáticos: guardam diretamente o destino final (p. ex., um URL com 150 caracteres). O padrão fica muito denso e mais difícil de ler.
- Códigos QR dinâmicos: guardam apenas um link de redirecionamento ultracurto (p. ex.,
qron.ch/12da7). O código continua visualmente muito simples e fácil de ler, e o destino real pode ser alterado no servidor a qualquer momento, sem ter de reimprimir o código.
Lista de verificação para códigos QR que funcionam
Se crias os teus próprios códigos QR ou os mandas desenhar, tem em conta estes princípios básicos:
- Usa links curtos: recorre a códigos QR dinâmicos para manter baixa a densidade de módulos.
- Mantém o contraste: escolhe um padrão escuro sobre fundo claro (códigos invertidos podem dar problemas a algumas câmaras mais antigas).
- Respeita a margem: deixa pelo menos 4 módulos de distância de texto, linhas de corte ou grafismos.
- Ajusta a correção de erros: um logótipo gasta reserva de correção de erros – quanto maior o logótipo, mais alto deve ser o nível. Nos códigos dinâmicos, o QRown define o nível sozinho e verifica a legibilidade depois de desenhares o código.
Perguntas frequentes (FAQ)
Por quantos módulos é formado um código QR?
Os códigos QR mais pequenos (versão 1) têm 21 × 21 módulos, ou seja, 441 células. A versão maior (versão 40) tem uma grelha de 177 × 177 módulos, ou seja, 31 329 células.
Um código QR pode conter vírus ou malware?
Um código QR em si contém apenas texto e não consegue executar diretamente código malicioso. Pode, no entanto, levar a um site de phishing manipulado ou a uma transferência maliciosa. Por isso, verifica sempre a pré-visualização do domínio no smartphone antes de o abrires!
Que modo poupa mais espaço num código QR?
O modo mais eficiente é o numérico (só números), seguido do alfanumérico. Já o modo byte (para URL em geral e caracteres especiais) é o que precisa de mais espaço por carácter.