Paspor yang zona baca mesinnya lolos semua check digit terasa bisa dipercaya. Hitungannya cocok, validator mengembalikan true lima kali, dan alur onboarding berlanjut. Ada baiknya memahami dengan tepat apa arti true itu, karena janjinya lebih kecil daripada kelihatannya.

Panduan ini ditujukan untuk developer yang membangun alur KYC dan onboarding. Panduan ini memilah pemeriksaan screening yang umum menjadi apa yang ditangkap check digit MRZ, apa yang tidak bisa ditangkapnya, dan pemeriksaan lain mana yang menutup setiap celah. Setiap zona di bawah adalah spesimen milik ICAO sendiri, Anna Maria Eriksson dari "Utopia", atau variannya yang dibuat khusus untuk tulisan ini. Tidak ada dokumen asli yang muncul.

Ini adalah blog doc.cheap, API OCR Paspor dan Kartu Identitas. Tidak ada bagian di bawah yang membutuhkannya.

Untuk apa digit-digit itu

MRZ adalah blok huruf kapital, angka, dan karakter pengisi < di bagian bawah halaman foto paspor atau di sisi belakang kartu identitas. ICAO Doc 9303 memberinya check digit: masing-masing satu untuk nomor dokumen, tanggal lahir, dan tanggal kedaluwarsa, satu untuk nomor pribadi opsional pada paspor, dan satu digit gabungan yang mencakup sebagian besar baris bawah.

Setiap digit adalah jumlah berbobot. Setiap karakter diubah menjadi angka (0–9 bernilai dirinya sendiri, A = 10 sampai Z = 35, < = 0), angka-angka itu dikalikan dengan bobot berulang 7, 3, 1, dan hasil jumlahnya modulo 10 adalah digitnya. Cara kerja check digit MRZ menjelaskannya langkah demi langkah dengan validator yang bisa Anda salin.

Digit-digit ini dirancang untuk menangkap kesalahan baca. Digit ini tidak pernah dimaksudkan untuk mendeteksi penipuan, dan semua yang dibahas di bawah berangkat dari situ.

Apa yang ditangkap check digit

Satu digit yang salah. Karena 7, 3, dan 1 tidak punya faktor persekutuan dengan 10, mengganti satu digit dalam sebuah field dengan digit lain selalu mengubah jumlah modulo 10. Angka 3 terbaca sebagai 8, angka 5 terbaca sebagai 6: digit field tidak lagi cocok, begitu juga digit gabungan.

Sebagian besar pertukaran dua karakter bersebelahan. Jika dua karakter yang bersebelahan bertukar tempat, jumlahnya berubah sebesar selisih keduanya dikali selisih bobotnya (4, 2, atau 6). Hasil itu kelipatan 10 hanya jika kedua nilai berselisih kelipatan 5. Jadi 98 yang diketik 89 tertangkap, sedangkan 16 yang diketik 61 lolos, begitu juga 05 yang diketik 50.

Kerusakan, pantulan cahaya, dan pengetikan ulang. Di sinilah digit-digit ini benar-benar berguna. Lipatan yang melintasi satu karakter, pantulan pada laminasi, seseorang yang mengetik ulang zona secara manual: hal-hal inilah penyebab sebagian besar data MRZ yang buruk, dan digit yang gagal adalah sinyal murah bahwa sebuah field salah dibaca. Respons yang tepat adalah foto baru, bukan penolakan.

Di mana hitungannya buta

Digit-digit ini punya celah bahkan untuk kesalahan yang jujur, dan alur screening sebaiknya mengetahuinya.

Huruf yang terbaca sebagai karakter dengan nilai berselisih 10, 20, atau 30. Ambil nomor dokumen spesimen L898902C3, yang check digit-nya 6. Ganti C (nilai 12) dengan 2 (nilai 2): jumlahnya turun 10 × 3 = 30, dari 316 menjadi 286, dan digitnya tetap 6. Digit gabungan, yang mencakup karakter yang sama dengan bobot yang sama, juga tetap lolos. Pasangan seperti B dan 1, atau C dan 2, bisa saling menggantikan tanpa ketahuan.

Field yang tidak dicakup digit apa pun. Nama, negara penerbit, kewarganegaraan, dan jenis kelamin berada di luar semua digit field, dan digit gabungan juga melewatkan kewarganegaraan dan jenis kelamin. Nama yang salah dibaca tidak menimbulkan tanda apa pun; hanya perbandingan dengan halaman cetak yang bisa memperlihatkannya.

Apa yang sama sekali tidak bisa ditangkapnya

Semua yang ada di bagian ini lolos check digit MRZ, memang dari sananya.

Dokumen palsu dengan zona yang konsisten secara internal. Algoritmanya publik dan cukup ditulis dalam dua puluh baris kode. Siapa pun yang membuat dokumen palsu menghitung digitnya dengan benar, karena digit yang salah adalah satu-satunya kesalahan yang ditangkap setiap pembaca secara cuma-cuma. Zona yang lolos berarti zona itu dibaca dengan benar. Zona itu tidak mengatakan apa pun tentang keaslian dokumennya.

Data yang disalin dari orang sungguhan. Zona yang disusun dari nama, tanggal lahir, dan nomor dokumen asli milik orang lain punya digit yang valid, karena datanya asli. Apakah orang di depan kamera adalah orang tersebut merupakan pertanyaan lain: pencocokan wajah dengan foto dokumen, pemeriksaan liveness, atau pengecekan ke daftar dokumen hilang dan dicuri milik penerbit jika Anda punya akses ke sana.

