7 min de leituraRecursos

Código QR EPC: O Padrão de QR Code para Pagamentos SEPA Explicado

Um código QR EPC codifica uma transferência de crédito SEPA, não uma URL, para que um aplicativo bancário possa preencher o formulário automaticamente. O que o payload contém, e por que você não consegue rastreá-lo.

Marius Voß
DevRel · edge infra
Um payload de código QR EPC mostrado como doze linhas de texto simples começando com a tag de serviço BCD, ao lado de um formulário de transferência de aplicativo bancário preenchido a partir dele

Um código QR EPC não contém um link. Ele contém uma transferência de crédito SEPA, escrita como um pequeno bloco de texto simples, e um aplicativo bancário que reconhece o formato faz a leitura e preenche o formulário de transferência. Nenhum servidor é contatado, nada é consultado, e nada sobre a leitura chega até você.

Esse único fato define tudo o mais sobre como esses códigos são usados. Você não consegue encurtar um, não consegue reapontar um, e não consegue contar as leituras, porque não existe nenhuma solicitação em nenhum ponto do fluxo. O padrão por trás disso é o EPC069-12 do European Payments Council, os códigos costumam ser chamados de GiroCodes nos mercados de língua alemã, e vale a pena entender o formato com precisão antes de imprimir milhares deles em faturas. Para o caso geral do que um código pode carregar, o que é um código QR cobre a questão do payload.

O Que o Payload Realmente Contém

O payload é uma sequência de linhas, em uma ordem fixa, cada uma um elemento separado. Um analisador lê a linha 1, espera BCD, lê a linha 4, espera SCT, e desiste se qualquer uma das duas estiver faltando.

LinhaConteúdoLimite
Tag de serviçoBCDfixo, 3 caracteres
Versão001 ou 002002 torna o BIC opcional
Conjunto de caracteres1 para UTF-8, até 8um dígito
IdentificaçãoSCTfixo, 3 caracteres
BICidentificador do banco beneficiário11 caracteres, frequentemente omitido
Nome do beneficiárioo titular da conta70 caracteres
IBANconta do beneficiário34 caracteres
ValorEUR seguido do valor0,01 a 999999999,99, em EUR
Código de finalidadefinalidade ISO, raramente usado4 caracteres
Referência estruturadareferência do credor, ou35 caracteres
Texto não estruturadoremessa em texto livre, em vez disso140 caracteres
Beneficiário para originadornota mostrada ao pagador70 caracteres

Duas regras costumam confundir as pessoas. A referência estruturada e o texto não estruturado são mutuamente exclusivos: preencha um, deixe o outro vazio. E o valor é opcional, o que é a escolha certa para um código de doação onde o pagador decide, e a escolha errada para uma fatura onde você quer um valor exato já preenchido.

O bloco inteiro está limitado a 331 bytes. As diretrizes EPC069-12 também fixam o nível de correção de erro em M e limitam o símbolo à versão 13, então o código que você imprime tem um teto conhecido de número de módulos. Se você está construindo isso em código em vez de clicar em um gerador, a documentação da biblioteca Segno mostra a ordem dos campos e as regras de codificação em um formato que você pode testar.

Os quatro blocos de um payload de QR EPC, da tag de serviço fixa passando pelos detalhes do beneficiário e o valor até a referência de remessa

Por Que Você Não Consegue Encurtá-lo ou Rastreá-lo

Um código QR rastreado funciona codificando uma URL que você possui. A leitura abre essa URL, seu redirecionamento responde, você conta a solicitação, e o visitante chega onde quer que o link esteja apontando no momento. Códigos QR dinâmicos versus estáticos cobre o mecanismo por completo.

