Skip to content

Instantly share code, notes, and snippets.

@siayi
Last active January 10, 2026 01:13
Show Gist options
  • Select an option

  • Save siayi/1af4c8d542c16ea7c0ff94c15508b9fc to your computer and use it in GitHub Desktop.

Select an option

Save siayi/1af4c8d542c16ea7c0ff94c15508b9fc to your computer and use it in GitHub Desktop.

Revisions

  1. siayi revised this gist Nov 1, 2021. 1 changed file with 88 additions and 46 deletions.
    134 changes: 88 additions & 46 deletions Regex-NIK-KTP.md
    Original file line number Diff line number Diff line change
    @@ -1,63 +1,105 @@
    ### Regex KTP / NIK versi 1 (sederhana)
    ### Regex KTP / NIK versi 1 (sederhana):

    **Kode:**
    `^\d{16}$`
    <pre><font size="4"><kbd>^\\d{16}$</kbd></font></pre>

    **Penjelasan:**
    `^` : penanda awal kata
    <mark>^</mark> : penanda awal kata

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

    `$` : penanda akhir kata
    <mark>$</mark> : penanda akhir kata

    ### Regex KTP / NIK versi 2 (menengah)
    * * *

    **Kode:**
    `^\\d{6}([04][1-9]|[1256][0-9]|[37][01])(0[1-9]|1[0-2])\d{2}\d{4}$`
    * * *

    **Penjelasan:**
    `^` : penanda awal kata
    ### Regex KTP / NIK versi 2 (menengah):

    `\\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
    <font size="4"><kbd>^\\d{6}([04][1-9]|[1256][0-9]|[37][01])(0[1-9]|1[0-2])\d{2}\d{4}$</kbd></font>

    <mark>^</mark> : penanda awal kata

    ### Regex KTP / NIK versi 3 (cukup lengkap)
    <dl>

    **Kode:**
    `^(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}$`
    <dt><mark>\\d{6}</mark></dt>

    <dd>6 angka pertama harus matching berupa angka (digit / <mark>d</mark>). Angka ini adalah angka kode provinsi, kabupaten/kota, dan kecamatan.</dd>

    <dt><mark>([04][1-9])</mark></dt>

    <dd>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.</dd>

    <dt><mark>([1256][0-9])</mark> (masih kelanjutan yang diatas)</dt>

    <dd><ins>atau</ins> 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.</dd>

    <dt><mark>([37][01])</mark> (masih kelanjutan yang diatas)</dt>

    <dd><ins>atau</ins> 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.</dd>

    <dt><mark>(0[1-9]|1[0-2])</mark></dt>

    <dd>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.</dd>

    <dt><mark>\d{2}</mark></dt>

    <dd>2 angka selanjutnya matching berupa 2 angka tahun.</dd>

    <dt><mark>\d{4}</mark></dt>

    <dd>4 angka terakhir matching berupa 4 angka sequence.</dd>

    <dt><mark>$</mark></dt>

    <dd>penanda akhir kata</dd>

    </dl>

    * * *

    * * *

    ### Regex KTP / NIK versi 3 (cukup lengkap):

    <font size="4"><kbd>^(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}$</kbd></font>

    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 :

    **Penjelasan:**
    `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.
    <dl>

    <dt><mark>1[1-9]|21</mark></dt>

    <dd>2 angka pertama kodenya adalah 11,12,13..19, 21\. Kode ini adalah kode wilayah Provinsi di Sumatera.</dd>

    <dt><mark>[37][1-6]</mark></dt>

    <dd>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.</dd>

    <dt><mark>5[1-3]</mark></dt>

    <dd>2 angka pertama kodenya adalah 51,52,53\. Kode ini adalah kode wilayah Provinsi di Bali, NTB, NTT.</dd>

    <dt><mark>6[1-5]</mark></dt>

    <dd>2 angka pertama kodenya adalah 61,62,63,64,65\. Kode ini adalah kode wilayah Provinsi di Kalimantan.</dd>

    <dt><mark>[89][12]</mark></dt>

    <dd>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.</dd>

    <dt><mark>\d{2}</mark></dt>

    <dd>2 angka selanjutnya matching berupa 2 angka kode kabupaten/kota.</dd>

    <dt><mark>\d{2}</mark></dt>

    <dd>2 angka selanjutnya matching berupa 2 angka kode kecamatan.</dd>

    </dl>

    * * *

    * * *

    Demikianlah penjelasan regex nomor KTP Indonesia. Semoga bermanfaat.
  2. siayi revised this gist Nov 1, 2021. 1 changed file with 59 additions and 5 deletions.
    64 changes: 59 additions & 5 deletions Regex-NIK-KTP.md
    Original file line number Diff line number Diff line change
    @@ -1,9 +1,63 @@
    Regex KTP / NIK versi 1 (sederhana):
    ### Regex KTP / NIK versi 1 (sederhana)

    ^\\d{16}$
    ^ : penanda awal kata
    **Kode:**
    `^\d{16}$`

    \\d{16} : harus matching angka (digit / d) sebanyak 16 buah.
    **Penjelasan:**
    `^` : penanda awal kata

    $ : penanda akhir kata
    `\d{16}` : harus matching angka (digit / d) sebanyak 16 buah.

    `$` : penanda akhir kata

    ### Regex KTP / NIK versi 2 (menengah)

    **Kode:**
    `^\\d{6}([04][1-9]|[1256][0-9]|[37][01])(0[1-9]|1[0-2])\d{2}\d{4}$`

    **Penjelasan:**
    `^` : 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)

    **Kode:**
    `^(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 :

    **Penjelasan:**
    `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.

  3. siayi created this gist Nov 1, 2021.
    9 changes: 9 additions & 0 deletions Regex-NIK-KTP.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,9 @@
    Regex KTP / NIK versi 1 (sederhana):

    ^\\d{16}$
    ^ : penanda awal kata

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

    $ : penanda akhir kata