v:verza

South African ID number checker

Free, unlimited, and the number never leaves your browser.

Validated in your browser. No network request, nothing logged, nothing stored.

What this checks

A South African identity number is thirteen digits: the birth date as YYMMDD, a four-digit sequence number that also encodes gender, a citizenship digit, a historic unused digit, and a Luhn check digit over the rest. This page verifies the check digit, confirms the date segment is a real date, and decodes what the number says about itself.

What it cannot do: confirm that Home Affairs actually issued the number, or that it belongs to the person who gave it to you. A well-formed number that was never issued still passes a structural check, here or anywhere else. Nobody outside Home Affairs can tell you otherwise, and any service claiming to is overstating what it did.

Checking these in bulk, or from your own software?

This page is for checking one number by hand. If you need it inside an onboarding flow, a tenant screening process or a nightly job, verza does the same check over an API, plus batch validation of up to 50 identifiers in one call.

curl -H "Authorization: Bearer YOUR_KEY" \ "https://verza.dev/v1/id-validate?id=8001015009087"

Subscribe from R99/month for an API key on the pricing page, or pay per call with no account at all. Full details in the ID validation docs.

Also on verza: is a credit agreement's interest rate lawful?

National Credit Act Regulation 42 caps the interest rate on every category of South African credit agreement, and the cap is fixed at the repo rate in force on the day the agreement was concluded, not today's rate. Getting that date wrong is the most common way a lawfulness check goes wrong.

verza returns a verdict rather than a rate table: lawful or unlawful, the exact cap for that credit type on that date, any excess in percentage points, and the full workings with citations. See the NCA loan check docs.

Questions

How do I check if a South African ID number is valid?
Type the 13 digits into the box above. The check runs instantly in your browser: it verifies the Luhn check digit, confirms the birth-date segment is a real date, and decodes the date of birth, gender and citizenship status encoded in the number.
Is my ID number sent anywhere?
No. This page validates entirely in your browser using JavaScript. The number is never transmitted to verza or anyone else, never logged, and never stored. You can confirm that in your browser's network tab: checking an ID makes no network request at all.
Does a valid result mean the ID is real?
No, and no honest service can tell you otherwise. A structural check confirms the number is well formed and internally consistent. A number that was never issued by Home Affairs can still pass. Confirming a number was actually issued, and to whom, requires Home Affairs itself.
What does a South African ID number encode?
The first six digits are the date of birth as YYMMDD. The next four are a sequence number that also indicates gender: 5000 and above is male, below 5000 is female. The eleventh digit is 0 for a citizen and 1 for a permanent resident. The twelfth is historic and unused. The thirteenth is a Luhn check digit calculated over the preceding twelve.
Why does it say the birth date is ambiguous?
The year is only two digits, so 01 could be 1901 or 2001. Where both are possible dates in the past, the checker assumes the younger reading and tells you the alternative. It only comes up for people who would be over 100.
Can I check ID numbers in bulk or from my own software?
Yes, that is what the API is for. A single call validates one number, and the bulk endpoint takes up to 50 at once. See the pricing page for a monthly plan, or pay per call with no account at all.