Nada disso se aplica aqui. O aplicativo bancário não é um navegador. Ele interpreta o texto, verifica se corresponde ao formato, e abre um formulário de pagamento localmente no dispositivo. Não há nenhuma solicitação HTTP para interceptar, então:

  • Nenhuma contagem de leituras existe, em lugar nenhum. Nem na sua ferramenta, nem na do banco.
  • Nada pode ser reapontado. Um IBAN errado significa uma reimpressão.
  • Envolver o payload em um link curto o quebra completamente, porque o analisador vê https onde esperava BCD.

Eu já vi uma equipe passar uma semana inteira tentando conseguir atribuição em um código de pagamento antes que alguém lesse a especificação. A resposta honesta é que o lado do pagamento e o lado da medição são dois códigos diferentes, e se o layout só tem espaço para um, o código de pagamento vence.

O que você pode medir é tudo em volta dele. Se uma correspondência carrega uma fatura com um código de pagamento, coloque um link curto rastreado separado na carta para o portal do cliente, os termos, ou a página de suporte, e leia o engajamento a partir dali. Os recursos de código QR do Elido cobrem a metade rastreável da folha, e o código de pagamento permanece exatamente como o padrão exige.

Onde Funciona e Onde Não Funciona

O suporte reside em cada aplicativo bancário individual, motivo pelo qual a cobertura é irregular de um jeito que listas de países exageram. Aplicativos austríacos e alemães leem esses códigos há anos, aplicativos finlandeses e holandeses são amplamente confiáveis, o suporte belga é bom. Além disso, teste antes de se comprometer com uma tiragem de impressão.

Dois vizinhos costumam ser confundidos com ele. O QR-bill suíço é uma especificação diferente, com seu próprio layout e uma cruz suíça no meio do símbolo; não é um código EPC e os aplicativos da zona do euro não vão lê-lo como um pagamento. E um link de pagamento de uma processadora de cartões não é isso, de jeito nenhum: é uma URL comum dentro de um QR, com um checkout hospedado no final, e se comporta como qualquer outro link da web, incluindo o rastreamento que vem junto com ele.

Para a questão mais ampla do que uma empresa regulada de pagamentos ou crédito pode colocar diante dos clientes, encurtadores de URL para fintechs cobre as partes em que um link está envolvido.

Um código QR de pagamento decodificado offline em um formulário de transferência, comparado com um código QR de link que chega a um redirecionamento e gera analytics

Produzindo um Sem Arrependimentos

Seis verificações, na ordem em que economizam o seu dinheiro.

  1. Valide o IBAN antes da geração, não depois da impressão. Um teste de checksum não custa nada, e uma reimpressão custa uma tiragem inteira.
  2. Decida a questão do valor de forma deliberada. Fixo para faturas, vazio para pôsteres de doação onde qualquer valor deve ser possível.
  3. Prefira a referência estruturada em vez do texto livre. Ela é mais curta, concilia automaticamente na sua contabilidade, e mantém o payload pequeno.
  4. Teste em pelo menos três aplicativos bancários, nas duas plataformas de celular. Os analisadores diferem em quão rigorosamente tratam os campos opcionais.
  5. Dimensione o código impresso para a distância de onde ele será lido, exatamente como em qualquer outro código. Qual deve ser o tamanho de um código QR tem a aritmética.
  6. Mantenha-o fosco. Verniz brilhante sobre um código de pagamento em uma fatura sob a iluminação de um escritório é um chamado de suporte esperando para acontecer.

O Problema do Adesivo

Existe um único vetor de fraude real, e ele é físico, não digital. Um código de pagamento estático impresso em uma fatura, um parquímetro, a placa de uma barraca de mercado ou o pôster de uma instituição de caridade pode ser coberto com um adesivo carregando um IBAN diferente. Nada no código resiste a isso, porque o payload é o papel.

As mitigações são igualmente físicas. Imprima o código dentro do layout da fatura, onde uma etiqueta seria óbvia, em vez de em um adesivo colado por cima. Mostre o nome do beneficiário e os últimos dígitos do IBAN em texto ao lado do código, para que o pagador possa comparar. E, nas instruções de confirmação de pagamento, oriente as pessoas a ler o nome que o aplicativo bancário exibe antes de confirmar, porque essa tela é o único lugar onde a troca se torna visível. Os códigos QR são seguros, e o que é quishing de verdade cobre o padrão de ataque mais amplo, a maior parte do qual se aplica também aos códigos de link que você imprime em outras partes da mesma página.

