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.
| ID | Nome no padrão | Tam | Valor | O que é |
|---|---|---|---|---|
| 00 | Payload Format Indicator | 2 | 01 | A versão do formato. Vale “01” desde 2020 e nunca mudou. |
| 26 | — | 58 | — | O arranjo de pagamento. Aqui dentro é que mora o Pix. |
| ↳ 00 | GUI | 14 | br.gov.bcb.pix | O nome do arranjo. É este campo que diz “isto é um Pix”. |
| ↳ 01 | Chave Pix | 36 | 123e4567-e12b-12d1-a456-426655440000 | A chave que recebe o dinheiro. É o único campo que decide para onde ele vai. |
| 52 | Merchant Category Code | 4 | 0000 | O ramo do estabelecimento, no código do padrão. “0000” é “não informado”. |
| 53 | Transaction Currency | 3 | 986 | A moeda, no código da ISO 4217. “986” é o real. |
| 58 | Country Code | 2 | BR | O país, no código da ISO 3166-1. Sempre “BR”. |
| 59 | Merchant Name | 13 | Fulano de Tal | O nome do recebedor — e é o campo que o seu banco ignora. |
| 60 | Merchant City | 8 | BRASILIA | A cidade do recebedor. Também é enfeite: ninguém confere. |
| 62 | Additional Data Field Template | 7 | — | Os dados adicionais. Só carrega o identificador da transação. |
| ↳ 05 | Reference Label | 3 | *** | O identificador para o recebedor conciliar o pagamento. “***” significa “não usei”. |
| 63 | CRC16 | 4 | 1D3D | A 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:
| ID | Nome no padrão | Tam | Valor |
|---|---|---|---|
| 00 | Payload Format Indicator | 2 | 01 |
| 01 | Point of Initiation Method | 2 | 12 |
| 26 | — | 70 | — |
| ↳ 00 | GUI | 14 | br.gov.bcb.pix |
| ↳ 25 | URL | 48 | pix.example.com/8b3da2f39a4140d1a91abd93113bd441 |
| 52 | Merchant Category Code | 4 | 0000 |
| 53 | Transaction Currency | 3 | 986 |
| 58 | Country Code | 2 | BR |
| 59 | Merchant Name | 13 | Fulano de Tal |
| 60 | Merchant City | 8 | BRASILIA |
| 62 | Additional Data Field Template | 7 | — |
| ↳ 05 | Reference Label | 3 | *** |
| 63 | CRC16 | 4 | 64E4 |
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 chave | Chave | Payload | Versão | Módulos |
|---|---|---|---|---|
| CPF | 11 | 134 | 8 | 49×49 |
| CNPJ | 14 | 137 | 8 | 49×49 |
| 21 | 144 | 8 | 49×49 | |
| Celular | 14 | 137 | 8 | 49×49 |
| Chave aleatória | 36 | 159 | 9 | 53×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 chave | Chave | Sobra de descrição | Com Pix Saque |
|---|---|---|---|
| CPF | 11 | 62 | 50 |
| CNPJ | 14 | 59 | 47 |
| 21 | 52 | 40 | |
| Celular | 14 | 59 | 47 |
| Chave aleatória | 36 | 37 | 25 |
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.