Menu

Validasi CPF CNPJ: dua nomor pajak Brasil

Validasi CPF CNPJ menyangkut dua nomor pajak Brasil: satu untuk orang, satu untuk badan usaha. Pelajari kesamaan polanya dan batas hasil pemeriksaannya.

Diterbitkan

  • data uji
  • nomor pajak
  • digit pemeriksa

Validasi CPF CNPJ adalah pemeriksaan terhadap dua nomor pajak yang dipakai di Brasil, yaitu CPF untuk orang perseorangan dan CNPJ untuk badan usaha. Keduanya memakai gagasan perhitungan yang sama, tetapi berbeda pada susunan dan pada siapa yang berhak memakainya. Halaman ini menjelaskan perbedaan itu, menunjukkan letak persamaan aritmetikanya, dan menegaskan mengapa hasil pemeriksaan tidak boleh dicampur dengan status pendaftaran.

Apa itu CPF dan CNPJ?

CPF adalah nomor yang menandai orang perseorangan dalam urusan perpajakan, sedangkan CNPJ menandai badan usaha. Perbedaan subjek ini bukan sekadar soal administrasi, karena keduanya muncul di dokumen, formulir, dan sistem yang berbeda. Sebuah formulir pendaftaran pelanggan biasanya meminta yang pertama, sedangkan formulir pendaftaran pemasok atau mitra usaha biasanya meminta yang kedua.

Karena keduanya dipakai sebagai penanda resmi, keduanya juga diberi perlindungan aritmetika berupa digit pemeriksa. Tujuannya sederhana: menangkap kesalahan pengetikan sebelum nomor yang salah masuk ke sistem dan menimbulkan pekerjaan koreksi yang panjang. Digit itu dihitung dari sisa nomor, bukan dipilih sembarang.

Yang tidak boleh disimpulkan dari bentuk nomornya adalah status orang atau badan usaha tersebut. Nomor yang bentuknya benar dapat saja sudah tidak aktif, dan sebaliknya nomor yang statusnya aktif tetap tidak memberi keterangan apa pun tentang kegiatan usahanya.

Perbedaan struktur dua nomor ini

Perbedaan yang paling terasa terletak pada jumlah digit pemeriksa di bagian akhir dan pada kumpulan karakter yang dipakai. Keduanya sama-sama diakhiri oleh digit pemeriksa, dan keduanya juga biasa ditulis dengan tanda baca agar lebih mudah dibaca manusia.

Aspek CPF CNPJ
Subjek Orang perseorangan Badan usaha
Digit pemeriksa di akhir Dua digit Dua digit
Pemisah yang lazim dipakai Titik dan tanda hubung Titik, garis miring, dan tanda hubung
Dipakai di Dokumen dan formulir perorangan Dokumen dan formulir badan usaha

Tanda baca pada baris ketiga bukan bagian dari nomor. Ia hanya alat bantu baca, dan karena itu harus dibuang sebelum perhitungan dimulai. Bila pembersihan ini dilewatkan, satu nomor dapat diperlakukan sebagai dua nilai yang berbeda hanya karena penulisannya berbeda, dan laporan pemeriksaan akan memuat baris ganda yang membingungkan.

Perbedaan subjek juga menentukan pesan yang pantas ditampilkan. Menolak nomor badan usaha dengan pesan yang menyebut data perorangan, atau sebaliknya, membuat pengguna mengira ia salah mengisi formulir padahal yang bermasalah adalah pilihan jenis akun.

Gagasan perhitungan digit pemeriksa: jumlah berbobot lalu sisa bagi

Kerangka perhitungan kedua nomor ini sama seperti pada banyak skema lain: setiap lambang sebelum digit pemeriksa dikalikan dengan bobot tertentu, seluruh hasilnya dijumlahkan, jumlah itu diambil sisanya terhadap sebuah modulus, lalu sisa tersebut diubah menjadi digit pemeriksa melalui pemetaan yang telah ditetapkan. Yang berbeda antara CPF dan CNPJ adalah susunan bobot serta titik awal perhitungannya.

Karena masing-masing nomor diakhiri dua digit pemeriksa, perhitungannya berjalan dua tahap. Tahap pertama menghasilkan digit pemeriksa pertama, dan digit itu ikut diperhitungkan pada tahap kedua. Keterkaitan bertingkat inilah yang membuat pemotongan atau penyisipan satu karakter di tengah jarang lolos dari pemeriksaan.

Pola bertahap seperti ini juga menjelaskan mengapa kesalahan pada satu karakter di bagian dalam nomor lebih mudah terdeteksi daripada kesalahan pada digit pemeriksa itu sendiri. Digit pemeriksa bekerja sebagai penutup rangkaian, sehingga perubahan di dalamnya langsung membuat seluruh perhitungan tidak lagi seimbang.

Mengapa deret angka yang semuanya sama perlu dikecualikan?

Ada satu kelemahan yang melekat pada perhitungan sederhana seperti ini. Deret yang seluruh lambangnya sama dapat menghasilkan jumlah berbobot yang kebetulan habis dibagi modulus, sehingga deret itu lolos pemeriksaan meskipun jelas bukan nomor yang sungguh-sungguh diterbitkan.

