社会保障卡读取基本文件数据
關于社會保障卡(社保卡)內容的具體資料,請查閱“人社信息函 2012 37 號 關于印發社會保障卡文件結構和數據項(V2.0)的通知”
卡內只有EF05-發卡機構數據文件和EF06-持卡人的基本信息文件是不需要密碼驗證就可以讀取的,以下只針對這兩個文件內容的讀取操作進行說明。
數據項的格式與屬性
請參閱:https://www.cnblogs.com/nightnine/p/11495740.html
APDU指令格式:
| CLA | INS | P1 | P2 | Lc | Data | Le |
讀取數據項分三步:
1、先選擇 社會保障系統環境
APDU指令:00 A4 04 00 0F 7378312E73682EC9E7BBE1B1A3D5CF
說明:
00 A4:APDU的select file指令(CLA? ?INS)
04 00:參數(P1? ?P2)具體參數項及含義不詳,網上資料太少
0F:后面跟隨的參數的長度
7378312E73682EC9E7BBE1B1A3D5CF:轉換為CHAR后=sx1.sh.社會保障
命令可理解為:按應用標識符選擇應用文件
2、選擇EF06文件
APDU指令:00 A4 02 00 02 EF06
00 A4:同上
02:P1參數,按文件標志符選擇文件
00:P2參數
02:后面跟隨的參數的長度
EF06:文件標志符
3、選擇所需的數據項并返回數據,兩種指令都可以使用
APDU指令1:00 B2 01 04 00
00B2:APDU的READ RECORD指令(CLA? ?INS)
01:P1參數,數據項序號,根據第二步選擇的文件按順序排列
04:P2參數,按數據項序號讀取
00:期望返回的數據長度(經測試似乎沒啥卵用)
APDU指令2:00 B2 08 00 00
00B2:APDU的READ RECORD指令(CLA? ?INS)
08:P1參數,數據項標志
00:P2參數,按數據項標志讀取
00:期望返回的數據長度(經測試似乎沒啥卵用)
?
調試經驗:
使用德卡T10讀卡器,在delphi7下調試
指令入參不能使用array 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是返回的數據Data的有效長度
返回值要注意數據類型是an或是cn
an類型的值用Chr(Data[I])轉換,cn類型的用IntToHex(Data[2],2)轉換
返回值中前兩個字節跳過不可用,末兩個字節是執行狀態代碼,$9000表示成功,其它代表失敗,可通過查詢APDU應答狀態碼查看失敗原因
?
總結
以上是生活随笔為你收集整理的社会保障卡读取基本文件数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【科普贴】LDO电源详解
- 下一篇: Android中的四大天王