Search Tools

Search and navigate to any tool quickly

SEA Payment QR Decoder — QRIS, PromptPay, PayNow, DuitNow, VietQR

Decode QRIS, PromptPay, PayNow, SGQR, DuitNow, and VietQR merchant QR payloads — auto-detect the rail, resolve every EMVCo field, and validate or fix the CRC, 100% in your browser.

Payment QR payload
Paste the raw EMVCo text from a merchant QR (starts with 000201…), or load an example.

Paste a payload above, or try a rail example.

Decoding, CRC computation, and rebuilding run entirely in your browser — no payment data is uploaded. This implements the public EMVCo spec and per-rail identifiers; it is not an official validator and does not check merchant registration or live status.
About

About SEA Payment QR Decoder — QRIS, PromptPay, PayNow, DuitNow, VietQR

Southeast Asia's payment rails — QRIS (Indonesia), PromptPay (Thailand), PayNow and SGQR (Singapore), DuitNow (Malaysia), and VietQR (Vietnam) — all encode their merchant QR codes with the same EMVCo Merchant-Presented Mode format: a string of tag-length-value (TLV) data objects. This tool parses that string into a labelled tree, so you can see exactly what a QR contains: payload format, static vs dynamic, merchant name and city, transaction amount, currency and country, plus the rail-specific merchant account fields hidden inside templates 26–51.

It auto-detects the rail by reading the Globally Unique Identifier (GUID) or Application Identifier (AID) in sub-tag 00 of each merchant account template — for example ID.CO.QRIS.WWW for QRIS, A000000677010111 for PromptPay, SG.PAYNOW for PayNow, A0000006150001 for DuitNow, and A000000727 (NAPAS) for VietQR — then applies the correct field labels for that rail, including VietQR's nested beneficiary-organization block. Currency numbers are resolved to ISO 4217 codes and country to ISO 3166.

The CRC (tag 63) is a CRC-16/CCITT-FALSE checksum over the whole payload. This tool recomputes it to tell you whether a QR is intact, and can repair a broken or truncated CRC. You can also change the transaction amount — it re-serializes the TLV, flips the static/dynamic flag, and appends a fresh CRC, giving you a valid payload string back. Everything runs locally in your browser; no payment data is ever sent to a server.

How to use SEA Payment QR Decoder — QRIS, PromptPay, PayNow, DuitNow, VietQR

  1. Paste the QR payload

    Copy the raw text encoded in a merchant payment QR (starts with 000201...) and paste it in, or load one of the rail examples.

  2. Read the decoded fields

    The rail is detected automatically and every TLV tag is expanded with a human-readable label — merchant, amount, currency, country, and rail-specific account fields.

  3. Check the CRC

    The tag-63 checksum is recomputed and compared. A valid badge means the QR is intact; an invalid one flags corruption or truncation.

  4. Fix or edit

    Repair a broken CRC, or change the transaction amount to get a fresh, valid payload string you can copy.

Frequently asked questions