Modos de codificação

Também chamado de: encoding modes, modos de dados, modo numérico, modo alfanumérico, modo byte, modo kanji

Definição

Os modos de codificação são as formas como um QR Code empacota caracteres em bits. Os quatro modos principais são numérico, alfanumérico, byte e kanji, e um mesmo código pode alternar entre eles.

Os quatro modos principais

Cada modo troca variedade de caracteres por densidade. O modo numérico só trata dígitos, mas empacota três deles em 10 bits, enquanto o modo byte trata qualquer byte, mas gasta 8 bits em cada um.

O modo alfanumérico cobre um conjunto de 45 caracteres: os dígitos 0–9, as letras maiúsculas A–Z, o espaço e os símbolos $ % * + - . / e dois-pontos. As letras minúsculas não fazem parte do conjunto, e por isso uma URL toda em maiúsculas pode gerar um código menor que a mesma URL em minúsculas.

  • Numérico: dígitos 0–9, 10 bits para cada 3 dígitos
  • Alfanumérico: 45 caracteres, 11 bits para cada 2 caracteres
  • Byte: qualquer valor de 8 bits, 8 bits por byte
  • Kanji: caracteres de dois bytes em Shift JIS, 13 bits cada

Indicadores de modo e segmentos

Cada trecho de dados começa com um indicador de modo de 4 bits e uma contagem de caracteres, cujo tamanho depende do modo e da versão. Um código pode conter vários desses segmentos, por exemplo numérico para uma longa sequência de dígitos e byte para o resto, o que pode deixar o resultado menor.

Outros indicadores de 4 bits sinalizam recursos, e não conjuntos de caracteres: ECI, para declarar uma codificação de caracteres; structured append, para dividir os dados entre vários códigos; e FNC1, para os formatos de dados da GS1 e de outros setores. Um terminador de quatro bits zero encerra os dados.

  • Numérico 0001, alfanumérico 0010, byte 0100, kanji 1000
  • ECI 0111, structured append 0011
  • FNC1 na primeira posição 0101, na segunda posição 1001
  • Terminador 0000

Modo byte e conjuntos de caracteres

A interpretação padrão do modo byte na norma é ISO-8859-1 (Latin-1), mas a maioria dos geradores hoje grava em UTF-8, para que letras acentuadas, outros alfabetos e emojis sobrevivam. Os leitores costumam detectar o UTF-8 examinando os bytes.

Quando o conjunto de caracteres precisa ser inequívoco, um cabeçalho ECI pode declará-lo explicitamente. Sem ele, um leitor pode, de vez em quando, errar o palpite e mostrar caracteres embaralhados.

Perguntas frequentes

Por que meu QR Code fica maior com letras minúsculas?

As letras minúsculas não fazem parte do conjunto alfanumérico, então o texto precisa usar o modo byte, com 8 bits por caractere em vez de 5,5. Letras maiúsculas, dígitos e alguns símbolos se empacotam de forma mais compacta.

Um QR Code pode guardar emojis ou texto em alfabetos não latinos?

Sim, no modo byte com UTF-8, que a maioria dos geradores e leitores de celular aceita. Cada um desses caracteres ocupa vários bytes, então a capacidade diminui.

Um mesmo QR Code pode misturar dados numéricos e texto?

Sim. Os dados podem ser divididos em segmentos, cada um com seu próprio modo, e bons codificadores escolhem a divisão que gera o menor código.

Fontes e normas

Todos os termos