Docs contentsYaliyomo ya nyaraka

Check codes

Every check id a verification can report, what it tests and how its status affects the verdict.

document.checks (and checks in the engine result) lists every check run on the card. Each has an id, a status and a readable detail for a reviewer. Show the detail to staff, not to the person being verified, and do not parse it: its wording may change.

Statuses

status Meaning Effect on overall
pass The check passed None
warn Something to look at, not a failure At most review
fail The check failed fail
not_applicable Nothing to check (for example, a card that prints no expiry date) None
unverifiable The check could not be run on what was read None

The face match and liveness check also count, and are reported in face, not in the checks: no_match fails the verdict, while uncertain, a missing selfie or a liveness check that did not pass make it review.

NIDA ID card

id What it tests
required_fields The NIN, given names, surname, date of birth and sex were all read. detail names any that were missing.
nin_format The NIN has 20 digits and its first 8 form a valid date
nin_dob_match The NIN's first 8 digits equal the printed date of birth. Only on layouts that print a date of birth.
dob_plausible The date of birth is between 1900 and today
expiry_valid The card has not expired, and expires after the date of birth. A refugee card must show an expiry date. How an expired card affects the verdict follows the expiry_policy; see Config reference.
card_type_known The card type (citizen, resident, refugee) was recognised; warn when it was not
nin_checksum Reserved. NIDA publishes no NIN check-digit method, so this check is not run today. It is listed so readers can accept it if it appears.

Driving licence

id What it tests
required_fields The licence number, surname, given names, date of birth and expiry date were all read
licence_number_format The licence number (field 5) has 10 digits; warn otherwise
dob_plausible The date of birth is between 1900 and today
issue_date_valid The date of issue is after the date of birth, not in the future and before the expiry date. A holder under 16 on the date of issue is a warn.
expiry_valid The licence has not expired, and expires after the date of birth

Back of the card

Only when the flow asked for the back. See Back of the card.

id What it tests
sides_match Both sides agree where they carry the same data: the NIN, the licence number, the categories. Printed values that differ fail; a barcode that differs from the printed front is a warn (the barcode's value is used).
back_read The back was read. warn when it was skipped or timed out.

Reading checks safely

  • Decide on overall, and use the checks to explain it. New check ids can be added in digid.kyc/1; treat an id you do not know by its status.
  • expiry_valid is not emitted when the expiry policy is ignore. If your process needs an expiry check, run it on the server against subject.expiry_date.