aspose file tools*
The moose likes Beginning Java and the fly likes ID number errors Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "ID number errors" Watch "ID number errors" New topic
Author

ID number errors

Nicholas Lefebvre
Greenhorn

Joined: Feb 05, 2013
Posts: 23
After doing some research regarding South African ID numbers, you discover the following facts.
1. All numbers are 13 digits long.
2. The first 6 digits indicate the person's year, month and day of birth – yymmdd.
3. The next 4 digits indicate gender.
0000 to 4999 is used for male
5000 to 9999 is used for female
We can therefore summarise that, if the number in position 7 is greater or equal to 5 the person is female, otherwise the person is male.
4. The last number is a control digit to verify the number when a mathematical formula is applied. Here is a brief summary of the way this works:

I am getting errors and i need some help please.



my code is below

Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14352
    
  22

Nicholas Lefebvre wrote:I am getting errors and i need some help please.

What are the errors you get?

Please TellTheDetails (<= click on that).


Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
Unnar Björnsson
Ranch Hand

Joined: Apr 30, 2005
Posts: 164
It seems that you check the input string for length, which is good but all you do is print out whether the strign is of the correct length or not. If the string is shorter than 13 you'll get StringIndexOutOfBoundsException
Nicholas Lefebvre
Greenhorn

Joined: Feb 05, 2013
Posts: 23
This is what i get when i run the script:
run:
13
The ID Number Is The Correct Lenght
12
1134256
2013/03/19 : 09/03
Exception in thread "main" java.lang.NumberFormatException: For input string: "2013/03/19 : 09/03"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at Sba.main(Sba.java:85)
Java Result: 1
BUILD SUCCESSFUL (total time: 33 seconds)
Nicholas Lefebvre
Greenhorn

Joined: Feb 05, 2013
Posts: 23
This is the formual used to verfy the id number:

Values if the ID number 5506075122086 is used

Add all the digits in odd positions except the digit in position 13.
TotalA = Digit1 + Digit3 + Digit5 + Digit7 + Digit9 + Digit11
TotalA = 5 + 0 + 0 + 5 + 2 + 0 = 12
TotalB = Concatenate all the digits in even positions. TotalB = 567128
TotalB = TotalB x 2 TotalB = 567128 x 2 = 1134256
TotalC = Add all the digits in TotalB TotalC = 1 + 1 + 3 + 4 + 2 + 5 + 6 =22
TotalD = TotalA + TotalC TotalD = 12 + 22 = 34
ControlNumber = 10 – the last digit of TotalD
(If the last digit of TotalD is 0, the ControlNumber becomes 0.) ControlNumber = 10 – 4 = 6
Compare the calculated ControlNumber to the control digit of the ID number. ControlNumber = control digit (last digit) of ID number. Therefore it is a valid ID number.
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14352
    
  22

Look at this part of your code.

What's happening here: You first format a date using the format "yyyy/MM/dd : HH/MM". The result is a string that looks like this: "2013/03/19 : 09/03"

Then you try to parse that string as if it is an integer (to get the year). But "2013/03/19 : 09/03" is ofcourse not a valid integer.

So, don't try to parse "2013/03/19 : 09/03" as if it is an integer. Do something else instead. Do you need to get the year? Use java.util.Calendar for that:

Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 8250
    
  23

Jesper de Jong wrote:You first format a date using the format "yyyy/MM/dd : HH/MM"...

@Nicholas: And the simple fact is that you can't convert all ID's to dates because you only have a 2-digit year.

It's relatively easy to work out that "550607" is 1955/06/07, but what about "100607" - is that 2010/06/07 or 1910/06/07?

I seem to remember that South Africa held the record for the world's oldest living person for a short while.

Winston

Isn't it funny how there's always time and money enough to do it WRONG?
Articles by Winston can be found here
Nicholas Lefebvre
Greenhorn

Joined: Feb 05, 2013
Posts: 23
Ok i got the date from the pc.
But with what your are saying about the 2 digit year what should i do.
Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 8250
    
  23

Nicholas Lefebvre wrote:But with what your are saying about the 2 digit year what should i do.

Well, if this really is a proper South African ID number, I'd find out what the government does.

Alternatively, you could use the current year (ie, 13 right now), and subtract 1 from the current century (20) if the yy field is greater than it; however, it's a bit of a kludge.

BTW, typical example of a government code designed by idiots (indeed, probably by a committee of them).

Winston

PS: Please DontWriteLongLines. I've tried to break yours up as best I can, but it makes your Thread very hard to read.
 
Don't get me started about those stupid light bulbs.
 
subject: ID number errors