Um guia visual simples para entender os códigos QR: anatomia, deteção, geração e correção de erros.
info
O que é um código QR?
Um código QR (Quick Response) é um tipo de código de barras bidimensional inventado em 1994 pela empresa japonesa Denso Wave. Ao contrário de um código de barras tradicional que armazena informações apenas numa direção, o código QR armazena dados horizontal e verticalmente, permitindo-lhe conter muito mais informação num espaço pequeno.
Hoje, ler um código QR faz parte do dia a dia: encontramo-los em restaurantes, cartazes, produtos, cartões de visita e até em criptomoedas. Mas como funciona realmente por dentro?
grid_on
Anatomia de um código QR
Antes de compreender como um código QR é lido ou gerado, é útil conhecer as suas partes:
Padrões de posição (Finder Patterns)Os três grandes quadrados nos cantos superior esquerdo, superior direito e inferior esquerdo. Permitem que o scanner detete o código QR independentemente da sua orientação ou do ângulo da câmara.
Padrão de alinhamento (Alignment Pattern)Um quadrado menor no canto inferior direito. Ajuda a corrigir distorções quando o código está numa superfície curva.
Padrões de sincronização (Timing Patterns)Duas linhas de módulos alternados (preto-branco) que ligam os padrões de posição e permitem calcular o tamanho de cada módulo.
Zona de dadosO resto da grelha: cada pequeno quadrado preto ou branco representa um bit de informação (1 ou 0).
Zona silenciosa (Quiet Zone)Uma borda branca à volta do código que ajuda o scanner a separá-lo do fundo.
qr_code_scanner
Como um código QR é lido
Quando aponta a câmara para um código QR, várias coisas acontecem em milissegundos:
Captura
arrow_forward
Localização
arrow_forward
Perspetiva
arrow_forward
Bits
arrow_forward
Descodificação
1
1. Captura de imagemA câmara captura continuamente frames de vídeo. Cada frame é uma grelha de pixels com valores de brilho.
2
2. Localização de padrõesO software procura os três quadrados de posição (Finder Patterns). A sua proporção característica (1:1:3:1:1) torna-os únicos e fáceis de identificar mesmo em ângulos difíceis.
3
3. Correção de perspetivaA partir dos três cantos detetados, o algoritmo calcula uma transformação matemática para endireitar o código mesmo que a câmara esteja inclinada.
4
4. Leitura de módulosCom o código alinhado, o software lê cada módulo e converte-o num bit: preto = 1, branco = 0.
5
5. Descodificação e correção de errosOs bits são agrupados em blocos e aplica-se Reed-Solomon para corrigir possíveis erros. Por fim, os dados são descodificados de acordo com o modo (numérico, alfanumérico, binário ou kanji).
grid_view
Como um código QR é gerado
Criar um código QR é o processo inverso de lê-lo:
Entrada
arrow_forward
Codificação
arrow_forward
Reed-Solomon
arrow_forward
Matriz
arrow_forward
Imagem
1
1. Entrada de dadosIntroduz o texto, URL ou outro conteúdo que quer codificar.
2
2. Codificação bináriaO software seleciona o modo de codificação mais eficiente e converte os dados para uma sequência de bits.
3
3. Correção de errosSão adicionados bits de redundância com Reed-Solomon. Quanto maior o nível escolhido (L, M, Q ou H), mais bits extra são adicionados e mais resistente é o código.
4
4. Construção da matrizA informação é colocada numa grelha seguindo um padrão em espiral, os padrões de posição são adicionados e aplica-se uma máscara para evitar grandes áreas da mesma cor.
5
5. RenderizaçãoA grelha final é convertida na imagem que transfere: PNG, SVG, PDF…
shield
Correção de erros: por que os QR resistem a danos
O algoritmo Reed-Solomon permite que um código QR seja legível mesmo que até 30% da sua superfície esteja danificada, suja ou coberta. É por isso que pode colocar o logótipo da sua empresa em cima sem que deixe de funcionar, desde que use o nível H e não cubra mais de 25-30%.
Os quatro níveis disponíveis são:
L
7%
Uso digital, ecrãs. Código mais leve e pequeno.
M
15%
Uso geral. Bom equilíbrio tamanho/resistência.
Q
25%
Impressão com possível desgaste ou sujidade.
H
30%
Com logótipo em cima ou ambientes muito adversos.
quiz
Perguntas frequentes sobre os códigos QR
Um código QR (Quick Response) é um tipo de código de barras bidimensional inventado em 1994 pela empresa japonesa Denso Wave. Armazena informação horizontal e verticalmente através de módulos pretos e brancos, podendo conter até 7.089 caracteres numéricos ou 4.296 alfanuméricos numa área pequena.
Um código QR codifica dados como um padrão de módulos escuros e claros numa grelha. Quando a câmara o captura, o software deteta os três padrões de posição (os quadrados dos cantos), corrige a perspetiva, lê cada módulo como um bit (preto = 1, branco = 0) e aplica o algoritmo Reed-Solomon para corrigir erros antes de descodificar a informação.
Graças ao algoritmo Reed-Solomon, um código QR pode recuperar a informação mesmo que até 30% da sua superfície esteja danificada, suja ou coberta. Por isso é comum adicionar um logótipo em cima sem que deixe de ser lido corretamente, desde que se use o nível H e não se cubra mais de 25-30%.
Depende do tipo de dado e do nível de correção de erros. O máximo teórico é: 7.089 dígitos numéricos, 4.296 caracteres alfanuméricos, 2.953 bytes binários ou 1.817 caracteres kanji. Para uso prático, mantenha URLs curtos e textos concisos para que o código seja mais denso e fácil de ler em tamanhos pequenos.
Ler é descodificar: a câmara analisa a imagem e extrai a informação codificada. Gerar é o processo inverso: o software toma os seus dados (texto, URL, WiFi…), converte-os em bits, adiciona redundância Reed-Solomon e constrói a grelha de módulos que pode imprimir ou partilhar digitalmente.
Nem sempre. Um código QR pode apontar para um URL malicioso ou desencadear uma ação indesejada (chamada, pagamento, download). Antes de visitar o link, verifique o URL mostrado pelo scanner. O nosso scanner verifica os URLs contra o Google Safe Browsing e o VirusTotal e avisa-o se o destino for perigoso.
É a quantidade de redundância adicionada para que o código permaneça legível mesmo parcialmente danificado. Há quatro níveis: L (7% de tolerância, código mais denso e leve), M (15%, uso geral), Q (25%, para impressão com provável desgaste) e H (30%, ideal para adicionar logótipos em cima). Quanto maior o nível, maior o código.