8 min de leituraRecursos

QR Code EPC: o Padrão de QR para Pagamento SEPA Explicado

Um QR code EPC codifica uma transferência SEPA, não uma URL, e o app do banco preenche o formulário.

Marius Voß
DevRel · edge infra

Um QR code EPC não contém um link. É uma transferência SEPA, escrita como um pequeno bloco de texto simples, e um app bancário que reconhece o formato o lê e preenche o formulário de transferência. Nenhum servidor é contatado, nada é consultado e nada sobre a leitura chega até você.

Esse único fato decide todo o resto sobre como esses códigos são usados. Você não consegue encurtar um, não consegue redirecionar um e não consegue contar as leituras, porque não há nenhuma requisição em lugar algum do fluxo. O padrão por trás é o EPC069-12 do European Payments Council, os códigos costumam ser chamados de GiroCode nos mercados de língua alemã, e vale 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 QR code trata da questão do payload.

O que o Payload Realmente Contém

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

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 do beneficiário11 caracteres, muitas vezes 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 da anterior140 caracteres
Beneficiário para o originadorobservação mostrada ao pagador70 caracteres

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

O bloco inteiro é limitado a 331 bytes, e os elementos são separados por uma quebra de linha (line feed) ou CRLF, sem separador depois do último. Os 331 bytes contam bytes UTF-8, então nomes com acentos usam mais do que o número de caracteres. Nome, IBAN, BIC e a referência estruturada são marcados como fixos, ou seja, o app do pagador não deve permitir editá-los. As diretrizes EPC069-12, versão 3.1 de 19 de março de 2024 (acesso em 2026-10-25; a tabela de campos acima foi conferida com elas) também fixam o nível de correção de erros em M e limitam o símbolo à versão 13 (69 módulos por lado). O próprio payload de exemplo do documento tem 96 bytes e gera um código de versão 6, com 41 módulos. Se você for montar isso em código, a documentação da biblioteca Segno (acesso em 2026-10-25) mostra a ordem dos campos, e o helper dela fixa o nível de erro em M e a versão em 13 ou menos, de acordo com a especificação.

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

Por que Você Não Consegue Encurtar nem Rastrear

Um QR code rastreado funciona codificando uma URL que você controla. A leitura abre essa URL, o seu redirecionamento responde, você conta a requisição e o visitante chega onde você estiver apontando o link naquele momento. QR codes dinâmicos versus estáticos trata do mecanismo por completo.

Nada disso se aplica aqui, e não há como contornar. O app do banco não é um navegador. Ele interpreta texto, reconhece o formato e abre um formulário de pagamento localmente no dispositivo. Não existe requisição HTTP para interceptar, então:

  • Não existe contagem de leituras em lugar nenhum. Nem na sua ferramenta, nem no banco.
  • Nada pode ser redirecionado. Um IBAN errado significa reimpressão.
  • Se você envolver o payload em um link curto, ele quebra, porque o parser vê https onde esperava BCD.

O lado do pagamento e o lado da medição são dois códigos diferentes. Se o layout tem espaço para apenas um, o código de pagamento vence. Eu colocaria o código de pagamento primeiro e o link rastreado depois, sempre.

O que dá para medir é tudo o que está ao redor. Se uma correspondência traz uma fatura com um código de pagamento, coloque na carta um link curto rastreado à parte, para o portal do cliente, os termos ou a página de suporte, e leia o engajamento a partir dele. Os recursos de QR code do Elido cobrem a metade rastreável da folha, e o código de pagamento continua exatamente como o padrão exige.

Onde Funciona e Onde Não Funciona

O suporte vive em apps bancários individuais, e é por isso que as listas de países exageram. O documento do EPC é explicitamente informativo, e implementá-lo é opcional para os bancos. Teste antes de se comprometer com uma tiragem.

Dois vizinhos são confundidos com ele. O QR-bill suíço é uma especificação diferente, com uma cruz suíça no meio, e apps da zona do euro não o leem como pagamento. Um link de pagamento de um processador de cartões é apenas uma URL em um QR com um checkout hospedado no final, e é rastreado como qualquer link web.

Para a questão mais ampla do que um negócio regulado de pagamentos ou crédito pode colocar diante dos clientes, encurtadores de URL para fintech trata das partes em que um link está envolvido.

Um QR code de pagamento decodificado offline em um formulário de transferência, comparado a um QR code de link que passa por um redirecionamento e gera análises

Dá para Criar um com o Elido?

Não como recurso dedicado. Conferido no código em 2026-10-25: a ferramenta gratuita de gerador de QR code tem seis tipos de conteúdo (URL, texto, Wi-Fi, vCard, e-mail, SMS), e nenhum é do tipo EPC ou pagamento. O designer de QR do painel aceita um campo de conteúdo de uma única linha, então não consegue guardar um payload de várias linhas.

