Dokumentasi Arsitektur & Spesifikasi Teknis
Dokumen teknis resmi mengenai arsitektur sistem, bahasa pemrograman, spesifikasi algoritma CRC16, penguraian TLV EMVCo, dan panduan deployment platform **QRIS Converter**.
Gambaran Umum Sistem (Executive Overview)
QRIS Converter adalah aplikasi web modern berkinerja tinggi yang dirancang untuk mengonversi kode QRIS Statis (tanpa nominal) milik merchant menjadi QRIS Dinamis (dengan nominal tagihan rupiah otomatis).
Mencegah kesalahan ketik jumlah pembayaran oleh pembeli saat transaksi di kasir.
Menghemat biaya merchant tanpa perlu langganan API gateway atau menyewa mesin EDC mahal.
Seluruh proses dilakukan di browser lokal. Data toko dijamin 100% aman tanpa server upload.
Bahasa Pemrograman & Teknologi (Tech Stack)
| Komponen | Teknologi | Peran & Alasan Pemilihan |
|---|---|---|
| Core Engine | JavaScript (ES6+) | Pengolahan manipulasi string TLV, kalkulasi bitwise CRC-16, dan logika state reaktif. |
| Struktur UI | HTML5 Semantik | Struktur halaman yang rapi, aksesibel, dan teroptimasi penuh untuk SEO Google. |
| Reaktivitas UI | Alpine.js v3 | Framework reaktif super ringan (~15KB) tanpa butuh Virtual DOM berat atau bundler React/Vue. |
| Styling System | Tailwind CSS v4 & CSS3 | Design system tema gelap (*Dark Mode*), tata letak responsif, glassmorphism, dan mikro-animasi. |
| Bundler & Test | Esbuild & Node Test | Kompilasi super cepat (< 15ms) dan pengujian unit otomatis (`npm test`) untuk 8 sub-test. |
Alur Kerja Aplikasi (System Workflow)
Langkah-demi-Langkah Pengolahan Data:
Input QRIS Merchant (`/login`)
Merchant mengunggah gambar QRIS (dibaca via parser piksel `jsQR`) atau menempelkan payload teks QRIS Statis.
Verifikasi Struktur EMVCo
Engine mengurai Tag 00-63, mengekstrak Nama Toko, Kota, NMID, dan memvalidasi kode checksum CRC-16 asli.
Input Nominal Tagihan (`/dashboard`)
Kasir menentukan nominal rupiah pembayaran (misal: Rp 75.000). Engine menginjeksi Tag 54 dan merubah Tag 01 ke `12` (Dinamis).
Kalkulasi Ulang Checksum CRC-16 & Render QR
Engine menghitung ulang checksum CRC-16 CCITT-FALSE (`0x1021`) dan merender gambar QR Code yang siap dipindai oleh semua aplikasi m-Banking/e-Wallet.
Spesifikasi EMVCo, Formula CRC16 & Pipeline Transformasi
Pipeline Transformasi: Gambar Statis ➔ Payload ➔ Modifikasi Nominal ➔ Gambar Dinamis Baru
Penjelasan rinci mekanisme pengubahan gambar barcode statis menjadi string data, modifikasi tag nominal, hingga perenderan kembali gambar QRIS baru.
Gambar ➔ Payload Teks
-
1. Reading File
Berkas gambar QRIS (PNG/JPG) dibaca peramban via
FileReader.readAsDataURL(). - 2. Canvas Rendering Gambar digambar ke HTML5 Offscreen Canvas tersembunyi.
-
3. Buffer Pixel RGBA
Mengambil array piksel RGBA via
ctx.getImageData(). -
4. QR Matrix Decoding
Library
jsQRmemindai matriks barcode, menghasilkan string mentah EMVCo (000201...).
Pemecah TLV & Modifikasi
-
1. Pointer TLV Parser
Loop cursor memecah string berdasarkan pola
[Tag 2d][Length 2d][Value]. -
2. Mode Statis ➔ Dinamis
Nilai
Tag 01diubah dari11(Statis) ke12(Dinamis). -
3. Injeksi Tag Nominal (54)
Menyisipkan
Tag 54(misal:540550000untuk Rp 50.000). -
4. Rekalkulasi CRC16
Menghapus CRC lama, hitung ulang CRC-16 CCITT-FALSE (
0x1021), dan tempel 4-hex digit baru (E65F).
Payload Teks ➔ Gambar Baru
-
1. Matriks QR Generation
Payload dinamis baru dihitung oleh generator
QRCode.js. - 2. Canvas Rendering Gambar QR Code beresolusi tinggi digambar pada canvas HTML5.
-
3. PNG Data Export
Canvas diekspor menjadi Data URL PNG (
canvas.toDataURL()). - 4. Output Siap Scan Gambar QRIS Dinamis siap diunduh PNG atau langsung dipindai oleh HP pembeli.
QRIS Dinamis: 000201010212...53033605405500006304E65F
Format data QRIS mengikuti standar EMVCo QR Code Specification dengan pola [Tag 2-digit][Length 2-digit][Value].
010212 (Point of Initiation = 12 Dynamic)
540550000 (Transaction Amount = Rp 50.000)
5802ID (Country Code = ID)
6304E65F (CRC-16 Checksum = E65F)
Rumus Algoritma CRC-16/CCITT-FALSE
Algoritma kalkulasi keamanan QRIS menggunakan bitwise polynomial 0x1021 dengan Initial Value 0xFFFF. String dihitung dari karakter pertama (Tag 00) hingga string 6304 sebelum nilai 4-digit CRC.
Keamanan, SEO & Dynamic Routing (Spesifikasi Mendalam)
5.1 Arsitektur Keamanan Client-Side & Zero-Trust Privacy
Platform QRIS Converter menerapkan model keamanan Zero-Backend Storage & Zero-Trust Privacy. Seluruh proses sensitif penguraian payload QRIS dan kalkulasi CRC-16 dilakukan 100% di browser pengguna tanpa perantara server backend.
Tidak ada database server tempat menyimpan nama merchant, NMID, atau nominal transaksi. Bebas risiko kebocoran data (*zero data leak*).
Dekode piksel QRIS (via jsQR) dan generasi QR Code (via qrcode.js) dieksekusi di memori browser lokal (window.memory).
Data sesi diisolasi pada localStorage dan sessionStorage perangkat merchant saja.
5.2 Strategi SEO Perusahaan & Schema Rich Snippets
Website dioptimalkan sepenuhnya untuk indeksasi mesin pencari Google, Bing, dan Yandex menggunakan standar meta tag modern dan Structured Data JSON-LD (Schema.org).
Memberi tahu bot Google bahwa web ini adalah BusinessApplication gratis (Price IDR 0.00) dengan Aggregate Rating 4.9, sehingga Google menampilkan rating bintang pada hasil pencarian.
Menginjeksi struktur Tanya-Jawab baku mengenai keabsahan QRIS dinamis dan kompatibilitas m-Banking (BCA, Mandiri, BRI, BNI, GoPay, OVO, DANA) agar tampil di SERP Google.
Meta tag og:title, og:image (1200x630px), dan twitter:card menjamin tampilan pratinjau yang profesional saat link dibagikan di WhatsApp, Telegram, FB, dan Twitter.
5.3 Dynamic Origin Auto-Detector & Cloudflare Variables
Sistem pengenal domain aplikasi bekerja menggunakan skema hierarki prioritas otomatis:
Dukungan Cloudflare Variables & Secrets:
SITE_URLatauPUBLIC_SITE_URL: Mengatur nama domain utama kustom.GOOGLE_SITE_VERIFICATION: Otomatis menginjeksi meta tag verifikasi Google Search Console.BING_SITE_VERIFICATION/MSVALIDATE_01: Otomatis menginjeksi meta tag verifikasi Bing Webmaster Tools.YANDEX_SITE_VERIFICATION: Otomatis menginjeksi meta tag verifikasi Yandex Webmaster.
5.4 Routing Bersih (Clean URLs) & Navigation Offset
Menggunakan HTML5 History API (`history.replaceState`) untuk secara otomatis menghapus ekstensi .html dan simbol hash # pada address bar peramban, memberikan tampilan alamat web tingkat perusahaan (/, /login, /dashboard, /docs).
Native Clean URLs Engine (Automatic HTML Mapping)
File
vercel.json (cleanUrls: true)
File
.htaccess (RewriteEngine)
Panduan Deployment (Cloudflare Pages)
Aplikasi ini dirancang untuk di-deploy secara instan ke platform Cloudflare Pages (`*.pages.dev`):