Ir para o conteúdo

Dicas sobre tratamento de Qr Code

28 Setembro 2018

A fabricação de Blanks é iniciada através da requisição de um lote, via comunicação Fabricante → Serpro (/api-fabricante/lotes).

O Serpro devolve o QR Code do Blank em Base64 e também o Serial, sendo um alfanumérico contendo 15 caracteres AAMMFFSSSSSSSSS, onde:

AA = ano
MM = mês
FF = código do fabricante com dois caracteres
SSSSSSSSS = sequencial numérico

O QRCode é criptografado, de forma a evitar que fraudadores gerem um QRCode válido para um determinado veículo. Portanto, a obtenção do serial a partir do QRCode só é possível via o sistema de QRCodes seguros do Serpro, o Vio.

Nós utilizamos JSON para trafegarmos as mensagens, e por isso o QR Code é enviado em Base64, podendo ser facilmente convertido para binário. Cabe aos fabricantes gerarem a imagem a partir do conteúdo em Base64 convertendo para Binário (arquivo ".bin"). Imaginamos que os passos abaixo possam ajudar na execução do fluxo:

  • Fabricante recebe e armazena no banco de dados o serial alfanumérico.
  • Fabricante recebe e armazena no banco de dados o QR Code em base64.
  • Fabricante converte de base64 para binário.
  • Fabricante armazena o binário.
  • Fabricante gera o hash sobre o binário do QR Code e armazena esse hash.
  • Fabricante gera imagem a partir do binário armazenado.
  • Fabricante envia a imagem para a impressora a laser.
  • Fabricante executa controle de qualidade: uma câmera lê o binário do QR Code, gera o hash do conteúdo lido e compara com o hash do QR que estava no banco do fabricante.

Citamos também a importância do cumprimento dos padrões de qualidade, indicando inclusive a norma ISO/IEC 29158. A impressão é executada a laser e itens como resolução, borda, tempo de leitura, armazenamento devem ser considerados pelos fabricantes. Exemplo de código Java que gera uma imagem de QR Code

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.Base64;

    import javax.imageio.ImageIO;

    import io.nayuki.qrcodegen.QrCode;

    public class GeracaoQrcodeLince {

        public static void main(String[] args) throws Exception {

            String qrcodeEmBase64 = "NWJhY2Y1ZW..."; // Recebido do Emplaca WS
            byte[] bytesDoQrcode = Base64.getDecoder().decode(qrcodeEmBase64);
            QrCode qr = QrCode.encodeBinary(bytesDoQrcode, QrCode.Ecc.MEDIUM);
            BufferedImage img = qr.toImage(10, 4); 
            File imgFile = new File("/tmp/qr-lince.png"); 
            ImageIO.write(img, "png", imgFile);
        }

    }

Referências

  • Geração de imagem QR em Java utilizando a biblioteca nayuki: https://www.nayuki.io/page/qr-code-generator-library

  • Exemplo de QR Code Lince (produção) em base64:

NWJhY2Y1ZWMwMgALAAxFhBlBFBBBNNZVBIAo0umJVwKjr2BwgvPLtNhJZiOdDivIx3KJPnkPF1lB9xaLtCzsUlqIPMQUwU2JERj17HoJAPmHe72Xu3gsSeE+eUGwvng7ENFaVT1TD+J3DpYqcgKCJrB6yLqx16FPww0UB5jorey2RBT95yjGBRxMqK7rxpkEivWz7jhKvTfg5jcbkm5/HvvqR2arZP6WrGEkD0quEJr4u3OeC6Spw/Xmv2ZjDB7pFBj35VMvfYoggSYVa1Q6iRBREkm87E/oLPm3BPEY4WGk7cKLVRVOHLwVUaRlDNVb0LoGXvQEGhPO6boPmEwVTnn9GwfruBWsk7wCfqRppG9JZYpNAeKhgdKU

Atenção

ATENÇÃO: os trechos dos códigos citados são apenas exemplos, avaliar com cautela.


Última atualização: 10 de fevereiro de 2022
Criada: 10 de fevereiro de 2022