Gerador de códigos QR

Crie um código QR e veja as decisões por trás: a divisão de modos, a versão, o nível de correção, as oito máscaras e o custo real de um logótipo.

Conteúdo
O que é realmente codificado
https://seladevtools.com/qr-code-generator
Código

Versão 3 · 29×29 módulos · nível M · máscara 7

Opções
Correção de erros
Cores
Logótipo
O que o codificador decidiu
Versão
3 · 29×29 módulos
Nível
M
Máscara
7 (penalização mais baixa)
Dados
348 de 352 bits
Palavras de código
44 de dados + 26 de correção, em 1 blocos

Segmentos

ModoCaracteresBits
byte42348

Penalizações das máscaras

MáscaraSequênciasBlocosParecido com o padrãoEquilíbrioTotal
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

As quatro regras penalizam sequências longas de uma cor, blocos de 2×2, a sequência 1:1:3:1:1 que um leitor confunde com um padrão de localização, e uma proporção de escuros longe de metade. Ganha a mais baixa; clique numa linha para a forçar.

Dentro de cada código QR escondem-se quatro decisões

Cole um texto num gerador de códigos QR e sai um quadrado a preto e branco. O que não lhe mostram é que o codificador acabou de tomar por si quatro decisões distintas, cada uma das quais muda o resultado e qualquer uma das quais poderia ter sido outra.

Esta ferramenta mostra as quatro, porque são a parte interessante. Assim que se veem, o comportamento que parecia arbitrário — o código salta de tamanho ao juntar um carácter, um logótipo funciona num código e não no seguinte — deixa de o ser.

  • A divisão de modos: a norma define quatro maneiras de empacotar caracteres, e o seu texto é repartido por elas.
  • A versão: um número de 1 a 40 que fixa a grelha entre 21×21 e 177×177 módulos.
  • O nível de correção de erros: L, M, Q ou H, que decide quanto do símbolo pode ser destruído e continuar a ler-se.
  • A máscara: um de oito padrões aplicados com XOR sobre os dados para partir as formas que confundem um leitor.

Nenhuma das quatro é questão de gosto. Cada uma tem uma resposta certa dadas as outras, e é justamente por isso que vale a pena olhar para elas: interagem.

Dividir o texto é um problema de caminho mais curto

O modo numérico gasta 10 bits por cada três dígitos. O alfanumérico gasta 11 bits por cada dois caracteres, de um conjunto de 45: os dígitos, as maiúsculas, o espaço e nove sinais de pontuação. O modo byte gasta 8 bits por byte UTF-8. O modo kanji gasta 13 bits num carácter em que o modo byte gastaria 24.

Por isso a codificação mais barata raramente é um só modo para toda a cadeia — mas mudar também não é grátis, já que cada segmento paga um indicador de modo de 4 bits e um campo de contagem. Se compensa isolar uma série de dígitos depende do seu comprimento. Isso faz da divisão um problema de caminho mais curto, e este codificador resolve-o de forma exata em vez de adivinhar com uma regra prática.

HELLO12345678901234567890

as one alphanumeric segment
  4 + 9 + (11 x 12) + 6 = 151 bits

split at the digits
  4 + 9  + (11 x 2) + 6 =  41 bits
  4 + 10 + (10 x 6) + 7 =  81 bits
  total                 = 122 bits

Vinte e nove bits, que na versão 1 são a diferença entre caber e não caber. A tabela de segmentos da página mostra a divisão que o codificador escolheu de facto e quanto custou cada segmento, para que veja que caracteres saem caros.

A versão e a divisão perseguem-se

Aqui está o pormenor que faz um codificador ingénuo errar. O campo de contagem de caracteres não tem largura fixa. São 8 bits para o modo byte nas versões 1 a 9 e 16 bits a partir da 10; o numérico passa por 10, 12 e 14 nas mesmas fronteiras.

Ou seja, o custo da divisão depende da versão, e a versão depende do custo da divisão. A saída é reparar que só há três grupos de versões: a divisão é calculada uma vez por grupo e ganha a menor versão em que alguma delas caiba.

  • Versões 1–9: numérico 10 bits, alfanumérico 9, byte 8, kanji 8.
  • Versões 10–26: numérico 12, alfanumérico 11, byte 16, kanji 10.
  • Versões 27–40: numérico 14, alfanumérico 13, byte 16, kanji 12.

