Pular para o conteúdo

QR Code do Pix: o que está escrito dentro dele

Um texto. Só isso. O quadradinho preto e branco não guarda dinheiro, não guarda senha e não fala com banco nenhum — ele guarda uma linha de 137 caracteres que qualquer pessoa consegue ler. Desmontamos essa linha campo a campo, com os exemplos oficiais do Banco Central, e o campo mais importante é justamente o que o seu aplicativo joga fora.

O QR Code do Pix é o “copia e cola”

Não são duas coisas parecidas. São a mesma coisa. O Manual de Padrões para Iniciação do Pix, que é parte do Regulamento do Pix, define a funcionalidade dizendo que o recebedor deve permitir copiar “o inteiro teor da sequência de caracteres que representa o BR Code”, e que “deve ser copiada exatamente a mesma sequência de caracteres que seria lida pelo leitor de QR Code”.

Então tudo que está escrito abaixo sobre o QR vale igual para aquele texto enorme que você cola no aplicativo. E vale o contrário também: se você tem o copia e cola, pode gerar o desenho — é literalmente o que o gerador de QR Code daqui faz quando você cola a linha nele.

Este é o texto do exemplo oficial de um QR estático, publicado pelo Banco Central. Ele é fictício e serve de exemplo em todo este artigo:

00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-4266554400005204000053039865802BR5913Fulano de Tal6008BRASILIA62070503***63041D3D

Fonte: Manual de Padrões para Iniciação do Pix 2.9.0, seção 2.6.3. Dá para reconhecer coisa a olho nu — br.gov.bcb.pix, BR, o nome do recebedor. O resto vira legível quando se sabe o formato, que é o assunto da próxima seção.

O formato: identificador, tamanho, valor

O padrão se chama BR Code e é a versão brasileira do EMV® QRCPS, o mesmo formato usado em outros países. A regra é de uma simplicidade teimosa: dois dígitos de identificador, dois dígitos dizendo o tamanho e o valor, exatamente daquele tamanho. Aí começa o próximo campo, colado, sem separador nenhum.

O começo de todo BR Code é sempre 000201: campo 00, tamanho 02, valor 01. Depois 5802BR: campo 58, dois caracteres, BR. Uma vez que se enxerga o ritmo, não desenxerga mais.

Alguns campos têm, como valor, outra sequência de campos — é o que transforma a linha numa árvore. O Pix mora dentro de um desses.

O QR estático oficial, desmontado

Cada linha desta tabela foi lida do texto acima pelo nosso próprio leitor, no momento em que esta página foi gerada. O tamanho é o que o payload declara, não o que contamos.

IDNome no padrãoTamValorO que é
00Payload Format Indicator201A versão do formato. Vale “01” desde 2020 e nunca mudou.
2658O arranjo de pagamento. Aqui dentro é que mora o Pix.
00GUI14br.gov.bcb.pixO nome do arranjo. É este campo que diz “isto é um Pix”.
01Chave Pix36123e4567-e12b-12d1-a456-426655440000A chave que recebe o dinheiro. É o único campo que decide para onde ele vai.
52Merchant Category Code40000O ramo do estabelecimento, no código do padrão. “0000” é “não informado”.
53Transaction Currency3986A moeda, no código da ISO 4217. “986” é o real.
58Country Code2BRO país, no código da ISO 3166-1. Sempre “BR”.
59Merchant Name13Fulano de TalO nome do recebedor — e é o campo que o seu banco ignora.
60Merchant City8BRASILIAA cidade do recebedor. Também é enfeite: ninguém confere.
62Additional Data Field Template7Os dados adicionais. Só carrega o identificador da transação.
05Reference Label3***O identificador para o recebedor conciliar o pagamento. “***” significa “não usei”.
63CRC1641D3DA conta que fecha o código. Quatro dígitos em hexadecimal.

Repare no que NÃO está aí. Não tem banco, não tem agência, não tem conta, não tem CPF do recebedor — a menos que a chave seja o CPF dele, e a gente volta nisso. Não tem nada criptografado, nada assinado e nada secreto. Um QR de Pix estático é um cartaz que diz “mande dinheiro para esta chave”, e mais nada.

Os quatro dígitos do fim, e o que eles realmente protegem

O último campo é o 63, o CRC16 — uma conta feita sobre todos os caracteres anteriores, que resulta em quatro dígitos hexadecimais. O manual manda usar o polinômio 0x1021 com valor inicial 0xFFFF e avisa, numa nota, do detalhe que derruba quem implementa de memória: “A ordem dos objetos modifica o CRC”. E a conta inclui o próprio 6304 — só ficam de fora os quatro dígitos que estão sendo calculados.

No exemplo oficial acima, o payload declara 1D3D e a nossa conta, refeita agora, deu 1D3D.

