Skip to content

Instantly share code, notes, and snippets.

@siayi
Last active December 6, 2024 05:34
Show Gist options
  • Save siayi/1af4c8d542c16ea7c0ff94c15508b9fc to your computer and use it in GitHub Desktop.
Save siayi/1af4c8d542c16ea7c0ff94c15508b9fc to your computer and use it in GitHub Desktop.
Penjelasan Regex Nomor NIK KTP

Regex KTP / NIK versi 1 (sederhana):

^\\d{16}$

^ : penanda awal kata

\d{16} : harus matching angka (digit / d) sebanyak 16 buah.

$ : penanda akhir kata



Regex KTP / NIK versi 2 (menengah):

^\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


Regex KTP / NIK versi 3 (cukup lengkap):

^(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.

@alifgiant
Copy link

thanks for this 🙇

@hasanchoiri
Copy link

thanks ... 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment