Indonesian KTP — the only document type supported. Aspirational types (passport / driver's licence / NPWP) are intentionally not listed.
Indonesian national identity card. The pipeline runs OCR, anti-spoof, tamper, and (optionally) Dukcapil cross-check from the client.
Run on every KTP capture. The bundle assurance tier comes from how many of these vote live — seelib/server/ktp/anti-spoof.ts.
| Voter | What it checks | Weight |
|---|---|---|
flash_reflectance_cardcritical | Random screen-flash colour sequence + per-frame face-region R/G/B correlation. Catches photos, screen replays, and most GenAI prints. | 2.0 |
screen_moire | FFT-band heuristic over the green channel — catches re-photographed LCD/OLED displays. | 1.0 |
specular_highlight | Real KTPs reflect strongly off the hologram strip under the white-flash step; flat prints don't. | 1.0 |
Distinct from anti-spoof — checks the card itself is authentic + unmodified, not just that it was captured live. A single critical failure here flips the bundle to tampered.
| Voter | What it checks | Weight |
|---|---|---|
nik_consistencycritical | Pure logic — NIK structure (province / DoB / gender embed) must agree with OCR'd visible fields. Highest-weighted voter; impossible to forge consistently. | 3.0 |
Future tamper voters (font homogeneity, photo-rectangle splice forensics, hologram presence, microprint legibility) require trained ONNX models. They will appear here when shipped — until then they are deliberately omitted rather than listed as “awaiting model”.