CASE TÉCNICO / CONQUISTA LENDÁRIA

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.

Object Pascal ISO/IEC 18004:2024 Reed–Solomon DUnitX Zero dependências Atecsoftwares · 2026
ENCODER_CORE // OWNED

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.

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
01

Fachada

GerarQR coordena todo o processo e devolve o símbolo pronto, com versão, nível, máscara e matriz.

02

Dados e tabelas

Tipos, buffer de bits e tabelas normativas ficam centralizados para manter o cálculo previsível e auditável.

03

Codificação

Escolha automática do modo mais compacto, Latin-1 por padrão e UTF-8 com ECI 000026 quando necessário.

04

Correção de erro

Divisão em blocos e geração de codewords Reed–Solomon por aritmética em GF(256).

05

Matriz e máscaras

Localizadores, alinhamento, temporização, posicionamento dos dados e escolha entre oito máscaras.

06

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.

40 × 4

Tabelas invariantes

As 160 combinações de versão e nível verificam blocos, codewords e bits remanescentes.

32 + 34

Vetores normativos

Palavras de formato e versão são conferidas contra os Annexes C e D da norma.

58

Símbolos de referência

Matrizes completas são comparadas por hash com um encoder independente de referência.

8

Máscaras forçadas

Todas as máscaras entram na verificação cruzada, além da seleção automática por penalidade.

Camada de testeO que ela prova
15 testes DUnitXRegras internas, erros esperados e estrutura do símbolo
4 matrizes módulo a móduloVersão, máscara e cada posição da matriz final
58 casos amplosModos, níveis, UTF-8/ECI, versões 7–40 e máscaras 0–7
Limites de capacidade7.089 dígitos cabem na versão 40-L; o próximo valor é rejeitado

Números da conquista

0dependências externas
9units especializadas
1–40versões QR Model 2
4níveis de correção
8máscaras avaliadas
15testes DUnitX

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.

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