merchantid.
staticToDynamicQris
54 (nominal transaksi), membalik tag 01 dari statis (11) ke dinamis (12), lalu menghitung ulang CRC. amount harus integer positif (rupiah penuh). Checksum sumber diverifikasi lebih dulu; payload dengan checksum invalid ditolak (QRIS_PARSE_ERROR) agar QR yang rusak atau disunting tidak dipancarkan ulang sebagai QR valid yang mengalihkan pembayaran.
parseEmv
<tag 2 digit><panjang 2 digit><nilai>). Panjang dihitung dalam byte UTF-8, bukan karakter JavaScript, sehingga nama merchant non-ASCII terparse benar. Template bersarang dipertahankan sebagai nilai mentah. Payload malformed melempar QRIS_PARSE_ERROR.
buildEmv
encodeTlv
QRIS_PARSE_ERROR) karena tidak bisa dinyatakan dengan panjang dua digit.
isValidQrisChecksum
false untuk payload lebih pendek dari 8 karakter.
crc16ccitt
input, dikembalikan sebagai 4 digit heksadesimal uppercase. Ini algoritma checksum yang dipakai standar QRIS.
QRIS_TAGS
Konstanta tag EMV yang dipakai library:AmountAllocator
baseAmount + offset), bukan offset saja: dengan jendela offset 999, dua base amount bisa menghasilkan nominal akhir sama (3500 + 1 dan 3499 + 2 sama-sama 3501). allocate mengembalikan offset terkecil di [1, maxOffset] yang nominal hasilnya belum diklaim; bila semua slot terpakai, melempar AMOUNT_POOL_EXHAUSTED. Nilai takenAmounts di luar jangkauan base amount diabaikan, jadi Anda bisa memasukkan seluruh active set tanpa memfilter.
CONFIG_INVALID bila maxOffset bukan integer positif. Lihat Konsep inti dan Model pembayaran.