Reading myKad and Parse data via APDU command

For those who would like to develop MyKad integrated system which enable to perform fingerprint verification, data identifcation using myKad. Here are some details about the data that you can translate from myKad to human readable information.

Data Types

SDK Function Name        Data type        Data when unused (hex)
JPN_OrgName              string
JPN_GMPCName             stringM
JPN_KPTName              stringM
JPN_IDNum                string
JPN_Gender               'L' or 'P'
JPN_OldIDNum             string
JPN_BirthDate            date
JPN_BirthPlace           string
JPN_DateIssued           date
JPN_Citizenship          string
JPN_Race                 string
JPN_Religion             string
JPN_EastMalaysian        ' ' or ?         20
JPN_RJ                   ?                20 20
JPN_KT                   ?                20 20
JPN_OtherID              string           spaces
JPN_Category             ?                20
JPN_CardVer              02?
JPN_GreenCardExpiry      date             00 00 00 00
JPN_GreenCardNationality string           spaces
JPN_Photo                JPEG

JPN_Thumb1               thumbprint
JPN_Thumb2               thumbprint

JPN_Address1             string
JPN_Address2             string           spaces
JPN_Address3             string           spaces
JPN_Postcode             postcode
JPN_City                 string
JPN_State                string

JPN_SocsoNum             string           spaces

JPN_Locality             string           spaces

JPJ_OwnerCategory        '1' or others
JPJ_LicenseType          3 char codes     spaces
JPJ_VehicleClass         3 char codes     spaces
JPJ_PSVUsage             string           spaces
JPJ_PSVDesc              string           spaces
JPJ_GDLUsage             string           spaces
JPJ_GDLDesc              string           spaces
JPJ_ValidityPeriod       dates            zeros
JPJ_HandicappedReg       string           spaces
JPJ_KejaraPoints         ?                00
JPJ_SuspensionNum        ?                00
JPJ_LastKejaraUpdate     date             00 00 00 00

IMM_PMAPassportNum       string           spaces
IMM_PMADocType           3 char code      spaces
IMM_PMAExpiryDate        date             00 00 00 00

IMM_PMTSporePassportNum  string           spaces
IMM_PMTSporeDocType      3 char code      spaces
IMM_PMTSporeExpiryDate   date             00 00 00 00

IMM_PMTBruneiPassportNum string           spaces
IMM_PMTBruneiDocType     3 char code      spaces
IMM_PMTBruneiExpiryDate  date             00 00 00 00

IMM_PMTResvPassportNum   string           spaces
IMM_PMTResvDocType       3 char code      spaces
IMM_PMTResvExpiryDate    date             00 00 00 00

Types:
string
ANSI/ASCII code character string, not null terminated, space (0x20) padded

stringM
ANSI/ASCII code character string, not null terminated
multi-line, each line is space (0x20) padded
Example name: Lee Kee Lim @ Lee Key Lim
is coded as
"Lee Kee Lim @       "
"Lee Key Lim         "
which is
4C 65 65 20 4B 65 65 20 4C 69 6D 20 20 20 20 20
20 20 20 20 4C 65 65 20 4B 65 79 20 4C 69 6D 20
20 20 20 20 20 20 20 20

date
Four byte, packed BCD, yy yy mm dd
20 01 05 30 (hex) = 30 May 2001

postcode
3 byte, packed BCD
12 34 50 (hex) = 12345

3 char codes (JPJ_LicenseType)
Four fields of 3-character codes concatenated.
Unused positions are filled with "   " (3 spaces).
"PDL"   Learner's Licence
"PRB"   Probationary (P) Licence
"CDL"   Competence Driving Licence

3 char codes (JPJ_VehicleClass)
Four fields of 3-character codes concatenated.
Unused positions are filled with "   " (3 spaces).
"1D "   Class D, cars

dates (JPJ_ValidityPeriod)
Four pairs {Begin, Expire} of date.
Unused positions are filled with zeros.

3 char code (IMM_*DocType)
Unknown
jpn-1-1
Offset  Length  Length  SDK Function Name        Description
       (Hex)   (Dec)