A alternativa é o tipo Texto da ferramenta gratuita, que tem uma caixa de várias linhas e repassa o seu texto sem alterações. Cole as doze linhas, mantenha a correção de erros em M (o padrão da ferramenta) e baixe o PNG ou SVG. Dois cuidados. Não há validação, então um IBAN errado ou uma quebra de linha extra no final geram um código que parece correto e falha no app do banco. E é um código estático, sem rastreamento, que é exatamente o que um código de pagamento deve ser. Um tipo EPC de verdade, com verificação de IBAN, está no nosso backlog.

Como Produzir um Sem Arrependimento

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

  1. Valide o IBAN antes de gerar, não depois de imprimir. Um teste de checksum não custa nada, e uma reimpressão custa uma tiragem.
  2. Decida a questão do valor com critério. Fixo para faturas, vazio para cartazes de doação em que qualquer valor deve ser possível.
  3. Prefira a referência estruturada ao texto livre. Ela é mais curta, é conciliada automaticamente na sua contabilidade e mantém o payload pequeno.
  4. Teste em pelo menos três apps bancários, nas duas plataformas de celular. Os parsers diferem no rigor com que tratam os campos opcionais.
  5. Dimensione o código impresso para a distância de onde será lido, exatamente como com qualquer outro código. Qual deve ser o tamanho de um QR code traz a aritmética.
  6. Use acabamento fosco. Verniz brilhante sob luz de escritório causa reflexo e leituras que falham.

O Problema do Adesivo

Existe um vetor de fraude real, e ele é físico, não digital. Um código de pagamento estático impresso em uma fatura, em um parquímetro, na placa de uma barraca de feira ou em um cartaz de caridade pode ser coberto por um adesivo com outro IBAN. Nada no código resiste a isso, porque o payload é o papel, e ele não verifica nada.

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. Mostre em texto, ao lado do código, o nome do beneficiário e os últimos dígitos do IBAN, para que o pagador possa comparar. E, nas instruções de confirmação do pagamento, oriente as pessoas lendo o nome que o app do banco exibe antes de confirmar, porque essa tela é o único lugar em que a troca fica visível. QR codes são seguros e o que é quishing de verdade trata do padrão de ataque mais amplo, em grande parte aplicável aos códigos de link que você imprime em outros lugares da mesma página.

A parte tranquilizadora é que um pagamento ainda precisa de uma pessoa para confirmá-lo em um app bancário autenticado. O código preenche um formulário e nunca movimenta dinheiro. Para saber como um banco deve governar os outros códigos que imprime ao redor de um código de pagamento, veja QR codes para bancos.

Para o fluxo impresso em torno de qualquer código, veja uma campanha de QR code do zero. O guia de QR codes na documentação trata do tipo rastreável.

Relacionados no Blog

Perguntas frequentes

O que é um QR code EPC?

Um QR code que codifica os dados de uma transferência SEPA (SEPA credit transfer) como texto simples, para que um app 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 aceitam pagamentos por GiroCode?

O suporte está no app do banco, não no país. O EPC diz que o esquema é opcional para os bancos, e a Wikipédia cita Alemanha, Áustria, Bélgica, Finlândia, Países Baixos, Luxemburgo, Estônia, Letônia, Lituânia e Itália como lugares onde os códigos são de uso comum (acesso em 2026-10-25). Não testamos apps individualmente, então teste o seu. Fora da zona do euro, o código não faz sentido. A Suíça usa o próprio padrão QR-bill, que é parecido e não é compatível.

Um QR code EPC pode ser dinâmico ou rastreável?

Não. Os dados do pagamento estão dentro do padrão impresso, e o celular os decodifica offline, sem contatar nenhum servidor, então não há nada para redirecionar nem para contar. Se você precisa mudar o valor ou a referência, gera um código novo. Qualquer coisa vendida a você como QR de pagamento dinâmico é um link para uma página de pagamento, que é outro produto.

O que acontece se eu colocar um link curto em um QR code EPC?

O app do banco não consegue interpretá-lo e mostra um erro ou passa a tratar o código como uma URL comum. O parser espera que a primeira linha seja BCD e a quarta seja SCT; uma URL não corresponde a nenhuma das duas. QR codes de pagamento e QR codes de link são dois códigos diferentes que só compartilham o formato do 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 erros M nas diretrizes do EPC. Na prática, o que o enche é o texto de remessa, então uma referência longa em texto livre é o campo que faz um código estourar o limite. Mantenha a referência estruturada e curta, e o código fica esparso o bastante para ser lido em uma fatura impressa.

QR codes de pagamento são seguros em faturas impressas?

O código em si não carrega conteúdo executável, e o pagador confirma a transferência no app do banco, que mostra o nome do beneficiário e o IBAN antes de qualquer valor sair. O risco real é físico: um adesivo colado sobre o código impresso que desvia o pagamento para outra conta. Imprima o código dentro do layout da fatura, não em uma etiqueta, 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.

É necessária uma conta grátis. O plano grátis inclui 25 links no total. Já tem uma conta? Entrar

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