Karena itulah banyak skema menambahkan aturan pengecualian secara eksplisit. Deret semacam itu ditolak lebih dahulu, sebelum perhitungan digit pemeriksa dijalankan. Penolakan ini bukan cacat pada algoritmanya, melainkan penyesuaian yang diperlukan agar hasil pemeriksaan tetap dapat dipercaya.

Bagi penulis kode, pengecualian ini wajib diingat. Implementasi yang hanya menerapkan rumus penjumlahan berbobot tanpa aturan pengecualian akan menerima deret yang seharusnya ditolak, dan kesalahan seperti ini sering baru terlihat ketika ada pengguna iseng yang memasukkan deret seragam ke dalam formulir.

Pemeriksaan format dan status pendaftaran adalah dua hal

Satu hal yang perlu dipegang teguh: kecocokan bentuk tidak sama dengan keberadaan nomor dalam daftar resmi. Pemeriksaan aritmetika hanya menguji hubungan antarlambang di dalam nomor. Ia tidak menyentuh daftar wajib pajak, tidak mengetahui apakah pendaftarannya masih berlaku, dan tidak mengetahui apakah nomor itu tercatat atas nama badan usaha yang sedang Anda hadapi.

Seluruh contoh yang muncul dalam pembahasan ini adalah deretan rekaan yang disusun khusus untuk menjelaskan pola perhitungan. Tidak ada yang merujuk pada wajib pajak, orang, atau badan usaha yang benar-benar ada, dan tidak ada yang boleh dipakai untuk mengklaim bahwa sebuah nomor terdaftar atau sah.

Akibat pembedaan itu, sebuah sistem sebaiknya menyatakan tiga hal secara terpisah: bentuk nomornya cocok, digit pemeriksanya terpenuhi, dan statusnya di daftar resmi. Dua hal pertama bisa diperiksa secara lokal dan dalam waktu singkat, sedangkan yang ketiga memerlukan pencarian ke pihak lain yang bisa gagal atau lambat.

Untuk pengembang: pembersihan, masker, dan pesan galat

Langkah pertama yang sebaiknya ditulis bukan perhitungan, melainkan pembersihan. Buang semua pemisah, rapikan bentuk huruf bila ada, dan tolak masukan yang memuat lambang di luar kumpulan yang diizinkan. Setelah masukan bersih, barulah periksa panjangnya dan jalankan perhitungan digit pemeriksa.

Berikutnya, tangani bentuk tampilan secara terpisah dari bentuk penyimpanan. Simpan nomor dalam bentuk yang sudah dibersihkan, lalu tampilkan kembali dengan pemisah yang lazim agar mudah dibaca. Bila pengguna menempelkan nomor yang sudah berformat lengkap, bersihkan lebih dahulu alih-alih menolaknya, karena penolakan seperti itu hampir selalu membuat pengguna bingung.

Pesan galat sebaiknya menyebut lapis mana yang gagal. Nomor yang memuat huruf pada bagian yang seharusnya angka memerlukan pesan yang berbeda dari nomor yang panjangnya kurang, dan keduanya berbeda lagi dari nomor yang digit pemeriksanya tidak terpenuhi. Alat validasi nomor menampilkan hasil per lapis agar perbedaan itu terlihat jelas. Bila Anda bekerja dengan beberapa skema sekaligus, bandingkan pendekatan ini dengan pembahasan keluarga algoritma digit pemeriksa.

Untuk keperluan pengujian, siapkan satu nilai dengan digit pemeriksa yang sengaja dirusak sebagai kasus negatif tetap. Nilai itu harus selalu ditolak, dan bila suatu hari ia diterima, Anda tahu ada perubahan perilaku yang masuk tanpa disadari.

Simpan nilai dalam bentuk yang sudah dibersihkan, lalu tampilkan kembali dengan pemisah yang lazim. Pengguna yang membandingkan nomor di layar dengan dokumen yang dipegangnya memerlukan bentuk yang sama seperti yang tercetak, sedangkan pencarian dan pembandingan memerlukan bentuk yang seragam. Menyimpan satu bentuk dan menampilkan bentuk lain memenuhi kedua kebutuhan itu tanpa menimbulkan salinan yang berbeda-beda di dalam basis data.

Perhatikan pula arti dua digit pemeriksa itu. Keduanya menyatakan bahwa deretan lambangnya konsisten dengan perhitungan yang diterbitkan skema, dan tidak lebih dari itu. Karena itu, jangan jadikan hasil perhitungan sebagai pengganti pemeriksaan terhadap daftar resmi; keduanya menjawab pertanyaan yang berbeda, dan menggabungkannya menjadi satu jawaban akan menyesatkan pengguna.

Apa langkah berikutnya?

Tulislah tiga pemeriksaan terpisah untuk bentuk, digit pemeriksa, dan pengecualian deret seragam, lalu uji ketiganya dengan contoh yang sengaja dirusak. Setelah itu, buka alat validasi nomor untuk melihat bagaimana hasil per lapis ditampilkan berdampingan. Untuk memahami mengapa nomor dari negara lain memerlukan perlakuan yang berbeda, lanjutkan ke pembahasan aturan nomor identitas tiap negara, dan pertimbangkan pula catatan konsistensi bidang saat menyusun data ujinya.

Lanjut membaca

Artikel tentang Validator NIK