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.

SegmentMeaningRule
YYMMDDDate of birthCentury 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)
PBPlace-of-birth state code01–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)
GGGGSerial numberLast digit odd = male, even = female
PBPlace of birth
01Johor
02Kedah
03Kelantan
04Melaka
05Negeri Sembilan
06Pahang
07Penang
08Perak
09Perlis
10Selangor
11Terengganu
12Sabah
13Sarawak
14WP Kuala Lumpur
15WP Labuan
16WP Putrajaya
17–59, 82Unknown — JPN codes this tool cannot map to one state
60–99Outside 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

  1. 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.
  2. Press Run. Every valid number becomes one CSV row with birthdate, age, gender and birth state.
  3. 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.