0000     03        3                          01 04 24
0003     96      150    JPN_OrgName              original name
0099     50   30+30+20  JPN_GMPCName             GMPC name
00E9     28     20+20   JPN_KPTName              KPT name
0111     0D       13    JPN_IDNum                ID number
011E     01        1    JPN_Gender               gender
011F     08        8    JPN_OldIDNum             old ID number
0127     04        4    JPN_BirthDate            date of birth
012B     19       25    JPN_BirthPlace           place of birth
0144     04        4    JPN_DateIssued           date issued
0148     12       18    JPN_Citizenship          citizenship
015A     19       25    JPN_Race                 race
0173     0B       11    JPN_Religion             religion
017E     01        1    JPN_EastMalaysian        East Malaysian
017F     02        2    JPN_RJ                   RJ?
0181     02        2    JPN_KT                   KT?
0183     0B       11    JPN_OtherID              other ID
018E     01        1    JPN_Category             category
018F     01        1    JPN_CardVer              card version
0190     04        4    JPN_GreenCardExpiry      green card expiry date
0194     14       20    JPN_GreenCardNationality green card nationality
01A8     23       35                             All 00

jpn-1-2
0000     03        3                             01 40 03
0003    FA0     4000    JPN_Photo                JPEG photo
0FA3     08        8                             All 00

jpn-1-3
0000     03        3                             01 12 03
0003     14       20                             "R1L1",0,0...
0017    256      598    JPN_Thumb1               thumprint 1 (right thumb)
026D    256      598    JPN_Thumb2               thumprint 2 (left thumb)
04C3     08        8                             All 00

jpn-1-4
0000     03        3                             01 01 52
0003     1E       30    JPN_Address1             address line 1
0021     1E       30    JPN_Address2             address line 2
003F     1E       30    JPN_Address3             address line 3
005D     03        3    JPN_Postcode             postcode
0060     19       25    JPN_City                 city
0079     1E       30    JPN_State                state
0097     14       20                             FF 00 00...

jpn-1-5
0000     03        3                             01 12 00
0003     09        9    JPN_SocsoNum             socso number
000C     1F       31                             All 00

jpn-1-6
0000     03        3                             01 17 00
0003     0A       10    JPN_Locality             locality
000D     1E       30                             All 00

jpj-1-1
Offset  Length  Length  SDK Function Name        Description
       (Hex)   (Dec)
0000     03        3                             01 04 16
0003     01        1    JPJ_OwnerCategory        owner category
0004     0C       12    JPJ_LicenseType          licence type
0010     1E       30    JPJ_VehicleClass         vehicle class
002E     06        6    JPJ_PSVUsage             PSV usage
0034     96      150    JPJ_PSVDesc              PSV description
00CA     06        6    JPJ_GDLUsage             GDL usage
00D0     96      150    JPJ_GDLDesc              GDL description
0166     20       32    JPJ_ValidityPeriod       validity period
0186     14       20    JPJ_HandicappedReg       handicapped registration
019A     01        1    JPJ_KejaraPoints         kejara points
019B     01        1    JPJ_SuspensionNum        suspension number
019C     04        4    JPJ_LastKejaraUpdate     last kejara update
01A0     0B       11                             All 00

imm-1-1
0000     03        3                             01 22 00
0003     0C       12    IMM_PMAPassportNum       PMA passport number
000F     03        3    IMM_PMADocType           PMA document type
0012     04        4    IMM_PMAExpiryDate        PMA expiry date
0016     15       21                             All 00

imm-1-2
0000     03        3                             01 22 00
0003     0C       12    IMM_PMTSporePassportNum  PMT S'pore passport no
000F     03        3    IMM_PMTSporeDocType      PMT S'pore doc type
0012     04        4    IMM_PMTSporeExpiryDate   PMT S'pore expiry date
0016     15       21                             All 00

imm-1-3
0000     03        3                             01 22 00
0003     0C       12    IMM_PMTBruneiPassportNum PMT Brunei passport no
000F     03        3    IMM_PMTBruneiDocType     PMT Brunei doc type
0012     04        4    IMM_PMTBruneiExpiryDate  PMT Brunei expiry date
0016     15       21                             All 00

imm-1-4
0000     03        3                             01 22 00
0003     0C       12    IMM_PMTResvPassportNum   PMT Resv passport no
000F     03        3    IMM_PMTResvDocType       PMT Resv doc type
0012     04        4    IMM_PMTResvExpiryDate    PMT Resv expiry date
0016     15       21                             All 00

 

Nik Izwan Kamel is an Entrepreneur who venture in multiple businesses in different industries including IT, Blockchain, E-Commerce, Security, Retail and F&B. A cryptocurrency enthusiast and cooking computer codes at night.

Leave a reply:

Your email address will not be published.

Site Footer