28 September 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:
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:
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.
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);
}
}
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: os trechos dos códigos citados são apenas exemplos, avaliar com cautela.