Quanto isso pega? Medimos. Trocamos cada caractere do payload por cada outro caractere que aparece num BR Code de verdade — 6.172 versões diferentes do mesmo código — e conferimos o CRC de todas. 6.170 foram derrubadas.

Sobreviveram 2, e as duas são a mesma piada: trocam um D por d dentro do próprio CRC. É o mesmo número escrito em minúscula. Fora isso, um caractere trocado em qualquer posição quebra a conta e o aplicativo recusa o código.

Isso não é segurança. O CRC existe contra erro de leitura e de digitação — papel amassado, caractere perdido no copia e cola. Ele não existe contra gente. A conta é pública, está no manual, e quem gera um código novo simplesmente calcula o CRC novo junto. É o assunto da seção do golpe, mais abaixo, e lá isso está medido.

Estático, dinâmico e composto: três coisas diferentes

O que você desmontou acima é um QR estático: tudo que o pagamento precisa está escrito dentro dele. Ele pode ser impresso e ficar num balcão para sempre, e por isso ele é o mais comum em padaria, feira e vaquinha.

O dinâmico é outro bicho, e é aqui que quase toda explicação da internet erra. Ele não carrega os dados do pagamento — carrega um endereço. Este é o exemplo oficial dele:

IDNome no padrãoTamValor
00Payload Format Indicator201
01Point of Initiation Method212
2670
00GUI14br.gov.bcb.pix
25URL48pix.example.com/8b3da2f39a4140d1a91abd93113bd441
52Merchant Category Code40000
53Transaction Currency3986
58Country Code2BR
59Merchant Name13Fulano de Tal
60Merchant City8BRASILIA
62Additional Data Field Template7
05Reference Label3***
63CRC16464E4

Não tem campo de valor nenhum ali. O que tem é pix.example.com/8b3da2f39a4140d1a91abd93113bd441, e é o seu banco que vai buscar lá quanto você deve pagar e para quem, por HTTPS, depois de conferir se o domínio é de um participante autorizado. O manual é explícito ao ponto de dizer que, se alguém preencher valor e identificador num QR dinâmico, “seu conteúdo deve ser ignorado”.

Três consequências práticas que ninguém conta. Primeira: um QR dinâmico expira, porque a cobrança do outro lado expira — o desenho continua lindo e o pagamento não acontece mais. Segunda: ele precisa de internet na hora do pagamento, o que o estático não precisa. Terceira: como a URL é curta, o desenho dele costuma ser menos denso que o de um estático cheio de informação — e o manual diz que essa é uma das razões de existir, já que “um QR Code com muitas informações pode dificultar ou inviabilizar a decodificação”.

O terceiro tipo é o composto, que chegou com o Pix Automático: além do pagamento, ele carrega uma segunda URL com os parâmetros da recorrência, num campo da faixa 80–99. Os três exemplos que o manual publica dele passam pelo nosso leitor no build, junto com os outros.

O nome escrito dentro do QR é ignorado pelo seu banco

Esta é a parte que muda o que você faz na fila da padaria, e ela está numa nota de rodapé do Manual de Padrões, ao lado do exemplo do QR estático:

“O nome a apresentar ao pagador será necessariamente o nome retornado na consulta ao DICT. O MerchantName será ignorado pelo pagador.”

Manual de Padrões para Iniciação do Pix 2.9.0, nota 26 da seção 2.6.3. A nota 46, na seção do QR dinâmico, repete a regra.

Traduzindo: o campo 59, que na tabela lá em cima diz Fulano de Tal, é decoração. O nome que aparece na sua tela de confirmação vem do DICT, o diretório do Banco Central, consultado pela chave — quer dizer, vem do dono real da chave, não de quem imprimiu o cartaz.

Isso é ótimo e é péssimo ao mesmo tempo. É ótimo porque ninguém consegue fazer o seu banco escrever “PADARIA DO ZÉ” na tela usando uma chave que não é da padaria. É péssimo porque o contrário também vale: o QR pode dizer qualquer coisa, e nada no desenho denuncia isso. Toda recomendação de “confira se o QR não foi adulterado” está pedindo que você faça a única conferência que não funciona.

O golpe do adesivo, explicado pela aritmética

O golpe é conhecido: alguém cola um adesivo com outro QR por cima do QR verdadeiro, no balcão, no estacionamento, na mesa do restaurante. A pergunta que interessa é por que ele funciona tão bem, e a resposta está nos dois códigos abaixo. Montamos os dois aqui, no build.

O cartaz da loja — nome, cidade, valor e identificador do pedido idênticos nos dois:

00020126580014br.gov.bcb.pix01363b0f1c8a-6d2e-4a19-9f77-51c4be2a8d30520400005303986540537.905802BR5913PADARIA DO ZE6014BELO HORIZONTE62140510PEDIDO482163047C8F

