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 indigid.kyc/1; treat an id you do not know by itsstatus. expiry_validis not emitted when the expiry policy isignore. If your process needs an expiry check, run it on the server againstsubject.expiry_date.