社会保障卡读取基本文件数据
關(guān)于社會(huì)保障卡(社保卡)內(nèi)容的具體資料,請(qǐng)查閱“人社信息函 2012 37 號(hào) 關(guān)于印發(fā)社會(huì)保障卡文件結(jié)構(gòu)和數(shù)據(jù)項(xiàng)(V2.0)的通知”
卡內(nèi)只有EF05-發(fā)卡機(jī)構(gòu)數(shù)據(jù)文件和EF06-持卡人的基本信息文件是不需要密碼驗(yàn)證就可以讀取的,以下只針對(duì)這兩個(gè)文件內(nèi)容的讀取操作進(jìn)行說(shuō)明。
數(shù)據(jù)項(xiàng)的格式與屬性
請(qǐng)參閱:https://www.cnblogs.com/nightnine/p/11495740.html
APDU指令格式:
| CLA | INS | P1 | P2 | Lc | Data | Le |
讀取數(shù)據(jù)項(xiàng)分三步:
1、先選擇 社會(huì)保障系統(tǒng)環(huán)境
APDU指令:00 A4 04 00 0F 7378312E73682EC9E7BBE1B1A3D5CF
說(shuō)明:
00 A4:APDU的select file指令(CLA? ?INS)
04 00:參數(shù)(P1? ?P2)具體參數(shù)項(xiàng)及含義不詳,網(wǎng)上資料太少
0F:后面跟隨的參數(shù)的長(zhǎng)度
7378312E73682EC9E7BBE1B1A3D5CF:轉(zhuǎn)換為CHAR后=sx1.sh.社會(huì)保障
命令可理解為:按應(yīng)用標(biāo)識(shí)符選擇應(yīng)用文件
2、選擇EF06文件
APDU指令:00 A4 02 00 02 EF06
00 A4:同上
02:P1參數(shù),按文件標(biāo)志符選擇文件
00:P2參數(shù)
02:后面跟隨的參數(shù)的長(zhǎng)度
EF06:文件標(biāo)志符
3、選擇所需的數(shù)據(jù)項(xiàng)并返回?cái)?shù)據(jù),兩種指令都可以使用
APDU指令1:00 B2 01 04 00
00B2:APDU的READ RECORD指令(CLA? ?INS)
01:P1參數(shù),數(shù)據(jù)項(xiàng)序號(hào),根據(jù)第二步選擇的文件按順序排列
04:P2參數(shù),按數(shù)據(jù)項(xiàng)序號(hào)讀取
00:期望返回的數(shù)據(jù)長(zhǎng)度(經(jīng)測(cè)試似乎沒(méi)啥卵用)
APDU指令2:00 B2 08 00 00
00B2:APDU的READ RECORD指令(CLA? ?INS)
08:P1參數(shù),數(shù)據(jù)項(xiàng)標(biāo)志
00:P2參數(shù),按數(shù)據(jù)項(xiàng)標(biāo)志讀取
00:期望返回的數(shù)據(jù)長(zhǎng)度(經(jīng)測(cè)試似乎沒(méi)啥卵用)
?
調(diào)試經(jīng)驗(yàn):
使用德卡T10讀卡器,在delphi7下調(diào)試
指令入?yún)⒉荒苁褂胊rray of char或array of byte變量,需使用PChar(#$00#$A4#$02#$00#$02#$EF#$06)形式傳入指令
例:
varicdev, DataLen : Cardinal;Data : array[0..31] of Byte; begindc_cpuapduInt(icdev, 5, PChar(#$00#$B2#$08#$00#$12), @DataLen, @Data) end;DataLen是返回的數(shù)據(jù)Data的有效長(zhǎng)度
返回值要注意數(shù)據(jù)類(lèi)型是an或是cn
an類(lèi)型的值用Chr(Data[I])轉(zhuǎn)換,cn類(lèi)型的用IntToHex(Data[2],2)轉(zhuǎn)換
返回值中前兩個(gè)字節(jié)跳過(guò)不可用,末兩個(gè)字節(jié)是執(zhí)行狀態(tài)代碼,$9000表示成功,其它代表失敗,可通過(guò)查詢(xún)APDU應(yīng)答狀態(tài)碼查看失敗原因
?
總結(jié)
以上是生活随笔為你收集整理的社会保障卡读取基本文件数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【科普贴】LDO电源详解
- 下一篇: Android中的四大天王