What is a South African ID number made up of?

Update 11 August 2011: Want this as an app for your smartphone? Click here

Cecil Tshikedi asked a great question - what is actually in an ID number:

  • The first six numbers are the birth date of the person in YYMMDD format - so no surprise that my ID number starts 820716.
  • The next four are a gender, 5000 and above is male and below 5000 is female. So my ID number would have a number of 5000 or greater.
  • The next number is the country ID, 0 is South Africa and 1 is not. My ID number with have 0 here.
  • The second last number used to be a racial identifier but now means nothing.
  • The last number is a check bit. Which verifies the rest of the number.

So for my ID number it would look something like: 820716[5000-9999]0??

There you go, it’s that easy.

I just want to find out. I am doing some research and understand how an ID number is assigned. But what bothers me is, I see that some people have ID number with eg.5963 in the middle. That cannot possibly be right can it? Can it be that there were 963 boys born on that same day?

I have no details on how numbers are actually assigned, but I would speculate that each regional centre would be assigned batches (i.e. Johannesburg would get say 0-200, Cape Town 201-300 etc...) this way you could have multiple locations assigning (rather than a central location) and not risk collisions. In such a scenario the 963 could mean that was the center 63rd for that day, or the 3rd etc...

ID_Valid() function: VBA code for use with MS Office

Function ID_Valid(ID As String) As String
'This algoritm test the validity of a South African ID number

Dim D(13, 2) As Integer, N As Integer, Check As String
'delete spaces
ID_Valid = Replace(ID, " ", "")

For N = 1 To 12
D(N, 1) = Val(Mid(ID_Valid, N, 1))
If N Mod 2 = 0 Then
D(N, 2) = D(N, 1) * 2
If D(N, 2) >= 10 Then
D(N, 2) = Int(D(N, 2) / 10) + (D(N, 2) - Int(D(N, 2) / 10) * 10)
End If
Else
D(N, 2) = D(N, 1)
End If
D(0, 0) = D(0, 0) + D(N, 2)
Next N
Check = CStr(D(0, 0) * 9)
Check = Right(Check, 1)
If Check = Right(ID_Valid, 1) Then
ID_Valid = "ID number OK"
Else
ID_Valid = "ID number Error"
End If
End Function

Thanks for the info.

So what if more than 999 kids were born on a particular day? How would the middle four letters look like?

Nothing, the system caters for WAY more than that - in fact it caters for 5000 girls & 5000 boys to be born on a single day. We are no where near the population growth - the rough stats I've seen say about 600 in total currently per day is about max - so even if there is a 50/50 split (so 300 boys & 300 girls) we have a LOT of growth in the system.

Hi.

This information is all so informative, but what i want to know even though it means nothing now. How do i distinguish the different race in the identity numbers? Just for curiosity.

you can also have a look here for a good explanation: http://www.polemus.net/2011/01/getting-information-from-south-african.html

Thanks for the info regarding the IDs. Hey I have a question. How would one who was born on the 1st of July 1900 be different from one who was born on say 1st July 2000?

My understanding is that there would be no difference in the first 6 digits, but I'm sure you could figure out if it is 1900 or 2000 by looking at the person/photo ;)

Not so sure about the ID number checking.I just went through our personel file and all of them are 8,all races, only the last digit (the checking bit) that differs? So, I'm not so sure now..

You are getting all 8's for the racial identifier because it
used to be a racial identifier but now means nothing
The last digit will differ based on all the other numbers in the ID because it is a check bit.

Ok and anyone send me a free checking ID and car plate number application that can be downloaded or that can check on the net but dont have to sign up for please there is a big deal that is going down and dont want to be cheated dont comment on here just send me email direct thanks.

If you go to the original post you can download the Excel spreadsheet for ID number checking. Can't help you with car license checking.

Hi Guys

further to the elaboration above, the middle set of four digits is a bit more than gender reflction. the first digit is a reflection of ones gender, the remaining three is the order of birth registration on the given day. So 5023 would indicate that the person is the 23rd male registered on the particular day. (At least, as far as I am aware!)

Thanks - now I know that the zero is for Southa Africa. Does that mean all other foreign countries are represented by digit one or a different digit for each country?

I have no proof either way, but my gut says since there is more than 9 countries it would be impossible to assign all countries their own digit - so I suspect it is just 1 digit for SA and one for foreigners.

Thank you for this article, I learned a lot.

Thank you for your excellent post. He is not devoid of meaning. The problem is very urgent in our time.

Thanks for the random interesting info! Any idea how that check works? Dries.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • Syntax highlight code surrounded by the <pre class="brush: lang">...</pre> tags, where lang is one of the following language brushes: as3, applescript, bash, csharp, coldfusion, cpp, css, delphi, diff, erlang, groovy, jscript, java, javafx, perl, php, plain, powershell, python, ruby, sass, scala, sql, vb, xml.

More information about formatting options