Do zero a uma biblioteca própria de QR Code
A Atecsoftwares agora possui um encoder QR Code Model 2 nativo em Delphi, criado do zero com base na ISO/IEC 18004:2024. Sem DLL, sem componente de terceiros e sem delegar a parte difícil: segmentação, Reed–Solomon, montagem da matriz, máscaras e renderização fazem parte da própria solução.
O desafio
Gerar um QR Code não é desenhar quadrados aleatórios. O símbolo precisa transformar texto em um fluxo binário, calcular redundância para recuperação de erros e posicionar cada módulo segundo regras formais. A missão era dominar esse pipeline por completo e entregar uma API simples para o restante do sistema.
- Eliminar dependência de DLLs e componentes externos
- Suportar as 40 versões do QR Code Model 2
- Implementar correção de erro e mascaramento conforme a norma
- Integrar com aplicações Delphi sem contaminar o núcleo com VCL
- Provar o resultado com vetores normativos e comparação cruzada
Uma arquitetura criada para pertencer ao produto
A fachada pública esconde um pipeline dividido em 9 units especializadas. O núcleo usa somente a RTL; a renderização VCL é opcional e isolada. Isso permite gerar a matriz em qualquer camada e decidir depois se o destino será bitmap, canvas, impressão ou outro consumidor.
Entrada
↓ análise e escolha do modo
Segmentação · Numérico / Alfanumérico / Byte / UTF-8 + ECI
↓ menor versão capaz de armazenar os dados
Codewords de dados · terminador · preenchimento
↓ blocos + correção em GF(256)
Reed–Solomon · intercalação
↓ padrões de função + percurso em zigue-zague
Matriz base
↓ avaliação das 8 máscaras por penalidade N1..N4
Formato + versão · BCH
↓
TQrCodeSimbolo → Bitmap / Canvas
Fachada
GerarQR coordena todo o processo e devolve o símbolo pronto, com versão, nível, máscara e matriz.
Dados e tabelas
Tipos, buffer de bits e tabelas normativas ficam centralizados para manter o cálculo previsível e auditável.
Codificação
Escolha automática do modo mais compacto, Latin-1 por padrão e UTF-8 com ECI 000026 quando necessário.
Correção de erro
Divisão em blocos e geração de codewords Reed–Solomon por aritmética em GF(256).
Matriz e máscaras
Localizadores, alinhamento, temporização, posicionamento dos dados e escolha entre oito máscaras.
Renderização isolada
Conversão para TBitmap ou desenho em TCanvas, incluindo a zona quieta.
A complexidade escondida atrás de uma chamada
A superfície pública permanece pequena mesmo com um motor completo por baixo.
uses QrCode, QrCodeRender;
var
Simbolo: TQrCodeSimbolo;
Bitmap: TBitmap;
begin
Simbolo := GerarQR('https://atecponto.com.br/acesso?id=42', qrNivelQ);
Bitmap := QrCodeParaBitmap(Simbolo, 6);
try
Image1.Picture.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;
Para usos avançados, a API permite fixar versão e máscara, definir uma versão mínima, escolher entre os níveis L, M, Q e H e controlar a emissão de ECI para UTF-8. No caminho padrão, tudo isso é decidido automaticamente.
Conformidade que pode ser medida
A implementação transforma os passos prescritos pela ISO/IEC 18004:2024 em componentes isolados e os confronta com tabelas, anexos e encoders independentes. A norma não aparece apenas na documentação: ela orienta o pipeline e os testes.
Tabelas invariantes
As 160 combinações de versão e nível verificam blocos, codewords e bits remanescentes.
Vetores normativos
Palavras de formato e versão são conferidas contra os Annexes C e D da norma.
Símbolos de referência
Matrizes completas são comparadas por hash com um encoder independente de referência.
Máscaras forçadas
Todas as máscaras entram na verificação cruzada, além da seleção automática por penalidade.
| Camada de teste | O que ela prova |
|---|---|
| 15 testes DUnitX | Regras internas, erros esperados e estrutura do símbolo |
| 4 matrizes módulo a módulo | Versão, máscara e cada posição da matriz final |
| 58 casos amplos | Modos, níveis, UTF-8/ECI, versões 7–40 e máscaras 0–7 |
| Limites de capacidade | 7.089 dígitos cabem na versão 40-L; o próximo valor é rejeitado |
Números da conquista
Resultado
A conquista não foi apenas fazer um QR Code aparecer na tela. Foi transformar um padrão internacional em uma biblioteca própria, testável e reutilizável, sob controle técnico da Atecsoftwares. O sistema ganhou autonomia para evoluir, integrar e renderizar símbolos sem depender do ciclo de vida de fornecedores externos.
- Domínio do fluxo completo de codificação QR Code
- Infraestrutura nativa, sem DLL ou componente de terceiros
- API pequena sobre uma arquitetura modular e extensível
- Conformidade sustentada por vetores normativos e verificação cruzada
- Suporte a conteúdo internacional com UTF-8 e ECI
- Ativo técnico próprio incorporado ao ecossistema da empresa
Quer conversar sobre engenharia de baixo nível?
Posso explicar as decisões arquiteturais, a estratégia de testes e como essa biblioteca se integra ao produto.
jhonathan93.dev@gmail.com