A parte tranquilizadora: um pagamento ainda precisa de um humano para confirmá-lo em um aplicativo bancário autenticado. O código preenche um formulário, ele nunca movimenta dinheiro.

Leia a Série Principal

Este post está no cluster de recursos. Para o fluxo de trabalho impresso em torno de qualquer código que você gerar, uma campanha de código QR do zero é o conteúdo principal, e o guia de código QR na documentação cobre a geração do tipo rastreável através da API.

Relacionados no blog

Perguntas frequentes

O que é um código QR EPC?

Um código QR que codifica os detalhes de uma transferência de crédito SEPA como texto simples, para que um aplicativo bancário possa lê-lo e preencher o formulário de transferência. Foi padronizado pelo European Payments Council nas diretrizes EPC069-12 e também é conhecido como GiroCode. O payload é uma sequência fixa de linhas que começa com a tag de serviço BCD, e não contém nenhum endereço web.

Quais países suportam pagamentos GiroCode?

O suporte está no aplicativo bancário, não no país, mas na prática os códigos são amplamente lidos na Áustria, na Alemanha, na Finlândia, na Holanda e na Bélgica. No restante da zona do euro a cobertura é irregular, e fora dela o código não tem nenhum significado. A Suíça usa seu próprio padrão QR-bill, que parece semelhante mas não é compatível.

Um código QR EPC pode ser dinâmico ou rastreável?

Não. Os detalhes do pagamento estão dentro do padrão impresso, e o celular os decodifica offline sem entrar em contato com nenhum servidor, então não há nada para redirecionar e nada para contar. Se você precisar mudar o valor ou a referência, precisa gerar um novo código. Qualquer coisa vendida a você como um QR de pagamento dinâmico é, na verdade, um link para uma página de pagamento, que é um produto diferente.

O que acontece se eu colocar um link curto em um código QR EPC?

O aplicativo bancário não consegue interpretar o payload e ou mostra um erro, ou passa a tratar o código como uma URL comum. O analisador espera que a primeira linha seja BCD e a quarta seja SCT; uma URL não corresponde a nenhuma das duas. Códigos QR de pagamento e códigos QR de link são dois códigos separados que apenas compartilham o mesmo formato de símbolo.

Qual o tamanho máximo do payload?

331 bytes, o que limita o QR à versão 13 com nível de correção de erro M sob as diretrizes do EPC. Na prática, é o texto de remessa que preenche esse espaço, então uma referência longa em texto livre é o campo que costuma levar um código a ultrapassar o limite. Mantenha a referência estruturada e curta, e o código permanece simples o suficiente para ser lido a partir de uma fatura impressa.

Códigos QR de pagamento são seguros em faturas impressas?

O código em si não carrega nenhum conteúdo executável, e o pagador confirma a transferência no próprio aplicativo bancário, que mostra o nome do beneficiário e o IBAN antes de qualquer movimentação. O risco real é físico: um adesivo colado sobre o código impresso, redirecionando o pagamento para outra conta. Imprima o código dentro do layout da fatura, não em uma etiqueta separada, e oriente os pagadores a conferir o nome na tela de confirmação.

Experimente Elido

Cole uma URL, obtenha um link curto

Sem cadastro. O link vive 30 dias. Cadastre-se para mantê-lo para sempre.

Grátis, sem necessidade de registo · 2 por dia

Experimente o Elido

Encurtador de URL hospedado na UE: domínios personalizados, análises profundas e API aberta. Plano gratuito - sem cartão de crédito.

Tags
epc qr code
girocode
sepa payment qr code
qr code payment
static qr code
invoice qr code

Continuar lendo