A máscara é escolhida por quatro regras de penalização

Os dados de um código QR são quase aleatórios, e preto e branco aleatórios produzem formas que um leitor pode confundir com os padrões estruturais que procura. O remédio é aplicar XOR sobre a zona de dados com um padrão regular escolhido para partir essas formas. São oito, e o codificador experimenta todos.

Cada símbolo mascarado é pontuado por quatro regras da norma, e ganha o total mais baixo. A tabela da página mostra as oito pontuações discriminadas por regra, e clicar numa linha força essa máscara para ver o efeito.

  • Sequências: três pontos por cinco módulos contíguos da mesma cor numa linha ou coluna, mais um por cada módulo além disso.
  • Blocos: três pontos por cada área de 2×2 de uma só cor.
  • Parecido com o padrão: quarenta pontos pela sequência 1:1:3:1:1 escuro-claro-escuro-claro-escuro junto a quatro módulos claros — o padrão que se parece com os quadrados dos cantos.
  • Equilíbrio: dez pontos por cada 5% inteiros que a proporção de módulos escuros se afaste de metade.

Aqui as implementações divergem um pouco: sobre se o padrão 1:1:3:1:1 conta também a maior escala, e sobre se a informação de formato entra na pontuação. Este codificador segue a leitura do ZXing, que é a que corre na maioria das câmaras de telemóvel, e está fixado contra duas implementações independentes. A divergência nunca produz um código inválido; decide apenas qual de várias máscaras perfeitamente legíveis é escolhida.

Quanto custa mesmo um logótipo no centro

Toda a gente repete a mesma regra: o nível H recupera 30%, logo pode tapar até 30% do código. É uma resposta com a forma errada, e segui-la acabará por lhe entregar um código que não é lido.

A correção de erros de um código QR não é um bolo único. Os dados são divididos em blocos Reed-Solomon, cada um com as suas palavras de correção, e os blocos são entrelaçados por toda a grelha para que um risco danifique vários um pouco em vez de um muito. Cada bloco pode perder cerca de metade das suas palavras de correção e ser reconstruído. Um logótipo no centro é um quadrado maciço, precisamente a forma que o entrelaçamento foi pensado para espalhar — mas nunca espalha de modo uniforme.

A pergunta, portanto, não é que fração do símbolo está tapada, mas quanto perdeu o bloco mais atingido. Esta página sabe a que palavra de código pertence cada módulo e de que bloco veio cada palavra, por isso responde diretamente: carregue um logótipo e ela indica o dano por bloco e a folga que resta ao pior.

  • Tapar um padrão de localização, um de sincronização ou a informação de formato não é uma questão de orçamento: não levam correção, e um leitor que não os encontra nem sequer chega à fase de corrigir.
  • Metade das palavras de código é um limite superior. A impressão, os reflexos, as superfícies curvas e o desgaste gastam do mesmo orçamento, e um código exatamente no limite no ecrã já não está no limite numa caneca.
  • Subir para o nível H para caber um logótipo maior aumenta o símbolo e, por isso, encolhe cada módulo ao mesmo tamanho impresso — às vezes é perda e não ganho.

Os formatos de carga e onde eles mordem

Um código QR de Wi-Fi ou um cartão de contacto não passam de texto na forma que os leitores reconhecem. As formas são simples; onde os códigos reais se partem é nas regras de escape, e são falhas silenciosas: o código é lido na perfeição e dá a resposta errada.

WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;;

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines\, Ltd
END:VCARD

No formato Wi-Fi o ponto e vírgula termina um campo, por isso uma palavra-passe que o contenha corta as credenciais se não for escapada — tal como a vírgula, os dois pontos, as aspas e a barra invertida. Um nome de rede feito só de dígitos hexadecimais tem de ir entre aspas, ou é lido como valor hexadecimal em vez de texto. No vCard os separadores são o ponto e vírgula e a vírgula, uma linha com mais de 75 octetos tem de ser dobrada para uma linha de continuação que começa por um espaço, e o fim de linha é CRLF.

