Português (Brasil)

Ferramentas de texto e do dia a dia · Kit de ferramentas de QR e código de barras

Como um código QR é construído: do texto aos módulos em preto e branco

· Como funciona

código QR codificação processamento do navegador

Uma carga útil de texto fluindo para uma grade de módulo QR estruturada
Ilustração vetorial original ToolAcre

Segue um breve URL em cada estágio da codificação QR – seleção de modo, correção de erros, posicionamento, mascaramento – para que a grade em preto e branco pare de parecer ruído.

A grade que parece aleatória, mas não é — por que o mesmo URL sempre produz o mesmo código e para que serve cada região do quadrado

A grade consiste em dados estruturados, não em ruído decorativo. ToolAcre recebe o mesmo texto, usa a mesma opção de correção de erros e retorna a mesma matriz de módulo booleano, incluindo as três regiões localizadoras que seus testes inspecionam nos cantos.

Essa repetibilidade é útil durante a revisão. Se duas exportações de texto e configurações idênticas forem diferentes, investigue a entrada, o seletor de correção ou o caminho de renderização em vez de aceitar a variação visual como inofensiva. Os testes evitam comparar uma frágil imagem dourada; eles afirmam uma matriz booleana quadrada, dimensões válidas e os três padrões de localização. Essas verificações separam a estrutura codificada de escolhas posteriores, como cor, largura da zona silenciosa e escala de saída.

Etapa 1: ToolAcre usa deliberadamente o modo de byte UTF-8 em vez de escolher entre quatro modos

O título da pasta de trabalho sugere um codificador que escolhe o modo numérico, alfanumérico, byte ou kanji. Esta implementação não: ela pré-codifica deliberadamente cada carga útil com TextEncoder e passa esses UTF-8 bytes através da biblioteca QR no modo byte.

Este caminho corrigido evita um bug de dependência silenciosa. Caso contrário, a biblioteca QR importada trataria os caracteres JavaScript como Latin-1 bytes, então café poderia conter um byte E9 em vez do par UTF-8 C3 A9, enquanto um caractere japonês poderia ser reduzido a dados não relacionados. ToolAcre converte em partes antes de chamar a biblioteca, evitando limites de contagem de argumentos em cargas maiores e evitando um patch global que pode afetar outro chamador.

Etapa 2: escolha de uma versão e nível de correção de erros — como o comprimento do texto e o nível escolhido corrigem o tamanho da grade de 21×21 para cima

A biblioteca escolhe automaticamente a menor versão do QR que cabe nos bytes no nível de correção selecionado. ToolAcre verifica se as matrizes válidas crescem nas etapas padrão de quatro módulos, de 21 módulos por lado até o teto implementado de 177.

O nível selecionado altera a capacidade de bytes disponíveis e a versão necessária para uma carga útil. O painel mede a carga útil preparada com TextEncoder, compara-a com o teto configurado para esse nível e exibe ambos os valores ao lado da visualização. Se a biblioteca não puder ajustar o valor, o usuário receberá uma instrução para encurtá-lo ou diminuir a correção, em vez de uma visualização vazia ou uma matriz faltando silenciosamente os bytes finais.

Etapa 3: a biblioteca QR adiciona dados de correção de erros internamente; ToolAcre expõe o nível escolhido

ToolAcre expõe L, M, Q e H como opções, mas a construção do bloco Reed – Solomon reside dentro da dependência do gerador de qrcode. A afirmação defensável é que a selecção de um nível mais forte pode produzir uma matriz maior para conteúdos idênticos, como demonstram os testes.

Os testes estruturais tornam esse limite observável sem reivindicar a propriedade da matemática dentro da dependência. Uma matriz gerada deve ter linhas e colunas igualmente longas, dimensões seguindo a progressão 21, 25, 29 e formas de localização de borda escura, anel claro e centro escuro. Um bug do renderizador pode então ser diagnosticado separadamente: se a matriz booleana for aprovada, mas uma exportação falhar, a falha ocorre após a codificação, e não na carga útil ou nos dados de correção.

Etapa 4: padrões de função – localizador, separador, padrões de tempo e alinhamento e faixa de informações de formato

Padrões de localização, estruturas de temporização e outras regiões reservadas já estão presentes quando a biblioteca retorna sua matriz. ToolAcre converte esse resultado em booleanos de linha principal e testa os três localizadores de canto 7-by-7 em vez de reimplementar essas próprias estruturas.

O aplicativo ainda controla como essa matriz verificada chega a um arquivo. A saída SVG mescla módulos escuros adjacentes em cada linha em execuções de caminho, reduzindo a marcação enquanto mantém as arestas vizinhas exatas. A saída do Canvas pinta um retângulo de pixel inteiro para cada célula escura. Ambos os caminhos adicionam a zona silenciosa escolhida ao redor e não dentro da matriz, portanto, alterar a margem ou a cor não pode alterar a carga útil codificada.

Etapa 5: o mascaramento de matriz é tratado dentro da biblioteca QR em vez de selecionado pelo código ToolAcre

A seleção da máscara também pertence à dependência, portanto, este artigo não pretende que ToolAcre contenha um loop de pontuação visível de oito candidatos. O que o aplicativo possui é a interface de matriz estável e o caminho de renderização que consome seus módulos claros e escuros.

Esse limite é importante ao depurar um código cuja aparência surpreende você. ToolAcre não pode expor qual das máscaras candidatas da dependência venceu ou reproduzir uma pontuação de penalidade na interface; ele pode reproduzir a matriz de módulos final para as mesmas entradas. Comparar matrizes é, portanto, significativo, embora explicar um trecho específico de células alternadas como uma máscara selecionada manualmente iria além do que esse código registra.

Exemplo resolvido: compare a carga útil UTF-8 observável, o tamanho da matriz e os módulos renderizados

Experimente um menu curto URL, observe a contagem de módulos retornados e anexe uma longa string de consulta. A lição observável é que mais UTF-8 bytes podem exigir uma matriz mais densa; o repositório não expõe sequências de bits intermediárias ou palavras-código para um cálculo manual.

Para uma comparação útil, mantenha o nível M e as cores constantes e, em seguida, gere `https://example.com/menu` e o mesmo endereço com um valor de consulta longo. Registre o contador de bytes e as dimensões da matriz mostradas pelo painel. A segunda entrada pode cruzar o limite de uma versão mesmo que ambas sejam “um URL”. A diferença vem dos bytes codificados, não do número de palavras ou do comprimento aparente da página de destino.

Conclusão: a codificação é local, enquanto a atividade de rede no nível da página deve ser avaliada separadamente

A operação de carga útil para matriz é executada pelo navegador JavaScript e a renderização SVG ou PNG usa essa matriz na memória. Isso é mais restrito do que afirmar que a página inteira é silenciosa na rede: a implantação pode carregar recursos de página não relacionados, portanto, inspecione as solicitações antes de usar segredos.

A restrita reivindicação de privacidade também pode ser testada sem confiar na cópia de marketing. Limpe as ferramentas do desenvolvedor, insira uma string inofensiva distinta e gere o código e, em seguida, pesquise novos URLs e corpos de solicitação para essa string. As funções de codificação não contêm nenhuma chamada de busca, mas o teste ainda deve ser realizado na página implantada porque os estilos, análises ou extensões são separados da implementação de carga útil para matriz revisada aqui.