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.
https://seladevtools.com/qr-code-generator
Versão 3 · 29×29 módulos · nível M · máscara 7
- 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
| Modo | Caracteres | Bits |
|---|---|---|
| byte | 42 | 348 |
Penalizações das máscaras
| Máscara | Sequências | Blocos | Parecido com o padrão | Equilíbrio | Total |
|---|---|---|---|---|---|
| 0 | 325 | 351 | 120 | 0 | 796 |
| 1 | 331 | 375 | 280 | 0 | 986 |
| 2 | 294 | 345 | 280 | 0 | 919 |
| 3 | 322 | 345 | 160 | 0 | 827 |
| 4 | 330 | 330 | 120 | 0 | 780 |
| 5 | 312 | 348 | 160 | 0 | 820 |
| 6 | 322 | 351 | 320 | 0 | 993 |
| 7 | 289 | 273 | 160 | 0 | 722 |
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.