Skip to content
marcioamr edited this page Aug 19, 2018 · 5 revisions

Código QR

O código QR é formado por informações da transações em texto plano separados por ";" conforme abaixo;

version;id;label;valor;moeda;emissor;isbn;nome;agencia;conta;destinatario;url_detalhe;metadados;created_at;valid_until;assinatura

Todos os campos estão detalhados na tabela abaixo:

Ordem Obrigatório Campo Descrição
0 * version Versão do token QRPague.
1 * id Número único (UUID) do token QRPague.
2 label Descrição da transação.
3 * valor Valor da transação em formato (9999.99).
4 * moeda Moeda da transação (BRL)
5 * emissor CPF/CNPJ do emissor do token.
6 * isbn ISBN da instituição financeira emissora.
7 * nome Nome do emissor do token.
8 * agencia Número da agência do emissor.
9 * conta Número da conta do emissor.
10 destinatario CPF/CNPJ do destinatário (quando um token só pode ser pago por um destinatário)
11 url_detalhe URL de detalhamento da transação.
12 metadados Qualquer metadados de livre escolha de cada instituição financeira.
13 * created_at Timestamp da data de criação do token QRPague.
14 valid_until Timestamp da data de expiração do token. Quando não informado significa que o token não expira.
14 * assinatura Hash (ECDSA) da assinatura efetuada pela instituição financeira que gerou o token.

Exemplo prático

let qrPagueToken = "0.1.0;5afad42239ee9f000fe92189;;10;BRL;99999999999;756;Fulano de Tal;0001;700000001;;;1526387746083;;3046022100c1bf3a2fd92766e82022cf5202a2d7520dead8a432b048b7d5f3e8cf78247f4f022100a34b2b6dc6622daf981566f45eb40c756abb8c4026ce98ce0c3fa78e1c942766"

let qrPagueArray = qrPagueToken.split(';')
console.log(qrPagueArray)

Saída do console

[
  "0.1.0",
  "5afad42239ee9f000fe92189",
  "",
  "10",
  "BRL",
  "99999999999",
  "756",
  "Fulano de Tal",
  "0001",
  "700000001",
  "",
  "",
  "1526387746083",
  "",
  "3046022100c1bf3a2fd92766e82022cf5202a2d7520dead8a432b048b7d5f3e8cf78247f4f022100a34b2b6dc6622daf981566f45eb40c756abb8c4026ce98ce0c3fa78e1c942766"
]

Assinatura

O último campo que representa a assinatura, é um HASH assinado com a chave privada da instiutição financeira, que deve ser respeitado o algoritmo de curva elíptica ECDSA.

https://pt.wikipedia.org/wiki/ECDSA

Essa assinatura deve ser validada com a chave pública da instituição financeira pagadora do QRPague. Dessa forma, as IFs participantes do deste modelo devem compartilhar e manter atualizado sua chave pública (ECDSA).

A estratégia de usar chave de Curva Elíptica, se deu com a finalidade de diminuir a densidade do código QR, para evitar dificuldades de leituras por parte de alguns smartphones mais antigos.

Clone this wiki locally