Lewati ke konten

Input dan privasi

Fungsi nomor identitas cuma menerima digit ASCII dan pemisah yang disebut di halaman tiap modul (biasanya spasi, titik, dan strip). Input lebih dari 64 karakter langsung gagal dengan length sebelum dicek lebih jauh, jadi input sepanjang apa pun tetap murah diproses.

Karakter lain langsung gagal dengan charset. Contohnya digit full-width (7502…), digit Arab-Indic, dan karakter zero-width. Di layar kelihatannya sama, tapi isinya beda, jadi lebih aman ditolak daripada diterima diam-diam.

Kalau input datang dari copy-paste, panggil normalize dulu sebelum validasi. Fungsi ini mengubah karakter full-width, digit Arab-Indic, serta spasi dan strip Unicode jadi ASCII, membuang karakter zero-width dan soft hyphen, lalu merapikan spasi di ujung. Tabelnya sama persis di Go dan TypeScript.

package main
import (
"errors"
"fmt"
"github.com/haikalmumtaz233/nusaindex/nik"
"github.com/haikalmumtaz233/nusaindex/normalize"
)
func main() {
pasted := "7502010706599583\u200b"
_, err := nik.Parse(pasted)
fmt.Println(errors.Is(err, nik.ErrCharset))
clean := normalize.Text(pasted)
fmt.Println(clean, nik.Valid(clean))
}
Keluaran
true
7502010706599583 true

Mask cuma menyisakan bagian yang biasanya dibutuhkan tim layanan:

Jenis Yang terlihat Contoh
NIK, NPWP, NIP, NISN, nomor rekening 4 digit terakhir ************9583
Nomor HP +62 dan 3 digit terakhir +62*******171

Digit depan NIK berisi wilayah dan tanggal lahir, jadi tidak pernah ditampilkan. Untuk teks bebas, objek, dan handler slog di Go, lihat mask.

  • Tidak ada request jaringan dari library, CLI, maupun server MCP. Data wilayah, libur, dan bank sudah ikut tertanam.
  • Tidak me-log, menyimpan, atau mengirim input. Pesan error cuma berisi kode, bukan nilainya.
  • Tidak mencari siapa pemilik NIK, NPWP, plat, atau nomor HP, dan tidak mengecek ke Dukcapil atau DJP. Lihat non-goal.

Valid artinya strukturnya benar. NIK bisa lolos semua pengecekan tapi tetap bukan milik siapa pun.