^\\d{16}$
^ : penanda awal kata
\d{16} : harus matching angka (digit / d) sebanyak 16 buah.
$ : penanda akhir kata
^\d{6}([04][1-9]|[1256][0-9]|[37][01])(0[1-9]|1[0-2])\d{2}\d{4}$
^ : penanda awal kata
- \\d{6}
- 6 angka pertama harus matching berupa angka (digit / d). Angka ini adalah angka kode provinsi, kabupaten/kota, dan kecamatan.
- ([04][1-9])
- 2 angka pertama mungkin matching berupa angka [0][1] , [0][2], .. [0][9] , [4][1],[4][2]..[4][9]. Dengan kata lain matching angka 01,02..09, 41,42..49. Regex ini mengakomodir tanggal lahir 01 - 09 untuk pria, 41 - 49 untuk perempuan.
- ([1256][0-9]) (masih kelanjutan yang diatas)
- atau 2 angka pertama mungkin matching berupa angka [1][1] , [1][2], .. [1][9] , [2][1] , [2][2], .. [2][9] [6][1],[6][2]..[6][9]. Dengan kata lain matching angka 11,12..19, 21,22,..29, 61,62..69. Regex ini mengakomodir tanggal lahir 11 - 29 untuk pria, 51 - 69 untuk perempuan.
- ([37][01]) (masih kelanjutan yang diatas)
- atau 2 angka pertama mungkin matching berupa angka [3][0] , [3][1], [7][0] , [7][1]. Dengan kata lain matching angka 30,31,70,71. Regex ini mengakomodir tanggal lahir 30 - 31 untuk pria, 70 - 71 untuk perempuan.
- (0[1-9]|1[0-2])
- 2 angka selanjutnya matching berupa angka [0][1] , [0][2], [0][9] , [1][0],[1] [1], [1][2]. Dengan kata lain matching angka 01-09, 10,11,12. Regex ini mengakomodir bulan dari 01 - 12.
- \d{2}
- 2 angka selanjutnya matching berupa 2 angka tahun.
- \d{4}
- 4 angka terakhir matching berupa 4 angka sequence.
- $
- penanda akhir kata
^(1[1-9]|21|[37][1-6]|5[1-3]|6[1-5]|[89][12])\d{2}\d{2}([04][1-9]|[1256][0-9]|[37][01])(0[1-9]|1[0-2])\d{2}\d{4}$
Penjelasannya untuk 12 angka dari belakang sama dengan penjelasan Regex KTP / NIK versi 2 diatas.
Sehingga cuma regex untuk 6 angka pertama saja yang berbeda , yaitu regex untuk kode provinsi, kabupaten/kota, dan kecamatan sbb :
- 1[1-9]|21
- 2 angka pertama kodenya adalah 11,12,13..19, 21\. Kode ini adalah kode wilayah Provinsi di Sumatera.
- [37][1-6]
- 2 angka pertama kodenya adalah [3][1],[3][2]..[3][6], [7][1],[7][2]..[7][6]. Dengan kata lain kodenya adalah 31,32,..36, 71,72,..76\. Kode 31..36 adalah kode wilayah Provinsi di Jawa. Sementara kode 71,72,..76 adalah kode wilayah provinsi di Sulawesi. Regex nya digabung karena kedua wilayah ini mempunyai jumlah provinsi yang sama cuma berbeda digit pertama saja.
- 5[1-3]
- 2 angka pertama kodenya adalah 51,52,53\. Kode ini adalah kode wilayah Provinsi di Bali, NTB, NTT.
- 6[1-5]
- 2 angka pertama kodenya adalah 61,62,63,64,65\. Kode ini adalah kode wilayah Provinsi di Kalimantan.
- [89][12]
- 2 angka pertama kodenya adalah [8][1],[8][2],[9][1],[9][2]. Dengan kata lain kodenya adalah 81,82,91,92\. Kode 81,826 adalah kode wilayah Provinsi di Malukuk Sementara kode 91,92 adalah kode wilayah provinsi di Papua. Regex nya digabung karena kedua wilayah ini mempunyai jumlah provinsi yang sama cuma berbeda digit pertama saja.
- \d{2}
- 2 angka selanjutnya matching berupa 2 angka kode kabupaten/kota.
- \d{2}
- 2 angka selanjutnya matching berupa 2 angka kode kecamatan.
Demikianlah penjelasan regex nomor KTP Indonesia. Semoga bermanfaat.
thanks for this 🙇