Os construtores daqui aplicam tudo isso e dizem o que fizeram, em vez de reescreverem a sua entrada em silêncio. Se aparecer um aviso por baixo dos campos, alguma coisa no seu texto precisou de tratamento — e isso costuma valer a pena saber antes de imprimir mil autocolantes.

Perguntas frequentes

Porque é que juntar um carácter aumentou tanto o código?
Porque mudou a divisão de modos, a versão, ou ambas. Uma única minúscula numa cadeia toda em maiúsculas pode empurrar um segmento inteiro do modo alfanumérico para o modo byte, que custa oito bits por carácter em vez de cinco e meio. Passar da versão 9 para a 10 alarga além disso cada campo de contagem. A tabela de segmentos mostra para onde foram os bits.
Que nível de correção de erros devo usar?
M é o valor por omissão sensato e o que a maioria dos códigos por aí usa. Suba para Q ou H quando o código for impresso pequeno, sobre algo curvo, numa superfície que se manuseia, ou quando tapar o centro com um logótipo. Desça para L só quando a carga for longa e o código for lido num ecrã. Níveis mais altos não dão fiabilidade de graça: aumentam o símbolo para os mesmos dados, e um símbolo maior impresso ao mesmo tamanho tem módulos mais pequenos.
Que tamanho pode ter o logótipo no centro?
Carregue-o e a página dir-lhe-á, porque a resposta honesta depende da versão, do nível e de onde calham os blocos. O que ela não fará é repetir a regra dos 30%, que fala de palavras de código e não de área, e do símbolo inteiro e não do pior bloco. Como ponto de partida, 15% do lado no nível H costuma ser folgado e 25% costuma não ser.
Pôr o URL em maiúsculas encolhe mesmo o código?
Muitas vezes sim. O modo alfanumérico não tem minúsculas, por isso um URL em minúsculas vai para o modo byte a oito bits por carácter, ao passo que um em maiúsculas cabe no alfanumérico a cinco e meio. O esquema e o anfitrião não distinguem maiúsculas, pelo que HTTPS://EXAMPLE.COM funciona tal como https://example.com — mas o caminho distingue e não deve ser mexido. A página mede a poupança no seu URL concreto e só propõe a alteração quando ajuda.
Vale a pena o modo kanji para texto japonês?
Vale: são 13 bits por carácter onde o modo byte em UTF-8 gasta 24, por isso o texto japonês sai quase a metade. Cobre o intervalo de dois bytes do Shift_JIS, que inclui os kana, os kanji da JIS X 0208 e também o grego e o cirílico. Esta página carrega a tabela de correspondência apenas quando o seu texto não é ASCII puro, pelo que um código com um URL nunca a descarrega.
Devo ligar a declaração de UTF-8?
Normalmente não. A norma diz que o modo byte é ISO-8859-1 a menos que um cabeçalho ECI diga outra coisa, mas na prática qualquer leitor deste século trata-o como UTF-8, e é isso que este codificador escreve. Declará-lo explicitamente custa 12 bits e confunde alguns leitores industriais antigos. Ligue-o se estiver a apontar a um leitor específico que documente suporte a ECI.
Porque não há Micro QR nem código em várias partes?
Ambos existem na norma e ambos lhe dariam algo que não é lido. O Micro QR é uma simbologia à parte, com as suas tabelas de capacidade, o seu conjunto de máscaras e a sua codificação de formato, e a maioria das aplicações de câmara não o lê. O Structured Append reparte a carga por até dezasseis símbolos que praticamente nenhum leitor de consumo volta a juntar. Se os seus dados não couberem na versão 40, a resposta é pôr um URL no código e os dados por trás.
Até que tamanho se pode imprimir um código QR?
A orientação habitual é que um módulo meça pelo menos 0,4 mm em impressão e que o código seja cerca de um décimo da distância de leitura a dividir pelo tamanho da versão — mas a restrição prática é a zona de silêncio. A norma pede quatro módulos de margem limpa de todos os lados, e a falha mais comum no mundo real é um código encostado a outra arte gráfica. A versão e o número de módulos mostrados na página são o que precisa para essa conta.