QRIS

QRIS statis & dinamis (EMVCo + CRC16) · struktur payload terbaca · riwayat transaksi merchant

QRIS. Halaman ini membangun QR pembayaran sesuai EMVCo Merchant-Presented Mode — tag TLV, mata uang 360 (IDR), NMID merchant, dan penutup CRC16. Ubah data merchant atau nominal, QR langsung diperbarui. Tombol Simulasi pembayaran menambah baris transaksi masuk agar riwayat dan ringkasan ikut berubah.
Transaksi hari ini 0 0 berhasil
Volume Rp 0 total nilai transaksi berhasil
Estimasi MDR Rp 0 0,7% dari volume (contoh)
Settlement T+1 masuk rekening besok pagi

Pembangkit QRIS

QRIS Statis CRC16 —
QR kedaluwarsa — tekan Bangun ulang
KOPI NUSANTARA
JAKARTA · 5814
Nominal Nominal bebas
Berlaku berlaku terus
Payload EMVCo 0 karakter · tag TLV + CRC16
—

Struktur payload

dibaca ulang dari string QR — bukti payload bisa diparsing
Tag Arti Panjang Nilai

Riwayat transaksi QRIS

ID Waktu Penerbit Metode Nominal MDR Status
Belum ada transaksi.

Merchant

Aktif
NamaKOPI NUSANTARA
NMIDID1024351287941
KotaJAKARTA
Kriteria merchantUMI
AcquirerID.CO.QRIS.WWW

NMID, nama, dan kota diambil dari panel kiri lalu dimasukkan ke tag 51 dan 59–61 pada payload QR.

Cara kerja QRIS

  • 1. Merchant menerbitkan QR. Statis (tag 01 = 11) untuk nominal bebas, dinamis (tag 01 = 12) untuk sekali pakai + nominal pasti.
  • 2. Data merchant masuk tag 51. Domain acquirer, NMID, dan kriteria merchant (UMI/UKM/UKEA) ditulis berurutan sebagai TLV bersarang.
  • 3. Nominal & mata uang. Tag 53 = 360 (IDR); tag 54 hanya diisi pada QR dinamis.
  • 4. CRC16 menutup payload. Empat karakter terakhir dihitung dari seluruh payload — bila satu karakter berubah, CRC tidak lagi cocok.
  • 5. Aplikasi pembayar memindai. Penerbit meneruskan ke switching, lalu settlement T+1 ke rekening merchant.

Kode inti

// payload: TLV (tag + panjang + nilai) ala EMVCo
s += Qris.tlv("00", "01");          // versi payload
s += Qris.tlv("01", "12");          // 12 = QR sekali pakai
s += Qris.tlv("51",
  Qris.tlv("00", "ID.CO.QRIS.WWW") +
  Qris.tlv("02", "ID1024351287941") +
  Qris.tlv("03", "UMI"));
s += Qris.tlv("52", "5814");        // MCC
s += Qris.tlv("53", "360");         // IDR
s += Qris.tlv("54", "50000");       // nominal (dinamis)
s += Qris.tlv("58", "ID");
s += Qris.tlv("59", "KOPI NUSANTARA");
s += Qris.tlv("60", "JAKARTA");
s += "6304" + Qris.crc16(s);        // CRC16-CCITT

// baca ulang isi payload (untuk audit / log)
Qris.parse(s);   // → [{ tag: "51 · 02", arti: "NMID", … }]
Catatan. Nomor QR di halaman ini dibuat untuk demo antarmuka — bukan QRIS terdaftar. Untuk produksi, NMID dan domain acquirer harus berasal dari PJP (penyedia jasa pembayaran) yang bekerja sama.