Dari foto KTP mentah menjadi data terverifikasi — arsitektur, kode, dan jebakan yang sering bikin onboarding gagal.
Verifikasi identitas adalah gerbang pertama produk fintech, marketplace, atau layanan sewa. Pengguna memotret KTP-nya, dan dalam hitungan detik sistem Anda harus tahu: siapa orang ini, apakah datanya terbaca dengan yakin, dan apakah aman untuk dilanjutkan. Artikel ini membedah alur itu sampai ke kodenya.
Bentuk alurnya
Alur e-KYC yang sehat punya empat tahap, dan tiga di antaranya terjadi di backend Anda — bukan di ponsel pengguna:
- •Klien mengunggah foto KTP ke backend Anda (bukan langsung ke API pihak ketiga).
- •Backend memanggil OCR untuk mengubah gambar menjadi field terstruktur.
- •Backend memvalidasi hasilnya: format NIK, kelengkapan field, tingkat keyakinan.
- •Data disimpan; kasus meragukan masuk antrean review manual.
Memanggil OCR KTP
Endpoint menerima gambar sebagai multipart atau base64, dan mengembalikan JSON terstruktur beserta tingkat keyakinan:
curl -X POST "https://v1.api.my.id/ocr/ktp" \ -H "Authorization: Bearer $API_KEY" \ -F "image=@ktp.jpg"
Responsnya berisi setiap field yang tercetak di kartu, plus sebuah field confidence yang akan sangat menentukan langkah berikutnya:
{
"status": "success",
"points_charged": 150,
"data": {
"nik": "3204xxxxxxxxxxxx",
"nama": "BUDI SANTOSO",
"tempat_lahir": "BANDUNG",
"tanggal_lahir": "17-08-1990",
"jenis_kelamin": "LAKI-LAKI",
"alamat": "JL. MERDEKA NO. 1",
"kecamatan": "COBLONG",
"confidence": "high"
}
}Jangan percaya hasil OCR mentah-mentah
Ini bagian yang paling sering dilewatkan. OCR mengubah gambar menjadi teks; ia tidak menjamin teks itu masuk akal. Foto buram, pantulan cahaya, atau kartu yang tertekuk bisa menghasilkan NIK dengan digit tertukar. Validasi selalu diperlukan.
NIK punya struktur yang bisa dicek tanpa memanggil layanan apa pun: 16 digit, enam digit pertama adalah kode wilayah (provinsi, kabupaten, kecamatan), enam berikutnya tanggal lahir — dengan tambahan 40 pada tanggal untuk perempuan.
function nikMasukAkal(nik, tanggalLahir, jenisKelamin) {
if (!/^\d{16}$/.test(nik)) return false;
let hari = parseInt(nik.slice(6, 8), 10);
const perempuan = hari > 40;
if (perempuan) hari -= 40;
const bulan = nik.slice(8, 10);
const [d, m] = tanggalLahir.split('-'); // "17-08-1990"
// tanggal lahir di NIK harus cocok dengan yang tercetak
if (hari !== parseInt(d, 10) || bulan !== m) return false;
// jenis kelamin harus konsisten dengan aturan +40
return perempuan === (jenisKelamin === 'PEREMPUAN');
}Cek silang ini menangkap kesalahan baca yang paling berbahaya: satu digit tertukar di NIK hampir pasti membuat tanggal lahirnya tidak lagi cocok dengan yang tercetak di kartu.
Cocokkan alamat dengan data wilayah
Langkah berikutnya menaikkan kualitas data secara signifikan: pastikan kecamatan yang terbaca benar-benar ada. API Wilayah bisa memvalidasi sekaligus memberi Anda kode resmi untuk disimpan di database — jauh lebih berguna daripada menyimpan string bebas.
curl "https://v1.api.my.id/wilayah/search?q=coblong" \
-H "Authorization: Bearer $API_KEY"
# → { "code": "3273090", "name": "COBLONG", "level": "district" }Simpan 3273090, bukan "Coblong". Kode itu stabil, bisa di-join, dan menyelamatkan Anda dari tiga variasi ejaan yang sama.
Aturan keputusan
Gabungkan sinyal-sinyal di atas menjadi satu keputusan yang jelas — dan yang terpenting, siapkan jalur manusia untuk kasus abu-abu:
- •Lolos otomatis — confidence
high, NIK konsisten, kecamatan valid. - •Review manual — confidence
medium, atau ada satu cek yang gagal. - •Minta foto ulang — confidence
low, atau field wajib bernilai null.
Biaya dan kegagalan
Satu scan KTP memotong 150 poin (setara Rp 150), dan hanya saat berhasil. Jika layanan upstream gagal, poin dikembalikan otomatis — Anda tidak membayar untuk error. Saldo kurang menghasilkan 402 yang menyebutkan berapa yang dibutuhkan dan berapa sisa Anda, sehingga mudah dijadikan pemicu top-up otomatis.
Terakhir: perlakukan foto KTP sebagai data paling sensitif di sistem Anda. Jangan simpan gambar mentahnya lebih lama dari yang diperlukan untuk proses verifikasi.
Siap mencoba?
Buat akun gratis dan dapatkan API key — 5.000 hits gratis per bulan, dan dua endpoint yang tak butuh key sama sekali.