O adesivo colado por cima:

00020126580014br.gov.bcb.pix01367e4a92d1-0c58-43bb-a6f2-9d81e70c4a55520400005303986540537.905802BR5913PADARIA DO ZE6014BELO HORIZONTE62140510PEDIDO48216304F3D1

Os dois passam na conferência do CRC. Os dois são BR Codes perfeitamente válidos. Eles diferem em 35 caracteres, e essas diferenças estão em dois lugares só: 31 dentro da chave — o único campo que decide para onde o dinheiro vai — e 4 nos dígitos do CRC, que o golpista refez junto porque a conta é pública. O nome continua o mesmo. A cidade continua a mesma. O valor continua o mesmo. E, como a seção anterior explicou, o nome que o seu banco vai mostrar não vem de nenhum dos dois: vem do DICT, ou seja, vem da conta do golpista.

Por isso a defesa que funciona é uma só, e é chata: ler o nome na tela de confirmação antes de apertar o botão. Não o desenho, não o adesivo, não o cartaz — o nome que o seu próprio aplicativo escreveu, que é a única informação da tela que não veio do papel. Se está pagando a padaria e aparece o nome de uma pessoa física desconhecida, ou uma empresa que não tem nada a ver, é ali que o golpe aparece.

A segunda defesa é para quem recebe: QR impresso e plastificado num balcão é um convite. Adesivo por cima de adesivo não deixa marca. O QR na tela de um sistema de vendas, gerado na hora, não tem esse problema — e um QR dinâmico, que vale uma vez, ainda torna o reaproveitamento inútil.

Se a sua chave é o CPF, o cartaz publica o seu CPF

A chave vai no QR em texto puro, do jeitinho que o DICT manda escrever: CPF com onze dígitos crus, CNPJ com quatorze posições, celular no formato internacional com +55, e-mail por extenso. Isso significa que qualquer pessoa que aponte a câmera para o seu QR — ou receba o seu copia e cola por WhatsApp — lê a sua chave inteira.

Um QR estático montado com chave de CPF traz, dentro dele, algo assim: 11546254439 (este é fictício, gerado pelo nosso gerador para o exemplo). Com chave de celular, publica o seu telefone. Com chave de e-mail, publica o seu e-mail — e aí é spam garantido, porque coletar chave de e-mail de vaquinha é trivial.

A chave aleatória resolve isso e não custa nada: ela não revela documento nem contato, você pode ter mais de uma, e pode apagar e criar outra quando quiser. É a escolha óbvia para qualquer chave que vá parar num cartaz, num post ou num grupo.

Por que um QR de Pix fica mais denso que o outro

A densidade do desenho é consequência direta do tamanho do texto. Como o tipo da chave muda o tamanho do texto, ele muda o desenho. Medimos: montamos o mesmo pagamento — mesmo nome, mesma cidade, mesmo valor, mesmo identificador — trocando só o tipo da chave, e geramos cada símbolo com o nosso próprio codificador no nível de correção M. As duas colunas do meio estão em caracteres.

Tipo de chaveChavePayloadVersãoMódulos
CPF11134849×49
CNPJ14137849×49
E-mail21144849×49
Celular14137849×49
Chave aleatória36159953×53

Da menor para a maior são 25 caracteres de diferença, o que aqui custou 4 módulos a mais de lado. Impresso no mesmo tamanho de papel, cada módulo fica menor — e módulo pequeno é exatamente o que faz a câmera ruim desistir.

Os 99 caracteres que a chave e a descrição dividem

Aqui está o limite que mais gera erro esquisito em quem gera QR por conta própria, e ele não é uma regra do Pix: é o tamanho do campo. O template inteiro do Pix cabe em 99 caracteres, porque o padrão reserva só dois dígitos para dizer o tamanho. Dentro dele entram, disputando o mesmo espaço, o nome do arranjo (que sozinho come 14), a chave, o texto livre que aparece para o pagador e o facilitador de saque, quando é um Pix Saque.

Daí sai o teto de 77 caracteres para a chave — que existe só quando ela é a única coisa lá dentro. Com descrição, sobra o que esta tabela mostra:

Tipo de chaveChaveSobra de descriçãoCom Pix Saque
CPF116250
CNPJ145947
E-mail215240
Celular145947
Chave aleatória363725

A conta é a mesma que o manual faz em prosa na seção 2.6.1, e ela é conferida no build contra o exemplo trabalhado de lá: com uma chave de 9 caracteres sobram 64 de texto livre, e 52 quando há Pix Saque. Se a nossa divergir da dele, esta página não sobe.

