# The PIX QR code format: EMV BR Code explained

> A PIX QR code is an EMVCo BR Code: tag-length-value fields ending in a CRC16/CCITT-FALSE checksum. The same string is also copia e cola, which people paste when they cannot scan — always print it alongside the code.

Source: https://useqr.app/docs/payments/pix-qr-code-format · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The payload

```
00020126360014BR.GOV.BCB.PIX0114+55119123456785204000053039865802BR5913Cafe Central6009Sao Paulo62070503***6304A13F
```

Every field is `ID` (2 digits) + `LENGTH` (2 digits) + `VALUE`.

| ID | Meaning | Example |
|---|---|---|
| `00` | Payload format indicator | `01` |
| `01` | Point of initiation | `11` static, `12` dynamic |
| `26` | Merchant account information (nested) | |
| `26.00` | GUI | `BR.GOV.BCB.PIX` |
| `26.01` | PIX key | `+5511912345678` |
| `52` | Merchant category code | `0000` |
| `53` | Currency (ISO 4217) | `986` for BRL |
| `54` | Amount | optional |
| `58` | Country | `BR` |
| `59` | Merchant name | max 25 ASCII chars |
| `60` | Merchant city | max 15 ASCII chars |
| `62` | Additional data (holds `txid`) | |
| `63` | CRC16 | 4 uppercase hex digits |

## The CRC16 is where hand-built codes fail

Field `63` is a **CRC16/CCITT-FALSE** over the entire string *including* the literal `6304`
prefix, computed as if the four checksum characters were absent.

- Polynomial `0x1021`
- Initial value `0xFFFF`
- No final XOR
- Output as four uppercase hex digits

One wrong bit and every Brazilian banking app rejects the code outright. There is no partial
success and no error message that tells you why.

## ASCII only, and lengths matter

Merchant name and city must be transliterated to ASCII and truncated — 25 and 15 characters
respectively. `São Paulo` becomes `Sao Paulo`.

This is not cosmetic. A multi-byte UTF-8 character makes the byte length differ from the
character count, which corrupts the length prefix, which corrupts the CRC, which breaks
everything.

## Copia e cola

The full BR Code string **is** copia e cola. Print or display it as text next to the code.
A customer whose camera struggles pastes it into their banking app instead, and the payment
completes. It is the highest-value fallback in any payment QR deployment and costs nothing.

## Static vs dynamic

- **Static** (`01` = `11`): the key and optionally an amount are in the string. `txid` is
  `***`. Print it and use it forever.
- **Dynamic** (`01` = `12`): field `26.25` carries a URL that your PSP resolves to an amount
  and expiry. Requires a bank integration; the code alone is not enough.

## FAQ

### Why do banking apps reject my PIX QR code?
Almost always an incorrect CRC16 checksum, or a non-ASCII character in the merchant name or city that broke the field-length counting and therefore the checksum.

### What is copia e cola?
The same BR Code string as plain text. Customers paste it into their banking app instead of scanning. Always print it next to the code.

### What CRC does PIX use?
CRC16/CCITT-FALSE: polynomial 0x1021, initial value 0xFFFF, no final XOR, computed over the whole string including the literal 6304 field prefix, output as four uppercase hex digits.

### How long can the merchant name be?
25 ASCII characters, and the city 15. Longer values must be truncated, and non-ASCII characters must be transliterated first.

## Try it

- https://useqr.app/pix
- https://useqr.app/validate
