Format checksum yang dipakai di QRIS
Checksum pada QRIS adalah pada 4 hexdigit terakhir.
Misalkan untuk kode QRIS berikut:
```00020101021126660014ID.LINKAJA.WWW011893600911000093000502151912131509300050303UME51440014ID.CO.QRIS.WWW0215ID20190139612790303UME5204839853033605802ID5924Infak Sinergi Foundation6007BANDUNG61054017362070703A01630458E0```
checksum-nya adalah `58E0`.
Ada banyak artikel online yang menjelaskan struktur kode QR di atas, tapi saya masih belum menemukan cara meng-generate checksumnya. Setelah saya telusuri lewat [crccalc](https://crccalc.com/?crc=00020101021126660014ID.LINKAJA.WWW011893600911000093000502151912131509300050303UME51440014ID.CO.QRIS.WWW0215ID20190139612790303UME5204839853033605802ID5924Infak%20Sinergi%20Foundation6007BANDUNG61054017362070703A016304&method=CRC-16&datatype=ascii&outtype=hex), terlihat bahwa format checksumnya adalah CRC-16/3740. Sehingga, menggunakan modul [crc](https://pypi.org/project/crc/) Python, berikut adalah contoh cara generate/verify checksumnya.
```
>>> data, checksum = qr_code[:-4], qr_code[-4:]
>>> hex(crc.Calculator(Crc16.IBM_3740).checksum(data))[:2]
KeyboardInterrupt
>>> data
b'00020101021126660014ID.LINKAJA.WWW011893600911000093000502151912131509300050303UME51440014ID.CO.QRIS.WWW0215ID20190139612790303UME5204839853033605802ID5924Infak Sinergi Foundation6007BANDUNG61054017362070703A016304'
>>> checksum
b'58E0'
>>> hex(crc.Calculator(Crc16.IBM_3740).checksum(data))[2:].upper().encode()
b'58E0'
```
UPDATE: saya menemukan beberapa library untuk parse dan modify QRIS, [pyqris](https://github.com/krypton-byte/pyqris/) yang sepertinya hanya binding Python dari [qris Rust](https://crates.io/crates/qris) dan dibuat orang yang sama.
Saya jadi ingin kapan-kapan buat library pure-Python untuk membaca dan memodifikasi kode QR. Seharusnya tidak ribet. Yang ngeri adalah kalau ada orang yang modify QRIS untuk ganti nama merchant-nya sehingga lebih tidak mencurigakan kalau dipakai untuk kejahatan :')
Ternyata spesifikasi QRIS ini mengikuti [spesifikasi dari EMVCo](https://www.w3.org/2020/Talks/emvco-qr-20201021.pdf), di web resminya sepertinya bisa didownload juga [PDF spesifikasinya](https://www.emvco.com/specifications/?tax%5Bspecifications_categories%5D%5B32%5D%5B%5D=81). Saya juga nemu lebih banyak opsi parser ketika mencari "emvco qr parser", misalnya [mvallim/emv-qrcode](https://github.com/mvallim/emv-qrcode).
UPDATE: I made [my own EMVCo QR Code encoder/decoder library](https://codeberg.org/fj/pykeris)
Created: 2025-11-17 08:16:37, Updated: 2025-11-20 10:37:03, ID: f9eb654d-6169-400a-87b3-e8ff609017ed