Os outros dois tetos que valem saber: o identificador da transação aceita 25 caracteres e só letras e algarismos — sem acento, sem espaço, sem traço, sem barra, o que derruba muito número de pedido copiado de sistema de vendas —, e a URL do QR dinâmico vai até 77 caracteres, contados sem o https:// na frente.

A pegadinha do acento, para quem gera QR por conta própria

O tamanho declarado em cada campo é contado em bytes, e a diferença aparece assim que entra um acento. O nome PADARIA DO SEBASTIÃO tem 20 caracteres para uma pessoa e 21 bytes em UTF-8 — 1 a mais. Quem escreve 5920 nesse campo produz um payload em que todo o resto entra deslocado, o CRC não fecha e o banco recusa o código sem dizer por quê.

É por isso que praticamente todo gerador de Pix tira acento do nome e da cidade — e é uma decisão barata, já que o campo do nome é ignorado de qualquer forma. Se você está implementando isso, o nosso leitor recusa os dois jeitos de errar, dizendo a posição: quando o corte cai no meio de um caractere e quando ele deixa um byte sobrando no fim.

Como ler o QR que está na sua frente

Sem instalar nada e sem site nenhum: no celular, aponte a câmera para o código e leia a prévia que aparece antes de tocar. Se for um Pix, vem a linha começando com 000201. Se vier um endereço de site que não é do seu banco, não é Pix — é outra coisa, e provavelmente é a coisa errada.

Com o copia e cola em mãos, dá para conferir os três pedaços que importam sem ferramenta nenhuma: procure br.gov.bcb.pix (é o que faz dele um Pix), leia o que vem logo depois de 01 e o tamanho dele (é a chave) e olhe se existe um 54 com um valor. O nome, repetindo, não vale nada.

E o teste que resolve na prática, para quem recebe: cole o seu copia e cola no gerador de QR Code e compare o desenho com o que está impresso no seu balcão. Diferente, alguém mexeu. Igual, está tudo certo — e essa é a única comparação de desenho que significa alguma coisa, porque você tem o original para comparar. O cliente na fila não tem.

O que esta página não mediu

Nenhum aplicativo de banco foi testado. Tudo que está escrito aqui sobre o que aparece na sua tela de confirmação é o que o Regulamento do Pix determina, com a citação ao lado, e não uma observação nossa. Não sabemos se todos cumprem, e um teste honesto disso exigiria contas em vários bancos e pagamentos reais.

Não medimos golpes. Não temos base de ocorrência, e não vamos citar número de fraude que a gente não consegue conferir na fonte. O que este artigo faz é explicar o mecanismo pelo qual o golpe do adesivo funciona, o que é uma afirmação sobre o formato — essa sim, verificável linha por linha.

O padrão EMV® original não foi lido. Ele está atrás de um aceite de termos no site da EMVCo. Tudo que este artigo afirma sobre o formato veio dos dois manuais brasileiros, que são públicos e estão linkados abaixo — e onde eles apenas referenciam o EMV®, a página não afirma nada.

Uma ambiguidade que não resolvemos: o padrão fala em “caracteres” ao definir o tamanho dos campos, e os seis payloads oficiais são todos ASCII, onde caractere e byte são a mesma coisa — então nenhum deles decide o caso do acento. Nosso leitor conta bytes, que é a leitura que recusa em voz alta em vez de ler o campo errado calada.

As fontes, todas lidas

Manual do BR Code, versão 2.0.1, de 31 de agosto de 2020 — Banco Central do Brasil. Define a estrutura, a tabela de campos da raiz e o CRC. O exemplo da seção 2.2, com três arranjos de pagamento no mesmo código, tem os 270 caracteres que o próprio manual anuncia, e é ele que prova que o Pix nem sempre está no campo 26.

Manual de Padrões para Iniciação do Pix, versão 2.9.0, de 5 de setembro de 2025 — parte integrante do Regulamento do Pix. Define o que o Pix põe dentro do BR Code, os três tipos de QR, a formatação das chaves do DICT e a regra do nome. É de onde saem as notas 26, 46 e 28 citadas acima.

Os seis payloads oficiais publicados nesses dois documentos — um do BR Code, um estático, um dinâmico e os três compostos — são lidos e reconferidos toda vez que este site é publicado. Se o nosso leitor divergir de qualquer um deles em um caractere, a página não sobe.

Em três linhas

O QR do Pix é um texto público e legível, com a chave do recebedor dentro. Os quatro dígitos do fim protegem contra erro de leitura, não contra gente. E o nome escrito lá dentro é ignorado pelo seu banco — o que aparece na sua tela vem do DICT, e conferir ESSE nome é a única defesa que funciona contra adesivo trocado.

Medições e conferências desta página refeitas no build, em 9 de agosto de 2026. Para ver o desenho do seu próprio código, o gerador daqui escreve o QR sem biblioteca de terceiros e sem passar o conteúdo por servidor nenhum.