QRpilot
← All guides
PAYMENTS GUIDE

VietQR payloads and CRC validation

Learn what QRpilot places in a VietQR code, what CRC validation proves, and what still must be checked in a banking app.

VietQR uses nested tag-length-value data based on EMV merchant-presented QR conventions. QRpilot assembles the supported fields and calculates the final CRC checksum in the browser.

Tag, length, and value

Each field contains a numeric identifier, the encoded length, and a value. Some values contain additional nested fields. This lets a banking application find the bank identifier, account number, transaction currency, amount, and transfer note without relying on visual text printed beside the code.

The length is based on encoded data rather than an arbitrary character count. This is particularly important for Vietnamese transfer notes, where accented characters can use more than one UTF-8 byte.

What the CRC checks

The checksum at the end of the payload helps a scanner detect accidental changes or corruption. QRpilot calculates CRC-16/CCITT-FALSE over the payload up to the checksum value. A matching CRC means the text is internally consistent; it does not prove that an account exists, belongs to the displayed person, or can receive money.

A banking application remains the authoritative confirmation step. The sender should inspect the recipient name and all transaction details shown by the bank before authorizing payment.

A safe test procedure

Use fictional or non-sensitive data while checking layout and scanning behavior. For a real account, scan in the official banking app, confirm the resolved recipient, verify the amount and note, and cancel before authorization if you are only testing.

  • Never infer ownership from an account number alone.
  • Do not publish account data without the owner’s permission.
  • Regenerate and retest a code after changing any field.
  • Treat a successful scan as parsing confirmation, not payment confirmation.