← Blog
Artikel

Nik Dummy dan Dummy NPWP: Generate Data Testing untuk QA

Cara generate NIK dummy dan dummy NPWP yang valid secara format untuk testing QA dan seeding staging, tanpa menyentuh data pribadi asli siapa pun.

Setiap developer yang pernah build fitur KYC, onboarding, atau form kependudukan pasti menghadapi dilema yang sama: mau testing pakai data apa? Pakai NIK asli milik sendiri itu tidak nyaman, pakai data user asli itu melanggar prinsip privasi (dan berpotensi melanggar UU PDP), dan generate NIK acak sendiri sering gagal validasi format karena struktur NIK punya aturan yang cukup ketat.

Di sini generator NIK dummy dan NPWP dummy dari API Indonesia masuk. Dua endpoint ini menghasilkan data sintetis yang strukturnya valid, tapi tidak berasal (dan tidak menunjuk) ke data orang nyata.

Kenapa Tidak Pakai NIK Acak Saja?

NIK 16 digit itu bukan angka acak polos. Ada struktur di dalamnya:

Digit Isi
1 sampai 2 Kode provinsi
3 sampai 4 Kode kabupaten/kota
5 sampai 6 Kode kecamatan
7 sampai 12 Tanggal dan tahun lahir (tanggal perempuan +40)
13 sampai 16 Nomor urut

Kalau Anda generate 16 digit acak di unit test, kemungkinan besar kode provinsinya di luar rentang 11 sampai 97, atau tanggal lahirnya tidak valid. Test Anda jadi false negative: gagal bukan karena logika aplikasi salah, tapi karena fixture-nya jelek. Generator dummy yang benar menghasilkan NIK yang lolos validasi format, lengkap dengan hasil parse-nya, jadi Anda bisa test happy path dan edge case dengan fixture yang realistis.

Endpoint

Base URL: https://use.apiindonesia.id/api/v1/util/dummy

Method Endpoint Keterangan
POST /nik Generate NIK dummy + hasil parse
POST /npwp Generate NPWP dummy (legacy 15 digit atau format NIK 16 digit)
POST /telepon Generate nomor telepon dummy per operator

Semua endpoint dummy punya rate limit 60 request per menit dan setiap respons menyertakan meta.disclaimer yang menegaskan data ini sintetis, bukan data Dukcapil atau DJP.

Generate NIK Dummy

Tanpa parameter, NIK dibuat acak dengan tanggal lahir acak dan gender acak. Anda juga bisa mengunci beberapa bagian: province_code, gender, dan birth_date.

curl -X POST "https://use.apiindonesia.id/api/v1/util/dummy/nik" \
  -H "x-api-key: aip_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"province_code": "32", "gender": "female", "birth_date": "1995-07-17"}'

Responsnya berisi NIK dan hasil parse strukturnya:

{
  "data": {
    "nik": "3207174807950007",
    "parsed": {
      "province_code": "32",
      "regency_code": "3207",
      "district_code": "320717",
      "birth_day": 17,
      "birth_month": 7,
      "birth_year": 1995,
      "birth_date": "1995-07-17",
      "gender": "female",
      "serial": "0007"
    }
  },
  "meta": { "disclaimer": "Data sintetis untuk testing. Bukan data Dukcapil/DJP." }
}

Perhatikan digit ke-7 dan ke-8: 17 jadi 57 (17 + 40) karena gender-nya perempuan. Detail seperti ini yang bikin fixture dummy Anda perilakunya mirip data asli saat melewati parser NIK internal aplikasi.

Generate NPWP Dummy

NPWP punya dua format: legacy 15 digit dan format baru 16 digit (yang isinya NIK). Default endpoint menghasilkan format legacy:

curl -X POST "https://use.apiindonesia.id/api/v1/util/dummy/npwp" \
  -H "x-api-key: aip_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"format": "legacy_15"}'
{
  "data": { "npwp": "902173846501234", "format": "legacy_15" },
  "meta": { "disclaimer": "Data sintetis untuk testing. Bukan data Dukcapil/DJP." }
}

Untuk format baru, kirim "format": "nik_16", dan responsnya akan berupa NIK 16 digit yang juga valid sebagai NPWP.

Contoh Integrasi: Fixture Factory di Python

Skrip kecil ini menghasilkan batch data dummy untuk seed database staging:

import os
import requests

BASE = "https://use.apiindonesia.id/api/v1/util/dummy"
HEADERS = {"x-api-key": os.environ["API_INDONESIA_KEY"]}

def make_users(n: int) -> list[dict]:
    users = []
    for _ in range(n):
        nik = requests.post(f"{BASE}/nik", headers=HEADERS, json={}).json()["data"]
        npwp = requests.post(f"{BASE}/npwp", headers=HEADERS, json={}).json()["data"]
        users.append({"nik": nik["nik"], "npwp": npwp["npwp"]})
    return users

if __name__ == "__main__":
    for u in make_users(10):
        print(u)

Versi Node.js

const BASE = "https://use.apiindonesia.id/api/v1/util/dummy";

export async function dummyUser() {
  const opts = {
    method: "POST",
    headers: {
      "x-api-key": process.env.API_INDONESIA_KEY,
      "Content-Type": "application/json",
      body: JSON.stringify({}),
    },
  };
  const nik = await (await fetch(`${BASE}/nik`, opts)).json();
  const npwp = await (await fetch(`${BASE}/npwp`, opts)).json();
  return { nik: nik.data.nik, npwp: npwp.data.npwp };
}

Workflow Testing yang Sehat

  • Unit test parser: generate NIK dummy, pastikan parser internal Anda mengeluarkan hasil parse yang sama seperti field parsed di respons.
  • Test form onboarding: isi form dengan data dummy, bukan data tim sendiri.
  • Seed staging: generate batch data dummy untuk mengisi database staging, sehingga tidak ada data pribadi asli yang menyentuh environment non-produksi.
  • Uji sampai rate limit: kalau Anda butuh banyak data dalam waktu singkat, ingat limit 60 request per menit, jadi cache hasil generate di test suite.

Batasan yang Perlu Dipahami

Data dummy ini valid secara format, tapi tidak terhubung ke kehidupan nyata: tidak ada orang dengan identitas itu di Dukcapil, dan tidak ada entitas pajak di DJP. Jadi jangan pernah pakai data ini untuk verifikasi identitas sungguhan. Untuk verifikasi format input (apakah NIK yang diketik user punya struktur benar), pakai endpoint validasi NIK yang dibahas di artikel validasi format NIK untuk HR onboarding.

Mulai Sekarang

Coba generator dummy langsung di halaman API Utilities dan dapatkan API key gratis di dashboard.apiindonesia.id/register.

Mulai Sekarang

Mulai Integrasi
Hari Ini

Daftar gratis, ambil API key, dan langsung call endpoint pertama Anda — tanpa kartu kredit, tanpa proses approval yang ribet.

Visualisasi gelombang titik