MyKad parser for Malaysian IC numbers
Paste MyKad numbers, get a clean CSV with birthdate, age, gender and birth state for every number, plus a report of anything rejected.
🔒 100% client-side · zero server upload
What was removed
Malaysian rules & edge cases
Structure: YYMMDD-PB-GGGG. The first six digits are the date of birth, the next two are the place-of-birth (PB) state code, and the last four are the serial number whose final digit encodes gender.
| Segment | Meaning | Rule |
|---|---|---|
| YYMMDD | Date of birth | Century rule: YY is read as 20YY when it is not later than this year, otherwise as 19YY — so 30 is 1930 and 26 is 2026 (a documented heuristic, not an official JPN rule) |
| PB | Place-of-birth state code | 01–16 map to the states below. JPN also uses 17–59 and 82 for state codes it does not publish as a one-to-one table, so those read Unknown; 60–99 are country codes (born outside Malaysia) |
| GGGG | Serial number | Last digit odd = male, even = female |
| PB | Place of birth |
|---|---|
| 01 | Johor |
| 02 | Kedah |
| 03 | Kelantan |
| 04 | Melaka |
| 05 | Negeri Sembilan |
| 06 | Pahang |
| 07 | Penang |
| 08 | Perak |
| 09 | Perlis |
| 10 | Selangor |
| 11 | Terengganu |
| 12 | Sabah |
| 13 | Sarawak |
| 14 | WP Kuala Lumpur |
| 15 | WP Labuan |
| 16 | WP Putrajaya |
| 17–59, 82 | Unknown — JPN codes this tool cannot map to one state |
| 60–99 | Outside Malaysia (country code; 60 is Brunei, 61 Indonesia, 62 Singapore and so on) |
Dates must be real calendar dates: month 13, February 30 and similar are rejected and reported. Ages are completed years at today. Numbers may be typed with dashes (850615-07-4567) or as 12 bare digits (850615074567); anything else on the line is treated as free text around the number. Duplicates are dropped after the first occurrence.
Before and after
Before
Ali: 900101-10-1234
Siti 850615074567
Mei Ling — 880202-08-1356
Ali again: 900101-10-1234
Rosnah (IC rosak) 901301-07-9999 After
ic,birthdate_iso,age,gender,state_code,state,status
900101-10-1234,1990-01-01,36,female,10,Selangor,valid
850615-07-4567,1985-06-15,41,male,07,Penang,valid
880202-08-1356,1988-02-02,38,female,08,Perak,valid How it works
- Paste MyKad numbers into the INPUT box — dashes optional, extra text on the line is fine. Or press "Load sample data" for a Malaysian example.
- Press Run. Every valid number becomes one CSV row with birthdate, age, gender and birth state.
- Copy the CSV, or check the report below to see which lines were rejected and why — nothing was uploaded.
FAQ
Does this upload my IC numbers to a server?
No. The whole tool is static JavaScript in your browser. You can open the Network tab and confirm zero requests, which matters because IC numbers are highly sensitive personal data.
How is the century decided for the two-digit year?
YY is read as 20YY when it is not later than the current year, otherwise as 19YY: in 2026 a YY of 30 means 1930. The number itself never says which century it belongs to, so verify borderline cases separately.
How is gender decoded?
The last digit of the four-digit serial number: odd means male, even means female. This is the standard MyKad convention, but it is a decoding rule, not a verified identity check.
What does the state column mean for codes 21 to 99?
Codes 01 to 16 map to the 13 states and 3 federal territories. JPN also uses 17–59 and 82 for further state codes, but there is no published one-to-one table for them, so this tool prints Unknown rather than guessing. Codes 60–99 are country codes for births outside Malaysia, and those print Outside Malaysia.
Can it check that an IC number is genuine?
No. This tool only decodes the format — a real calendar date, a plausible state code, and a gender digit. It cannot verify that a number was actually issued by JPN or belongs to the person presenting it.