Nomor Pokok Wajib Pajak (Indonesia)
Kartu NPWP memiliki kode seri dengan 15 (lima belas) angka, yang menggunakan format seperti berikut: 99.999.999.9-999.999.Dua(2) digit pertama, 99.999.999.9-999.999 menunjukkan Identitas Wajib Pajak, yaitu:
○ 01 sampai 03 adalah Wajib Pajak Badan
○ 04 dan 06 adalah Wajib Pajak Pengusaha
○ 05 adalah Wajib Pajak Karyawan
○ 07 sampai 09 adalah Wajib Pajak Orang Pribadi
Enam(6) digit berikut, 99.999.999.9-999.999 menunjukkan Nomor Registrasi / Urut yang diberikan Kantor Pusat Direktorat Jenderal Pajak kepada Kantor Pelayanan Pajak (KPP).
Satu(1) digit berikutnya 99.999.999.9-999.999 berfungsi sebagai alat pengaman untuk menghindari terjadinya pemalsuan atau kesalahan pada NPWP.
Tiga(3) digit berikut, 99.999.999.9-999.999 adalah Kode KPP, contohnya 001, berarti NPWP tersebut dikeluarkan di KPP Pratama Jakarta Matraman.
Tiga digit terakhir, 99.999.999.9-999.999 menunjukkan Status Wajib Pajak:
○ 000 berarti Tunggal atau Pusat
○ 00x (001,002 dst) berarti Cabang, dimana angka akhir menunjukkan urutan cabang (cabang ke-1 maka 001, cabang ke-2 maka 002, dst.).
Langkah Validasi
NPWP#: 12.345.678.x-123.000Data untuk proses validasi: 12345678123000 (hanya angka tanpa tanda titik “.” ataupun strip “-” )
Langkah-langkah untuk validasi kode seri NPWP adalah sebagai berikut: |
---|
1. | Gunakan 8 digit angka awal dari NPWP => 12345678. |
2. | Kalikan digit ganjil dengan 1 dan digit genap dengan angka 2. |
3. | Jumlahkan masing-masing hasilnya, untuk hasil bilangan dengan 2 digit perlakukan sebagai dua buah bilangan, 1+4+3+8+5+1+2+7+1+6=38 |
4. | Lakukan pembulatan ke atas ke bilangan puluhan terdekat, 38 => 40 |
5. | Digit ke-9 NPWP (x) adalah hasil langkah ke-4 dikurangi dengan hasil langkah ke-3, x=40–38=2 |
Penghitungan: |
---|
8 digit awal | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
ganjil x1, genap x2 | 1 | 4 | 3 | 8 | 5 | 12 | 7 | 16 |
hitung, >9 jadi dua angka | 1 | 4 | 3 | 8 | 5 | 1+2 | 7 | 1+6 |
hitung, >9 jadi dua angka | 1 | 4 | 3 | 8 | 5 | 3 | 7 | 7 |
total pembulatan puluhan keatas | 38 | -> | 40 | - | 38 | = | 2 |
Sehingga NPWP yang benar adalah 12.345.678.2-123.000
Source Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; // .Net FrameWork 4.0 namespace TechScale { public static class NPWP { /// <summary> /// return logical validity of npwp /// </summary> /// <param name="arg"></param> /// <returns></returns> internal static bool IsValid(string arg) { var dat = arg.Where(w => w >= '0' && w <= '9'); if (dat.Count() != 15) { return false; } var f08 = dat.Take(8); var h08 = f08.Select((s, i) => { return CharsSum(s, i); }).Sum(); var d09 = h08 % 10 == 0 ? h08 : ((int)Math.Ceiling(h08 / 10d)) * 10; d09 -= h08; var val = string.Concat( string.Concat(f08), d09, string.Concat(dat.Select((s, i) => { return i >= 9 ? s.ToString() : ""; }))); return val == string.Concat(dat); } /// <summary> /// valid npwp digit #9 /// </summary> /// <param name="arg"></param> /// <returns></returns> internal static int ValidCheckCode(string arg) { var dat = arg.Where(w => w >= '0' && w <= '9'); if (dat.Count() < 8) { return -1; } var f08 = dat .Take(8) .Select((s, i) => { return CharsSum(s, i); }) .Sum(); var d09 = f08 % 10 == 0 ? f08 : ((int)Math.Ceiling(f08 / 10m)) * 10; d09 -= f08; return d09; } private static int CharsSum(int s, int i) { var res = (s - 48) * (i % 2 == 0 ? 1 : 2); return res > 9 ? res.ToString().Select(n => Convert.ToInt32(n.ToString())).Sum() : res; } } } |
Test |
---|
Immediate Window |
?NPWP.IsValid("12.345.678.2-123.000") |
true |
?NPWP.ValidCheckCode("12345678") |
2 |
varyes = NPWP.IsValid("12.345.678.2-123.000"); // return true vardgt = NPWP.ValidCheckCode("12345678"); // return 2 |