Dokumen yang sudah kedaluwarsa. Tanggal kedaluwarsa 120415 lolos check digit-nya, dan itu adalah 15 April 2012. Kedaluwarsa adalah aturan tentang tanggal, bukan checksum: bandingkan tanggalnya dengan hari ini. Ingat bahwa YYMMDD tidak menyimpan abad, jadi tentukan dari konteks; format tanggal YYMMDD menjelaskan caranya. Kalkulator check digit MRZ di situs ini menandai tanggal kedaluwarsa yang sudah lewat sebagai kedaluwarsa di samping digitnya, sehingga Anda bisa melihat kedua jawaban berdampingan.

Foto yang diganti. MRZ tidak membawa gambar maupun hash gambar. Foto yang ditukar di halaman data membiarkan zona tetap utuh.

Chip yang dikloning atau diubah. Pada paspor ber-chip, grup data ditandatangani oleh negara penerbit, dan memverifikasi tanda tangan itu (Passive Authentication, ICAO Doc 9303 Bagian 11) adalah cara mengetahui bahwa data berasal dari penerbit. Itu memerlukan pembacaan NFC dan sertifikat penerbit. Foto halaman, sebagus apa pun, tidak bisa menjawabnya. MRZ hanya menyediakan kunci akses untuk membuka chip.

Satu pemeriksaan yang sering dilewati: zona dibandingkan dengan halaman

Sebuah dokumen menyebutkan hampir semua hal dua kali: sekali di MRZ dan sekali di zona inspeksi visual (VIZ), yaitu halaman cetak yang dibaca manusia. Keduanya dibuat bersamaan oleh satu penerbit, sehingga pada dokumen asli yang tidak rusak keduanya sama.

Karena itu ketidakcocokan lebih menarik daripada digit yang gagal. Digit yang gagal biasanya berarti fotonya buruk. Digit yang lolos di samping nama keluarga, tanggal lahir, atau nomor dokumen tercetak yang menyebut hal lain berarti salah satu sisi salah dibaca atau diubah setelah dicetak. Apa pun penyebabnya, dokumen itu perlu dilihat oleh manusia.

Perbandingan ini harus dilakukan dengan sengaja. Baca kedua zona, normalisasi nilai tercetak (tanggal ke bentuk yang sama, nama disederhanakan menjadi huruf kapital saja), lalu bandingkan field demi field. Perhitungkan transliterasi: Müller yang tercetak bisa menjadi MUELLER atau MULLER di zona, tergantung penerbitnya. Halaman format MRZ menunjukkan field apa saja yang dimuat setiap format, dan dengan demikian field mana yang bisa dibandingkan.

Urutan screening yang bisa diandalkan

  1. Bentuk. Jumlah dan panjang baris menentukan TD1, TD2, atau TD3. Bentuk yang salah berarti hasil baca yang buruk.
  2. Check digit. Kegagalan berarti foto ulang, bukan penolakan.
  3. Zona dibandingkan dengan halaman. Ketidakcocokan dengan digit yang lolos diteruskan ke manusia.
  4. Tanggal. Kedaluwarsa dibandingkan dengan hari ini; tanggal lahir dibandingkan dengan aturan usia Anda.
  5. Identitas. Pencocokan wajah dan liveness terhadap foto dokumen.
  6. Keaslian. Verifikasi chip melalui NFC, atau fitur keamanan fisik yang diperiksa oleh layanan yang dibuat untuk itu.

Langkah 1 sampai 4 murah dan bisa dijalankan pada gambar apa pun. Langkah 5 dan 6 adalah produk tersendiri, dan sebanyak apa pun hitungan MRZ tidak bisa menggantikannya.

Posisi doc.cheap

API OCR paspor doc.cheap mencakup langkah 1 sampai 4 dan melaporkan sisanya dengan jujur. Responsnya memuat mrz.status: passed, failed, atau absent. Pada failed, mrz.reason menyebutkan apa yang tidak cocok, entah sebuah digit (Check digit failed for: document number) atau ketidaksesuaian dengan halaman cetak (MRZ does not match the visual zone for: surname), karena secara default kedua zona dibaca dan dibandingkan. Zonanya sendiri dikembalikan apa adanya di mrz.lines dan mrz.text, sehingga Anda bisa menghitung ulang digitnya di kode Anda sendiri. document.expiry_date, document.is_expired, dan document.days_remaining menjawab langkah 4.

Ini adalah layanan pengenalan, bukan layanan verifikasi. Blok authenticity-nya berisi not_checked alih-alih menyiratkan lolos, dan pemeriksaan foto serta chip diserahkan ke alat yang dibuat khusus untuk itu. Untuk mencoba sebuah zona tanpa menulis kode, tempelkan ke kalkulator check digit MRZ; kalkulator ini berjalan di browser dan menampilkan setiap digit hasil hitungan di samping digit yang tercetak. Jika Anda sedang memilih layanan hosted, perbandingan API OCR paspor menyandingkan harga yang dipublikasikan.

Pertanyaan untuk Anda: celah mana dari daftar ini yang pernah benar-benar ditemui alur onboarding Anda? Ceritakan di kolom komentar di bawah.