精倫iDR210/iDR200最新開發包-通用二次開發包V4.2.2.8_通用_20221021
精倫iDR210/iDR200最新開發包-通用二次開發包V4.2.2.8_通用_20221021
精 倫 電 子 股 份 有 限 公 司
iDR210/iDR200聯機型身份證閱讀器
通用二次開發包接口說明
更新說明:
V4.2.2.6 新增雙通道通信接口
V4.2.2.4 新增項目認證碼綁定
V4.2.2.3 新增接口返回照片base64文本信息
V4.2.2.2 新增港澳臺證正反面接口
V4.2.1.9 增加eID相關的讀卡接口
V4.2.0.9 增加對外國居留證卡的信息讀取接口功能。
V4.2.0.0 增加對Mifare UltraLight卡的支持。
V4.1.0.4 增加身份證正反面合成功能。
V4.0.1.10解決CPU卡發送超過58字節數據問題,需要iDR210-1 HID(ERP號后五位為13003)讀卡器單片機軟件版本升級為V20.0.3以上才能支持。
V4.0.1.5增加對護照讀卡器的支持。
V4.0.1.2增加Routon_RepeatRead函數,可控制是否連續讀身份證。
V4.0.1.0增加對M1- S70卡支持。
V4.0.0.7讀身份證信息前的容錯處理。
V4.0.0.5增加對CCID接口的210-P護照讀卡器支持。增加Routon_Mute函數,在讀卡前調用,可控制蜂鳴不發聲。
V3.5.1.8解決照片解碼相關的一個可能問題。
V3.5.1.7解決ReadBaseInfos和ReadBaseInfosPhoto的輸出圖片受到系統當前目錄設定干擾的問題。
V3.5.1.5 解決一個潛在造成內存泄漏的問題。
V3.5.1.3 去掉原sdtapi.dll對jpgdll.dll的依賴。
V3.5.1.0 解決接入部標版時,有時無法找到身份證的問題。
V3.5.0.4 增加GetHIDCount、HIDSelect接口,可控制一臺PC上分別讀取多臺HID 接口的iDR210 。
V3.5.0.3 增加Routon_ ShutDownAntenna接口,關閉天線。
V3.5 增加Routon_CPUCard_PowerOFF、Routon_CPUCard_Active、Routon_CPUCard_RATS、Routon_CPUCard_PPS等接口,支持CPU卡。
V3.4 增加指紋信息讀取接口ReadBaseFPMsg,建議在讀取指紋信息前,先判斷當前設備是否支持指紋信息讀取IsFingerPrintDevice,調用細節請參考示例。
目錄
目錄 - 3 -
1. 概述 - 6 -
2. 系統要求 - 6 -
3. 接口文件說明 - 7 -
4. Sdtapi.ll接口函數說明 - 7 -
4.1. 端口函數 - 7 -
4.1.1. 端口初始化函數 - 7 -
4.1.2. 端口關閉接口 - 8 -
4.1.3. 關閉天線接口 - 8 -
4.1.4. 獲取當前接入的HID接口iDR210數量 - 9 -
4.1.5. 設定當前操作的HID接口iDR210 - 9 -
4.2. 讀二代證相關函數 - 9 -
4.2.1. 卡認證接口 - 9 -
4.2.2. 讀卡信息接口 - 10 -
4.2.3. 讀追加地址信息 - 15 -
4.2.4. 讀卡體管理號 - 17 -
4.2.5. 讀模塊序列號 - 18 -
4.2.6. 判斷身份證是否在設備上 - 18 -
4.2.7. 判斷設備是否支持指紋信息讀取 - 19 -
4.2.8. 讀指紋及卡信息接口 - 19 -
4.2.9. 讀證件信息,照片保存為Base64 - 20 -
4.2.10. 項目認證碼綁定設備 - 21 -
4.2.11. 獲取設備項目認證碼 - 22 -
4.2.12. 檢驗設備項目標識是否匹配 - 22 -
4.2.13. 設置讀卡雙通道 - 23 -
4.2.14. 雙通道之從通道接收信息 - 23 -
4.3. Type A卡相關函數 - 24 -
4.3.1. 找IC卡 - 24 -
4.3.2. 讀IC卡序列號高級函數 - 24 -
4.3.3. 讀IC卡區塊高級函數 - 25 -
4.3.4. 寫IC卡區塊高級函數 - 25 -
4.3.5. 控制蜂鳴器和指示燈 - 26 -
4.3.6. 讀取PSAM卡ATR數據 - 27 -
4.3.7. 向PSAM卡發送數據 - 28 -
4.3.8. PSAM卡下電 - 28 -
4.3.9. dc_init - 29 -
4.3.10. dc_exit - 29 -
4.3.11. dc_request - 29 -
4.3.12. dc_anticoll - 30 -
4.3.13. dc_select - 30 -
4.3.14. dc_authentication_passaddr - 30 -
4.3.15. dc_read - 31 -
4.3.16. dc_write - 31 -
4.3.17. dc_halt - 31 -
4.3.18. dc_BeepLED - 31 -
4.3.19. Routon_CPUCard_PowerOFF - 32 -
4.3.20. Routon_CPUCard_Active - 32 -
4.3.21. Routon_CPUCard_ATS - 32 -
4.3.22. Routon_CPUCard_PPS - 33 -
4.3.23. Routon_APDU - 33 -
4.3.24. Routon_ ShutDownAntenna - 33 -
4.3.25. Routon_Mute(bool isMute) - 34 -
4.3.26. Routon_RepeatRead(bool isRepeat) - 34 -
4.3.27. Routon_IsSaveWlt(bool isWlt) - 35 -
4.3.28. ReadBaseInfosFPPhoto(char* Name, char* Gender, char* Folk, char* BirthDay, char * Code, char* Address, char* Agency, char* ExpireStart, char* ExpireEnd, char* directory, unsigned char * pucFPMsg, unsigned int * puiFPMsgLen) - 35 -
4.3.29. Routon_DecideIDCardType() - 36 -
4.3.30. Routon_ReadForeignBaseInfos (char *enName, char *Gender, char *Code, char *Nation, char *cnName, char *BirthDay, char * ExpireStart,char* ExpireEnd) - 37 -
4.3.31. Routon_ReadForeignBaseInfosPhoto (char*enName, char *Gender, char *Code, char *Nation, char *cnName, char *BirthDay, char * ExpireStart,char* ExpireEnd,char* directory) - 38 -
4.3.32. Routon_ReadAllForeignBaseInfos (char*EnName, char *Gender, char *Code, char *Nation, char *CnName, char *BirthDay, char * ExpireStart,char* ExpireEnd,char* CardVertion,char *Agency,char *CardType, char *FutureItem) - 39 -
4.3.33. Routon_ReadAllForeignBaseInfosPhoto (char*EnName, char *Gender, char *Code, char *Nation, char *CnName, char *BirthDay, char * ExpireStart,char* ExpireEnd,char* CardVertion,char *Agency,char *CardType, char *FutureItem,char *Directory) - 40 -
4.3.34. Routon_ReadAllGATBaseInfos (char*Name, char *Gender,char *FutureItem1, char* BirthDay,char *Address, char *Code, char *Agency, char * ExpireStart,char* ExpireEnd,char *PassID,char *SignCnt, char *FutureItem2,char *CardType,char *FutureItem3) - 42 -
4.3.35. Routon_ReadAllGATBaseInfosPhoto (char*Name, char *Gender,char *FutureItem1, char* BirthDay,char *Address, char *Code, char *Agency, char * ExpireStart,char* ExpireEnd,char *PassID,char *SignCnt, char *FutureItem2,char *CardType,char *FutureItem3,char *Directory) - 43 -
4.3.36. FindAllUSB(int *SCount, int *HCount) - 44 -
4.3.37. SelectUSB(int index) - 45 -
4.3.38. CloseSDTandHIDComm(int index) - 45 -
4.3.39. InitSDTandHIDComm(int index) - 46 -
4.3.40. Routon_ReadAllTypeCardInfos(int port, char* pMsg, char *PhotoPath) - 46 -
4.4. eID卡相關函數 - 47 -
4.4.1 eID_Authenticate() - 47 -
4.4.2讀eID卡原始信息 - 48 -
4.4.3 讀eID基本信息 - 49 -
5. 接口使用流程及示例 - 50 -
5.1. 二代證示例 - 50 -
5.2. TypeA卡示例(iDR210) - 51 -
5.3. 讀取指紋及身份證信息示例(iDR210) - 52 -
5.4. CPU卡操作示例(iDR210) - 54 -
5.5. 外國人居留證操作示例(iDR200/iDR210) - 54 -
5.6. “部標”設備和HID設備同時連接PC,讀卡示例(iDR210) - 55 -
5.7. 外國證居留證生成正反面照片操作示例(iDR210) - 56 -
5.8. eID讀卡示例 - 57 -
1.概述
精倫電子開發的二代身份證讀卡系列機具適用于相關行業的聯機型應用。產品提供了完善的二次軟件開發接口(API)。本手冊對開發接口的文件組成、函數定義格式、調用方法及返回值等進行詳細的說明。
本通用開發包支持的設備型號如下:
1、iDR200(串口和USB口)。
2、iDR320(必須進入“同步應用”模式)。
3、iDR400-1(必須進入“同步”模式)。
4、iDR210(USB-HID免驅動接口)。
5、iDR210(串口)。
注意:完全兼容原2.0版本開發接口,支持USB-HID接口和串口的iDR210。
1、如果使用原開發包采用動態調用dll方式,只需直接替換原dll即可。
2、如果使用原開發包采用的靜態調用方式,則在不改變代碼的情況下,對原程序重新編譯鏈接即可。
2.系統要求
使用本API的PC機,必須滿足下列條件:
?Windows 98、Windows 2000 Pro、Windows 2000 Server、
Windows XP。
?至少32兆內存(32M RAM or Larger)。
?至少10兆空閑硬盤空間(10M Free Hard Disk Space or Larger)。
?至少一個空閑普通串口或USB口(視用戶需求而定)。
3.接口文件說明
接口文件包括:
Dewlt.dll 相關動態聯接庫
sdtapi.dll 該文檔所有說明的接口都在該動態聯接庫
SavePhoto.dll 相關動態聯接庫
sdtapi.h 該文檔包括的所有接口的頭文件
適用開發語言:
Visual C++ 5.0 及以后版本
C++ Builder 5.0 及以后版本
Visual Basic 5.0 及以后版本
Delphi 3.0 及以后版本
PowerBuilder 5.0 及以后版本
4.Sdtapi.ll接口函數說明
4.1.端口函數
4.1.1.端口初始化函數
原 型:int InitComm (int iPort)
說 明:本函數用于打開串口或USB并檢測讀卡設備是否就緒。
參 數:iPort:設置串口、USB(公安部標準驅動)、USB-HID(免驅動)、USB-CCID接口。
串口 1 – 16(十進制) 例如:
1: 1(COM1)
2:2(COM2)
USB 1001 1001
返 回 值:
值 意義
1 正確
其它 錯誤
注:如果讀卡機具連接的端口是確定的,可以直接使用相應端口號調用本函數。否則,可以采用循環查找的方式調用本函數。
4.1.2.端口關閉接口
原 型:int CloseComm(void)
說 明:本函數用于關閉已打開的端口,一般在調用InitComm成功并完成讀卡任務后調用。
參 數:無
返 回 值:
值 意義
1 正確
其它 錯誤
注意:如果不再使用已打開的端口,必須使用CloseComm函數關閉端口。
4.1.3.關閉天線接口
原 型:int Routon_ShutDownAntenna (void)
說 明:本函數用于關閉天線場強。使用前必須端口初始化(InitComm)成功,關閉天線后,調用卡認證接口或者找卡命令,天線場強將自動打開。
參 數:無
返 回 值:
值 意義
1 正確
0 錯誤
-1 端口未打開
4.1.4.獲取當前接入的HID接口iDR210數量
原 型:int GetHIDCount (void)
說 明:本函數用于獲取當前接入的HID接口iDR210的數量。使用前必須端口初始化(InitComm)成功。
參 數:無
返 回 值:
值 意義
數字 設備數量
4.1.5.設定當前操作的HID接口iDR210
原 型:bool HIDSelect (int index)
說 明:本函數用于設定當前操作的HID接口iDR210。使用前必須端口初始化(InitComm)成功。
參 數:index,指定的iDR210的索引號。比如當前接入的設備數量是2,則在調用認證或找卡函數前,可分別使用HIDSelect (1)或HIDSelect (2)來指定準備操作的iDR210設備。
返 回 值:
值 意義
true 成功
false 失敗
4.2.讀二代證相關函數
4.2.1.卡認證接口
原 型:int Authenticate (void)
說 明:本函數用于發現身份證卡并選擇卡。
參 數:無
返 回 值:
值 意義
1 正確
0 錯誤
注:認證卡時,需要將身份證放置于讀卡機具上方并做稍許時間的停留。如果函數返回錯誤表示沒有發現卡或者卡停留時間太短。
4.2.2.讀卡信息接口
原 型:int ReadBaseMsg( unsigned char * pMsg, int * len);
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息已經分段解析,輸出格式為單字節,且每一字段信息已經被表示為字符串。圖象信息被解碼后存為文件photo.bmp(在當前工作目錄下)。
參 數:
pMsg [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小于192。函數調用成功后,各字段的文本信息已經轉換為單字節形式,并表示為字符串格式。字段意義及偏移值如下所示:
項目 長度(字節) 說明
姓名 31 漢字
性別 3 漢字
民族 10 漢字
出生日期 9 CCYYMMDD
住址 71 漢字和數字
公民身份號碼 19 數字
簽發機關 31 漢字
有效期起始日期 9 CCYYMMDD
有效期截止日期 9 CCYYMMDD
有效期為長期的表示為漢字“長期”
Len [out] 整數, 返回總字符長度,可以給空值(NULL)。
返 回 值:
值 意義
1 正確
0 錯誤
原 型2:int ReadBaseMsgPhoto( unsigned char * pMsg, int * len,char * directory);
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息已經分段解析,輸出格式為單字節,且每一字段信息已經被表示為字符串。圖象信息被解碼后存為文件photo.bmp(在directory指定目錄下)。
參 數:
pMsg [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小于192。函數調用成功后,各字段的文本信息已經轉換為單字節形式,并表示為字符串格式。字段意義及偏移值如下所示:
項目 長度(字節) 說明
姓名 31 漢字
性別 3 漢字
民族 10 漢字
出生日期 9 CCYYMMDD
住址 71 漢字和數字
公民身份號碼 19 數字
簽發機關 31 漢字
有效期起始日期 9 CCYYMMDD
有效期截止日期 9 CCYYMMDD
有效期為長期的表示為漢字“長期”
Len [out] 整數, 返回總字符長度,可以給空值(NULL)。
directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(NULL),表示照片存儲在當前目錄中,此時函數效果同ReadBaseMsg。
返 回 值:
值 意義
1 正確
0 錯誤
4 目錄不存在
原 型3:int ReadBaseInfos( char * Name, char * Gender, char * Folk,
char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd)
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息以字符串格式輸出。照片信息被解碼后存為文件photo.bmp。
參 數:
Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Folk [out] 字符型指針,指向民族信息。需要在調用時分配內存,字節數不小10。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。
Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。
Agency [out] 字符型指針,指向簽證機關信息。需要在調用時分配內存,字節數不小31。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
返 回 值:
值 意義
1 正確
0 錯誤
-4 缺少dewlt.dll、savephoto.dll等DLL
原 型4:int ReadBaseInfosPhoto( char * Name, char * Gender, char * Folk,char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd,char * directory)
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息以字符串格式輸出。圖象信息被解碼后存為照片photo.bmp和photo.jpg,身份證正面反面合成圖片card.jpg(在directory指定目錄下)。
參 數:
Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Folk [out] 字符型指針,指向民族信息。需要在調用時分配內存,字節數不小10。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。
Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。
Agency [out] 字符型指針,指向簽證機關信息。需要在調用時分配內存,字節數不小31。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(NULL),表示照片存儲在當前目錄中,此時函數效果同ReadBaseInfos。
返 回 值:
值 意義
1 正確
0 錯誤
4 目錄不存在
-4 缺少dewlt.dll、savephoto.dll等DLL
原 型5:int ReadBaseMsgW( unsigned char * pMsg, int * len);
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息未解析,文字信息采用GB13000的UCS-2進行存儲,圖象信息被解碼后存為文件photo.bmp(在當前工作目錄下)。
參 數:
pMsg [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小于256。偏移值如下所示:
項目 長度(字節) 說明
姓名 30 漢字
性別 2 代碼
民族 4 代碼
出生 16 年月日:YYYYMMDD
住址 70 漢字和數字
公民身份號碼 36 數字
簽發機關 30 漢字
有效期起始日期 16 年月日:YYYYMMDD
有效期截止日期 16 年月日:YYYYMMDD
有效期為長期時存儲“長期”
最新住址 70 漢字和數字
Len [out] 整數, 返回基本信息長度。
返 回 值:
值 意義
1 正確
0 錯誤
原 型6:int ReadBaseMsgWPhoto( unsigned char * pMsg, int * len,char * directory));
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息未解析,文字信息采用GB13000的UCS-2進行存儲,圖象信息被解碼后存為文件photo.bmp(在directory指定目錄下)。
參 數:
pMsg [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小于256。偏移值如下所示:
項目 長度(字節) 說明
姓名 30 漢字
性別 2 代碼
民族 4 代碼
出生 16 年月日:YYYYMMDD
住址 70 漢字和數字
公民身份號碼 36 數字
簽發機關 30 漢字
有效期起始日期 16 年月日:YYYYMMDD
有效期截止日期 16 年月日:YYYYMMDD
有效期為長期時存儲“長期”
最新住址 70 漢字和數字
Len [out] 整數, 返回基本信息長度。
directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(NULL),表示照片存儲在當前目錄中,此時函數效果同ReadBaseMsgW。
返 回 值:
值 意義
1 正確
0 錯誤
4 目錄不存在
注:讀卡基本信息時,需要將身份證置于讀卡機具上方做稍許時間的停留。
4.2.3.讀追加地址信息
原 型1:int ReadNewAppMsg( unsigned char * pMsg, int * num );
說 明:本函數用于讀取卡中追加地址信息,輸出格式為單字節字符串格式。
參 數:
pMsg [out] 無符號字符指針,指向讀到的追加地址信息。需要在調用時分配內存,字節數不小于284。字段意義及偏移值如下所示:
項目 長度(字節) 說明
追加地址1 71 漢字和數字
追加地址2 71 漢字和數字
追加地址3 71 漢字和數字
追加地址4 71 漢字和數字
num [out] 整數, 返回讀到的追加地址數。最多為4個。
返 回 值:
值 意義
1 正確
0 錯誤
原 型2:int ReadNewAppInfos( unsigned char * addr1,
unsigned char * addr2,unsigned char * addr3,
unsigned char * addr4,int * num );
說 明:本函數用于讀取卡中追加地址信息,輸出格式為單字節字符串格式。
參 數:
addr1、addr2、addr3、addr4 [out] 無符號字符指針,分別指向讀到的追加地址信息。需要在調用時分配內存,字節數分別不小于71。
num [out] 整數, 返回讀到的追加地址數。最多為4個。
返 回 值:
值 意義
1 正確
0 錯誤
原 型3:int ReadNewAppMsgW( unsigned char * pMsg, int * num );
說 明:本函數用于讀取卡中追加地址信息,信息采用GB13000的UCS-2進行存儲。
參 數:
pMsg [out] 無符號字符指針,指向讀到的追加地址信息。需要在調用時分配內存,字節數不小于280。偏移值如下所示:
項目 長度(字節) 說明
追加地址1 70 漢字和數字
追加地址2 70 漢字和數字
追加地址3 70 漢字和數字
追加地址4 70 漢字和數字
num [out] 整數, 返回讀到的追加地址數。最多為4個。
返 回 值:
值 意義
1 正確
0 錯誤
注:讀追加地址信息時,需要將身份證置于讀卡機具上方做稍許時間的停留。
4.2.4.讀卡體管理號
原 型:int ReadIINSNDN( char * pMsg );
說 明:本函數用于讀取身份證卡的管理號。
參 數:
pMsg [out] 字符指針,需要在調用時分配內存,字節數不小于16。返回8個16進制證卡序列號。
返 回 值:
值 意義
1 正確
0 錯誤
注:針對ERP編碼為1IDA14016(即PCB型號B1342-3) 和 1IDA14018(即PCB型號B1342-3)的串口組件設備,請使用原型2接口來讀取身份證物理卡號。
原型2: int Routon_ReadIINSNDN( char * pMsg );
說 明:本函數用于讀取身份證卡的管理號。
參 數:
pMsg [out] 字符指針,需要在調用時分配內存,字節數不小于16。返回8個16進制證卡序列號。
返 回 值:
值 意義
1 正確
0 錯誤
4.2.5. 讀模塊序列號
原 型:int GetSAMIDToStr( char *pcSAMID );
說 明:本函數用于讀取驗證安全控制模塊(SAM_V)的序列號。
參 數:
pcSAMID [out] 字符指針,需要在調用時分配內存,字節數不小于37。模塊序列號分為5個部分,格式為『2字符.2字符-8字符-10字符-10字符』,共36個字符;
返 回 值:
值 意義
1 正確
0 協議包讀寫錯誤
-1 通訊失敗
-3 接收錯誤協議包
-4 讀取包錯誤(base64串口設備)
-5,-6,-8 讀取超時
4.2.6.判斷身份證是否在設備上
原 型:int CardOn ( void);
說 明:本函數用于用于判斷身份證是否在機具上。
注 意:只能用于讀卡之后判斷卡是否離開,在找卡、選卡、讀卡過程中不要使用本函數,會導致讀卡失敗!
參 數: 無
返 回 值:
值 意義
1 有身份證
0 無身份證
4.2.7.判斷設備是否支持指紋信息讀取
原 型:int IsFingerPrintDevice(void);
說 明:本函數用于判斷iDR210是否支持指紋信息讀取。
參 數:無
注 意:使用前需要先端口初始化InitComm。
返 回 值:
值 意義
1 支持
-1 設備不支持
-2 模塊不支持
4.2.8.讀指紋及卡信息接口
原 型:int ReadBaseFPMsg( unsigned char * pMsg, int * len ,unsigned char * pucFPMsg,unsigned int *puiFPMsgLen);
說 明:本函數用于讀取指紋信息及卡中基本信息,包括文字信息與圖像信息。文字信息已經分段解析,輸出格式為單字節,且每一字段信息已經被表示為字符串。圖象信息被解碼后存為文件photo.bmp(在當前工作目錄下)。
參 數:
pMsg [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小于192。函數調用成功后,各字段的文本信息已經轉換為單字節形式,并表示為字符串格式。字段意義及偏移值如下所示:
項目 長度(字節) 說明
姓名 31 漢字
性別 3 漢字
民族 10 漢字
出生日期 9 CCYYMMDD
住址 71 漢字和數字
公民身份號碼 19 數字
簽發機關 31 漢字
有效期起始日期 9 CCYYMMDD
有效期截止日期 9 CCYYMMDD
有效期為長期的表示為漢字“長期”
Len [out] 整數, 返回總字符長度,可以給空值(NULL)。
pucFPMsg [out] 無符號字符指針,指向讀到的指紋信息。需要在調用時分配內存,字節數不小于1024。
puiFPMsgLen [out] 整數, 返回指紋信息長度。
返 回 值:
值 意義
1 正確
0 錯誤
4.2.9.讀證件信息,照片保存為Base64
原 型:int Routon_ReadAllBaseInfos( char* Msg, char* HeadPhoto, char* FrontCopy, char* BackCopy, char* FingerPrint)
;
說 明:本函數用于讀取證件中的信息,包括文字信息與圖像信息、指紋信息以及合成仿復印件圖片信息。文字信息已經分段解析,輸出格式為字段以“:”隔開,且所有信息為字符串。圖象信息被解碼后以Base64編碼存儲。
參 數:
Msg [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小于256。函數調用成功后,各字段的文本信息已經轉換為單字節形式,每個字段以“:”隔開。字段意義如下所示:
序號 信息項 二代證 外國人 港澳臺
0 證件類型 A I J
1 中文姓名 姓名 中文姓名 姓名
2 英文姓名 英文姓名
3 性別 性別 性別 性別
4 性別代碼 性別代碼 性別代碼 性別代碼
5 民族 民族 國籍或所在地區
6 民族代碼 民族代碼 國籍或所在地區代碼 通行證號碼
7 出生日期 出生日期 出生日期 出生日期
8 住址 住址 住址
9 身份證號碼 公民身份號碼 永久居留證號碼 公民身份號碼
10 簽發機關 簽發機關 當次申請受理機關代碼 簽發機關
11 發卡日期 有效期
起始日期 證件簽發日期 有效期
起始日期
12 卡有效期 有效期
截止日期 證件終止日期 有效期
截止日期
13 證件版本號 證件版本號 簽發次數
HeadPhoto [out] 無符號字符指針,指向解碼后的bmp照片信息,信息經過base64編碼。需要在調用時分配內存,字節數不小于100k。
FrontCopy [out] 無符號字符指針,指向正面仿復印件jpg照片信息,信息經過base64編碼。需要在調用時分配內存,字節數不小于200k。
BackCopy [out] 無符號字符指針,指向反面仿復印件jpg照片信息,信息經過base64編碼。需要在調用時分配內存,字節數不小于200k。
FingerPrint [out] 無符號字符指針,指向讀到的指紋原始信息。需要在調用時分配內存,字節數不小于1024。
4.2.10.項目認證碼綁定設備
原 型:int Routon_SetProgramCode(char* ProgramCode);
說 明:用于客戶用項目碼綁定設備。
參 數:ProgramCode [in] 8字節的客戶項目碼。
返 回 值:
值 意義
1 成功
0 參數錯誤
-1 非HID設備,不支持該功能
-2 讀設備信息錯誤
-3 寫數據錯誤
-4 設備不支持
4.2.11.獲取設備項目認證碼
原 型:int Routon_GetProgramCode(char* ProgramCode);
說 明:用于獲取設備項目標識。
參 數:ProgramCode [out] 8字節的客戶項目碼。
返 回 值:
值 意義
1 成功
0 參數錯誤
-1 非HID設備,不支持該功能
-2 讀數據錯誤
4.2.12.檢驗設備項目標識是否匹配
原 型:int Routon_CheckProgramCode(char* ProgramCode);
說 明:用于檢驗設備項目標識是否匹配。
參 數:ProgramCode [in] 8字節的客戶項目碼。
返 回 值:
值 意義
1 匹配成功
0 參數錯誤
-1 獲取設備中項目識別碼失敗
-2 讀設備信息錯誤
-3 設備與項目不匹配
4.2.13.設置讀卡雙通道
原 型:int Routon_SetTransmissionChannel(bool isDoubleChanel);
說 明:用于設置雙通道讀卡設備是否開啟雙通道
參 數:isDoubleChanel [in] bool型,true 時開啟雙通道
返回值:
值 意義
1 設置成功
0 設備不支持
其他 其他錯誤
4.2.14.雙通道之從通道接收信息
原 型:int Routon_GetBaseMsg(int iPortID, unsigned char* pucCHMsg, unsigned int* puiCHMsgLen, unsigned char* pucPHMsg,
unsigned int *puiPHMsgLen, unsigned char* pucFPMsg, unsigned int* puiFPMsgLen, int iIfOpen)
說 明:從通道獲取主通道的讀卡信息
參 數: iPortID [in] 整型,從通道的端口信息,如USB設備“1001”,串口設備“5”。
pucCHMsg [out] 256字節身份證文本原始信息
puiCHMsgLen [out] 讀取的身份證文本信息長度
pucPHMsg [out] 1024字節身份證頭像照片原始wlt信息
puiPHMsgLen [out] 讀取的身份證頭像照片長度
pucFPMsg [out] 1024字節身份證指紋原始信息
puiFPMsgLen [out] 讀取的身份證指紋信息長度,有指紋長度為1024,無指紋位0。
iIfOpen [in] 是否打開設備標識,如果執行該接口之前就已經打開了端口則傳入0,不再打開設備。如果設備未打開,則傳入1。
返回值:
值 意義
0x90 從通道讀卡成功
0 錯誤
其他 讀卡錯誤
4.3.Type A卡相關函數
注意:串口型iDR200和iDR210支持讀寫Type A卡。
iDR210使用Routon開頭的相關函數。
串口型iDR200使用dc_開頭的相關函數。
4.3.1.找IC卡
原 型:int Routon_IC_FindCard();
說 明:本函數用于尋卡。
參 數: 無。
返 回 值:
值 意義
1 M1-S50卡
2 CPU卡
3 M1-S70卡
4 Mifare UltraLight卡
0 未找到卡
其他 不明卡錯誤碼
4.3.2.讀IC卡序列號高級函數
原 型:int Routon_IC_HL_ReadCardSN(char * SN);
說 明:本函數用于讀取IC卡的序列號,自動完成找卡、選卡等過程。
參 數: SN [out] 字符指針,需要在調用時分配內存,字節數不小于16。
返 回 值:
值 意義
1 正確
0 錯誤
4.3.3.讀IC卡區塊高級函數
原 型:
int Routon_IC_HL_ReadCard (int SID,int BID,
int KeyType,unsigned char * Key,
unsigned char * data);
說 明:本函數用于讀取IC卡指定扇區的數據內容,在調用本函數前需要先找卡Routon_IC_FindCard()。
參 數:
SID為扇區號,0-15之間(對M1S50卡)。
BID為塊號,0-3之間。
KeyType為密鑰類型,兩種:0x60 keyA,0x61 keyB。
Key為密鑰。
data為讀取到的數據內容,需要在調用時分配內存,字節數不小于16。
返 回 值:
值 意義
1 正確
0 讀卡錯誤
-1 參數錯誤
-3 密鑰或卡類型錯
備注:如果為Mifare UltraLight卡,參數SID,KeyType,Key可為0或空值,只需傳入BID即可。
4.3.4.寫IC卡區塊高級函數
原 型:
int Routon_IC_HL_WriteCard (int SID,int BID,
int KeyType,unsigned char * Key,
unsigned char * data);
說 明:本函數用于向IC卡指定扇區寫入數據內容,在調用本函數前需要先找卡Routon_IC_FindCard()。
參 數:
SID為扇區號,0-15之間(對M1S50卡)。
BID為塊號,0-3之間。
KeyType為密鑰類型,兩種:0x60 keyA,0x61 keyB。
Key為密鑰。
data為準備寫入的數據內容,字節數為16。
返 回 值:
值 意義
1 正確
0 錯誤
-3 密鑰或卡類型錯
備注:如果為Mifare UltraLight卡,參數SID,KeyType,Key可為0或空值,只需傳入BID與data即可。
4.3.5.控制蜂鳴器和指示燈
原 型1:
int HID_BeepLED(bool BeepON,bool LEDON,unsigned int duration);
說 明:本函數用于控制iDR210 USB-HID 設備的LED指示燈和蜂鳴器。
參 數:
BeepON和LEDON為布爾類型,值為True時,對應的蜂鳴器和指示燈打開;duration為打開持續的時間,單位為毫秒。
返 回 值:
值 意義
1 正確
0 錯誤
原 型2:
int Routon_BeepLED(bool BeepON,bool LEDON,unsigned int duration);
說 明:本函數用于控制iDR200 串口型設備LED指示燈和蜂鳴器。
參 數:
BeepON和LEDON為布爾類型,值為True時,對應的蜂鳴器和指示燈打開;duration為打開持續的時間,單位為毫秒。
返 回 值:
值 意義
1 正確
0 錯誤
4.3.6.讀取PSAM卡ATR數據
原 型:
int PSAM_ReadATR(unsigned char CardIndex,unsigned char SpeedIndex,unsigned char TypeIndex, unsigned char *_Data);
說 明:本函數用于讀取設備上PSAM卡的ATR數據
參 數:
CardIndex: 0x01為卡座1, 0x02為卡座2
SpeedIndex: CPU卡的速率 (0:4800,1:9600,2:19200,3:38400)
TypeIndex: CPU卡電壓類型(0:5V,1:3V)
*_Data: 讀出數據緩存區指針
返 回 值:
值 意義
0 正確
-1 未插卡
-2 設置卡座錯誤
-3 設置速率錯誤
-4 設置電壓錯誤
-5 設備未連接
4.3.7.向PSAM卡發送數據
原 型:
int PSAM_SendCMD(unsigned char CardIndex,unsigned char *_Cmd,int Len, unsigned char *_Data)
說 明:本函數用于向PSAM卡發送數據
參 數:
CardIndex:0x01為卡座1, 0x02為卡座2
*_Cmd:向PSAM卡發送命令數據緩沖區指針
Len:命令的長度
*_Data:PSAM卡返回數據緩存區指針
返 回 值:
值 意義
0 正確
-1 未知錯誤
-2 設置卡座錯誤
-3 設備未連接
4.3.8.PSAM卡下電
原 型:
int STDCALL PSAM_PowerOff(unsigned char CardIndex)
說 明:本函數用于斷開PSAM卡電源,降低功耗
參 數:
CardIndex:0x01為卡座1, 0x02為卡座2
返 回 值:
值 意義
0 正確
-1 未知錯誤
-2 設置卡座錯誤
-3 設備未連接
4.3.9.dc_init
注意:僅串口型iDR200可使用本接口,iDR210使用InitComm()進行端口初始化。
原 型:int dc_init(int port,long baud);
說 明:初始化通訊口。
參 數:
port:取值為1~16。
baud:為通訊波特率9600~115200。
返 回 值:成功則返回串口通訊設備標識符>0,失敗返回負值。
4.3.10.dc_exit
注意:僅串口型iDR200可使用本接口,iDR210使用CloseComm()關閉端口。
原 型:int dc_exit(int dev);
說 明:關閉端口。
參 數:
icdev:通訊設備標識符。
返 回 值:成功返回0,失敗返回負值。
4.3.11.dc_request
原 型:int dc_request(int icdev,unsigned char _Mode,unsigned int *TagType);
說 明:尋卡請求。
參 數:
icdev:通訊設備標識符。
_Mode:尋卡模式。0表示Standard模式;1表示All模式。
Tagtype:卡類型值。
返 回 值:成功返回0,失敗返回負值。
4.3.12.dc_anticoll
原 型:int dc_anticoll(int icdev,unsigned char _Bcnt,unsigned long *_Snr);
說 明:防卡沖突,返回卡的序列號。
參 數:
icdev:通訊設備標識符。
_Bcn: 設為0。
_Snr:返回的卡序列號地址。
返 回 值:成功返回0,失敗返回負值。
4.3.13.dc_select
原 型:int dc_select(int icdev,unsigned long _Snr,unsigned char *_Size);
說 明:從多個卡中選取一個給定序列號的卡。
參 數:
icdev:通訊設備標識符。
_Snr:卡序列號。
_Size:指向返回的卡容量的數據(暫不支持,無返回)。
返 回 值:成功返回0,失敗返回負值。
4.3.14.dc_authentication_passaddr
原 型:int dc_authentication_passaddr(int icdev, unsigned char _Mode, unsigned char Addr, unsigned char *passbuff);
說 明:核對密碼函數。
參 數:
Icdev:通訊設備標識符。
_Mode:密碼驗證模式。0x60 keyA,0x61 keyB。
blockAddr:要驗證密碼的塊地址號。
passbuff:密碼字符串。
返 回 值:成功返回0,失敗返回負值。
4.3.15.dc_read
原 型:dc_read(int icdev,unsigned char _Adr,unsigned char *_Data);
說 明:讀取卡中數據。
參 數:
icdev:通訊設備標識符。
_Adr:M1S50卡——塊地址(0~63),M1S70(0~255)。
_Data:讀出數據。
返 回 值:成功返回0,失敗返回負值。
4.3.16.dc_write
原 型:dc_write(int icdev,unsigned char _Adr,unsigned char *_Data);
說 明:向卡中寫入數據。
參 數:
icdev:通訊設備標識符。
_Adr:M1S50卡——塊地址(1~63),M1S70(1~255)。
_Data:要寫入的數據。
返 回 值:成功返回0,失敗返回負值。
4.3.17.dc_halt
原 型:dc_halt(int icdev);
說 明:中止對該卡操作。
參 數:
icdev:通訊設備標識符。
返 回 值:成功返回0,失敗返回負值。
4.3.18.dc_BeepLED
原 型:dc_BeepLED(int icdev,bool BeepON,bool LEDON,unsigned int duration);
說 明:控制LED指示燈和蜂鳴器。
參 數:
icdev:通訊設備標識符。
BeepON:值為true時,蜂鳴器打開。
LEDON:值為true時,指示燈打開。
duration為持續的時間,單位為毫秒。
返 回 值:成功返回0,失敗返回負值。
4.3.19.Routon_CPUCard_PowerOFF
原 型:Routon_CPUCard_PowerOFF(void);
說 明:CPU卡下電。
參 數: 無
返 回 值:成功返回1,失敗返回0。
4.3.20.Routon_CPUCard_Active
原 型:Routon_CPUCard_Active(void);
說 明:CPU卡激活。
參 數: 無
返 回 值:成功返回1,失敗返回0。
4.3.21.Routon_CPUCard_ATS
原 型:Routon_CPUCard_ATS(unsigned char * ATSMsg,
unsigned int * ATSLen);
說 明:CPU卡發送RATS,返回ATS數據。
參 數:
ATSMsg ATS數據
ATSLen ATS數據長度
返 回 值:成功返回1,失敗返回0。
4.3.22.Routon_CPUCard_PPS
原 型:Routon_CPUCard_PPS(unsigned char PPS0,unsigned char PPS1);
說 明:CPU卡發送PPS參數。
參 數:
PPS0 PPS0值
PPS1 PPS1值
返 回 值:成功返回1,失敗返回0。
4.3.23.Routon_APDU
原 型:Routon_APDU (char * apdu,unsigned char * data,int * datalen)說 明:向CPU卡發送APDU,并獲取返回數據。
參 數:
apdu APDU指令,為字符串數據
data APDU指令的返回數據,字節數據
datalen APDU指令返回數據長度
返 回 值:
值 意義
0 失敗
1 成功
-1 APDU指令超長(超過251字節)
-2 通訊錯誤
-3 不支持端口協議
4.3.24.Routon_ ShutDownAntenna
原 型: Routon_ ShutDownAntenna (void)
說 明:關閉天線。
參 數:
無
返 回 值:
值 意義
0 失敗
1 成功
4.3.25.Routon_Mute(bool isMute)
原 型: Routon_Mute(bool isMute)
說 明:蜂鳴器開關。
參 數:
isMute true為關閉,false為打開
返 回 值:
值 意義
0 失敗
1 成功
4.3.26.Routon_RepeatRead(bool isRepeat)
原 型: Routon_RepeatRead(bool isRepeat)
說 明:設置是否可以重復讀一張身份證,默認是不重復讀。
參 數:
isRepeat true為可重復讀,false為只能讀一次
返 回 值:
值 意義
0 失敗
1 成功
4.3.27.Routon_IsSaveWlt(bool isWlt)
原 型: Routon_IsSaveWlt(bool isWlt)
說 明:設置是否保存wlt文件,默認不保存。
備注:在調用讀取身份證信息接口之前調用該接口
參 數:
isWlt true保存wlt文件,false為不保存
返 回 值:
值 意義
0 失敗
1 成功
4.3.28.ReadBaseInfosFPPhoto(char* Name, char* Gender, char* Folk, char* BirthDay, char * Code, char* Address, char* Agency, char* ExpireStart, char* ExpireEnd, char* directory, unsigned char * pucFPMsg, unsigned int * puiFPMsgLen)
說 明:本函數用于讀取卡中基本信息,包括文字信息與圖像信息。文字信息以字符串格式輸出。圖象信息被解碼后存為照片photo.bmp和photo.jpg,身份證正面反面圖片(在directory指定目錄下)。
參 數:
Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Folk [out] 字符型指針,指向民族信息。需要在調用時分配內存,字節數不小10。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。
Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。
Agency [out] 字符型指針,指向簽證機關信息。需要在調用時分配內存,字節數不小31。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(NULL),表示照片存儲在當前目錄中,此時函數效果同ReadBaseInfos。
pucFPMsg [out] 無符號字符指針,指向讀到的指紋信息。需要在調用時分配內存,字節數不小于1024。
puiFPMsgLen [out] 整數, 返回指紋信息長度。
返 回 值:
值 意義
1 正確
0 錯誤
4 目錄不存在
-4 缺少dewlt.dll、savephoto.dll等DLL
4.3.29.Routon_DecideIDCardType()
說 明:本函數用戶判斷當前證件類型是身份證,還是外國人居留證。注意,該函數需在調用Authenticate函數后再調用。
返 回 值:
值 意義
100 中國身份證
101 外國人居留證
102 港澳臺居住證
其它 其它錯誤
4.3.30.Routon_ReadForeignBaseInfos (char *enName, char *Gender, char *Code, char *Nation, char *cnName, char *BirthDay, char * ExpireStart,char* ExpireEnd)
廢棄,請使用接口Routon_ReadAllForeignBaseInfos
說 明:本函數用來讀取外國人居留證相關信息內容,照片文件保存在當前stdapi.dll文件相同目錄中,照片文件名為photo.bmp。
參 數:
enName [out] 字符型指針,指向英文姓名信息。需要在調用時分配內存,字節數不小121。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小31。
Nation [out] 字符型指針,指向國籍信息。需要在調用時分配內存,字節數不小40。
cnName [out] 字符型指針,指向中文姓名信息。需要在調用時分配內存,字節數不小31。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調
用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
返 回 值:
值 意義
0 讀取卡信息失敗
1 讀取卡信息成功
4.3.31.Routon_ReadForeignBaseInfosPhoto (char*enName, char *Gender, char *Code, char *Nation, char *cnName, char *BirthDay, char * ExpireStart,char* ExpireEnd,char* directory)
廢棄,請使用接口Routon_ReadAllForeignBaseInfosPhoto
說 明:本函數用來讀取外國人居留證相關信息內容,照片文件保存在當前stdapi.dll文件相同目錄中,照片文件名為photo.bmp。(
參 數:
enName [out] 字符型指針,指向英文姓名信息。需要在調用時分配內存,字節數不小121。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小31。
Nation [out] 字符型指針,指向國籍信息。需要在調用時分配內存,字節數不小40。
cnName [out] 字符型指針,指向中文姓名信息。需要在調用時分配內存,字節數不小31。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調
用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(NULL),表示照片存儲在當前目錄中,此時函數效果同Routon_ReadForeignBaseInfos。
返 回 值:
值 意義
0 讀取卡信息失敗
1 讀取卡信息成功
4.3.32.Routon_ReadAllForeignBaseInfos (char*EnName, char *Gender, char *Code, char *Nation, char *CnName, char *BirthDay, char * ExpireStart,char* ExpireEnd,char* CardVertion,char *Agency,char *CardType, char *FutureItem)
說 明:本函數用來讀取外國人居留證所有信息內容,頭像照片文件保存在當前stdapi.dll文件相同目錄中,照片文件名為photo.bmp。
參 數:
EnName [out] 字符型指針,指向英文姓名信息。需要在調用時分配內存,字節數不小121。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小31。
Nation [out] 字符型指針,指向國籍信息。需要在調用時分配內存,字節數不小40。
CnName [out] 字符型指針,指向中文姓名信息。需要在調用時分配內存,字節數不小31。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調
用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
CardVertion [out] 字符型指針,指向證件版本號信息。需要在調用時分配內存,字節數不小于5。
Agency [out] 字符型指針,指向當次申請受理機關代碼信息。需要在調用時分配內存,字節數不小于9。
CardType [out] 字符型指針,指向證件類型標識。需要在調用時分配內存,字節數不小于2。外國人永久居留證的標識為大寫字母“I”。
FutureItem [out] 字符型指針,指向預留項信息。需要在調用時分配內存,自己數不小于7。目前存放了三個空格符。
返 回 值:
值 意義
0 讀取卡信息失敗
1 讀取卡信息成功
4.3.33.Routon_ReadAllForeignBaseInfosPhoto (char*EnName, char *Gender, char *Code, char *Nation, char *CnName, char *BirthDay, char * ExpireStart,char* ExpireEnd,char* CardVertion,char *Agency,char *CardType, char *FutureItem,char *Directory)
說 明:本函數用來讀取外國人居留證所有信息內容,照片文件保存在當前stdapi.dll文件相同目錄中,照片文件名為photo.bmp。
參 數:
EnName [out] 字符型指針,指向英文姓名信息。需要在調用時分配內存,字節數不小121。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小31。
Nation [out] 字符型指針,指向國籍信息。需要在調用時分配內存,字節數不小40。
CnName [out] 字符型指針,指向中文姓名信息。需要在調用時分配內存,字節數不小31。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調
用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
CardVertion [out] 字符型指針,指向證件版本號信息。需要在調用時分配內存,字節數不小于5。
Agency [out] 字符型指針,指向當次申請受理機關代碼信息。需要在調用時分配內存,字節數不小于9。
CardType [out] 字符型指針,指向證件類型標識。需要在調用時分配內存,字節數不小于2。外國人永久居留證的標識為大寫字母“I”。
FutureItem [out] 字符型指針,指向預留項信息。需要在調用時分配內存,自己數不小于7。目前存放了三個空格符。
Directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(“”),表示照片存儲在當前用戶的臨時目錄中。
返 回 值:
值 意義
0 讀取卡信息失敗
1 讀取卡信息成功
4.3.34.Routon_ReadAllGATBaseInfos (char*Name, char *Gender,char *FutureItem1, char* BirthDay,char *Address, char *Code, char *Agency, char * ExpireStart,char* ExpireEnd,char *PassID,char *SignCnt, char *FutureItem2,char *CardType,char *FutureItem3)
說 明:本函數用來讀取港澳臺居民居住證所有信息內容,照片文件保存在當前stdapi.dll文件相同目錄中,照片文件名為photo.bmp。
參 數:
Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
FututureItem1 [out] 字符型指針,指向預留項,暫無信息。需要在調用時分配內存,字節數不小5。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。
Agency [out] 字符型指針,簽發機關信息。需要在調用時分配內存,字節數不小于31。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調
用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
PassID [out] 字符型指針,指向指向通行證號碼信息。需要在調用時分配內存,字節數不小于19。
SignCnt [out] 字符型指針,指向簽發次數信息。需要在調用時分配內存,字節數不小于5。
FutureItem2 [out] 字符型指針,指向預留項信息。暫時無信息。需要在調用時分配內存,自己數不小于7。目前存放了三個空格符。
CardType [out] 字符型指針,指向證件類型標識。需要在調用時分配內存,字節數不小于2。港澳臺居民居住證的標識為大寫字母“J”。
FutureItem3 [out] 字符型指針,指向預留項信息。需要在調用時分配內存,自己數不小于7。目前存放了三個空格符。
返 回 值:
值 意義
0 讀取卡信息失敗
1 讀取卡信息成功
4.3.35.Routon_ReadAllGATBaseInfosPhoto (char*Name, char *Gender,char *FutureItem1, char* BirthDay,char *Address, char *Code, char *Agency, char * ExpireStart,char* ExpireEnd,char *PassID,char *SignCnt, char *FutureItem2,char *CardType,char *FutureItem3,char *Directory)
說 明:本函數用來讀取港澳臺居民居住證所有信息內容,照片文件保存在當前stdapi.dll文件相同目錄中,照片文件名為photo.bmp。
參 數:
Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
FututureItem1 [out] 字符型指針,指向預留項,暫無信息。需要在調用時分配內存,字節數不小5。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。
Agency [out] 字符型指針,簽發機關信息。需要在調用時分配內存,字節數不小于31。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調
用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
PassID [out] 字符型指針,指向指向通行證號碼信息。需要在調用時分配內存,字節數不小于19。
SignCnt [out] 字符型指針,指向簽發次數信息。需要在調用時分配內存,字節數不小于5。
FutureItem2 [out] 字符型指針,指向預留項信息。暫時無信息。需要在調用時分配內存,自己數不小于7。目前存放了三個空格符。
CardType [out] 字符型指針,指向證件類型標識。需要在調用時分配內存,字節數不小于2。港澳臺居民居住證的標識為大寫字母“J”。
FutureItem3 [out] 字符型指針,指向預留項信息。需要在調用時分配內存,自己數不小于7。目前存放了三個空格符。
Directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(“”),表示照片存儲在當前用戶的臨時目錄中。
返 回 值:
值 意義
0 讀取卡信息失敗
1 讀取卡信息成功
4.3.36.FindAllUSB(int *SCount, int *HCount)
說 明:本函數用于“部標”設備和HID設備同時連接PC時,獲取當前PC連接的讀卡設備的情況,能夠識別是否有“部標”設備,有幾臺HID設備。
備 注:僅針對USB接口的“部標”設備和HID設備。
參 數:
SCount[out]整型指針,指向當前PC連接“部標”設備數量。需要在調用時分配內存,字節數為1。SCount[0]值為0表示無“部標”設備,1表示有“部標”設備。
HCount[out]整型指針,指向當前PC連接HID設備數量。需要在調用時分配內存,字節數為1。HCount[0]值為0表示無HID設備,1表示有一臺HID設備,2表示有兩臺HID設備。
返 回 值:
值 意義
1 尋找USB設備成功
其他 尋找USB設備失敗
4.3.37.SelectUSB(int index)
說 明:根據用戶選擇的“部標”設備和HID設備,初始化相應的設備端口。
備 注:僅針對USB接口的“部標”設備和HID設備,調用之前必須先先FindAllUSB()函數尋找USB接口設備。
參 數:
index整數,表示“部標”設備和HID設備。0代表“部標”設備,1代表HID1,2代表HID2。
返 回 值:
值 意義
1 初始化指定設備端口成功
0 初始化指定設備端口失敗
4.3.38.CloseSDTandHIDComm(int index)
說 明:根據打開的“部標”設備和HID設備的端口,關閉相應的端口。
備 注:僅針對USB接口的“部標”設備和HID設備。
參 數:
index整數,表示“部標”設備和HID設備。0代表“部標”設備,1代表HID1,2代表HID2。
返 回 值:
值 意義
1 關閉指定設備端口成功
0 關閉指定設備端口失敗
4.3.39.InitSDTandHIDComm(int index)
說 明:尋找當前PC連接的USB接口設備,根據用戶選擇的“部標”設備和HID設備,初始化相應的設備端口。
備 注:僅針對USB接口的“部標”設備和HID設備。該接口包含了FindAllUSB()和SelectUSB()的功能。
參 數:
index整數,表示“部標”設備和HID設備。0代表“部標”設備,1代表HID1,2代表HID2。
返 回 值:
值 意義
1 初始化指定設備端口成功
0 初始化指定設備端口失敗
4.3.40.Routon_ReadAllTypeCardInfos(int port, char* pMsg, char *PhotoPath)
說 明:讀身份證或者外國人居留證
參 數:
port 整數,表示設備的端口號或者串口號。
pMsg [out] 字符型指針,指向卡片的基本信息,在調用時分配內存,內存不小于265字節。
Photopath [in] 字符指針,表示頭像照片存儲路徑,路徑最后有無“\”均可;若不指定頭像相片路徑PhotoPath,則傳入NULL或者“”,照片存在當前程序目錄中;若指定頭像照片路徑PhotoPath,則傳入不包含文件名的目錄,如“d:\\temp”。
返 回 值:
返回值 含義
1 卡片類型身份證
2 卡片類型外國人居留證
-1 文本信息指針為空,或指定照片路徑不存在
-2 端口打開失敗
-3 卡認證失敗
-4 讀卡失敗
-5 頭像照片生成失敗
備 注:卡基本信息返回值pMsg格式
身份證:姓名|性別|民族|出生年月日|住址|公民身份號碼|簽發機關|有效期限起始日期|有效期限結束日期|有效期限
外國證: 英文姓名|中文姓名|性別|國籍或地區代號|出生年月日|永久居住證號碼|簽發機關|有效期限起始日期|有效期限結束日期|有效期限
4.4.eID卡相關函數
4.4.1 eID_Authenticate()
說明:尋找eID卡
參數:無
返回值:
返回值 含義
1 成功
-1 eID卡激活失敗
-2 PSAM卡激活失敗
-3 APDU指令發送錯誤
-4 eID卡返回異常
-5 選擇eID應用失敗
-6 找eID卡失敗
備注:eID卡屬于A卡中的CPU卡類型,可先調用找A卡命令將eID和身份證進行區分。
4.4.2讀eID卡原始信息
函數原型:eID_ReadBaseMsg(unsigned char* ucCHMsg, unsigned int* uiCHMsgLen, unsigned char* ucPHMsg, unsigned int* uiPHMsgLen,
unsigned char* ucFPMsg, unsigned int* uiFPMsgLen, unsigned char* ucAddAddress, unsigned int* uiAddAddressLen)
說明:讀eID卡原始信息,包括文本信息、圖片信息、指紋信息、附加地址信息
參數:
ucCHMsg:[out]字符型指針,指向eID的文本原始信息,在調用時分配內存,內存不小于256字節。
uiCHMsgLen:[out]無符號整數指針,指向eID原始文本信息長度。正常情況下是獲取的值為256。
ucPHMsg:[out]字符型指針,指向eID的頭像圖片原始信息,在調用時分配內存,內存不小于1024字節。
uiPHMsgLen:[out]無符號整數指針,指向eID頭像照片原始信息長度。正常情況下是獲取的值為1024。
ucFPMsg:[out]字符型指針,指向eID的指紋原始信息,在調用時分配內存,內存不小于1024字節。
uiFPMsgLen:[out]無符號整數指針,指向eID指紋原始信息長度。如果eID包含指紋信息,正常情況下值為1024。
ucAddAddress:[out]字符型指針,指向eID的附加地址信息,在調用時分配內存,內存不小于70字節。
uiAddAddressLen:[out]無符號整數指針,指向eID附加地址信息長度。如果eID包附加地址信息,正常情況下值為70。
返回值:
返回值 含義
1 成功
-1 命令發送失敗
-2 命令執行錯誤
-3 追加信息讀取異常
-4 指紋信息讀取異常
-5 頭像信息讀取異常
-6 文本信息讀取異常
-7 安全認證錯誤
-8 明文信息校驗失敗
4.4.3 讀eID基本信息
函數原型:int STDCALL eID_ReadBaseInfos(char * Name, char * Gender, char * Folk,char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd,unsigned char* FPMsg, char* AddAddress, char* directory)
說明:按照身份證方式解析文字信息,返回各字段值以及指紋、圖片、附加信息。
參數:
Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。
Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。
Folk [out] 字符型指針,指向民族信息。需要在調用時分配內存,字節數不小10。
BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位為出生年,第5位到第6位是出生月,后兩位是出生日,格式為:CCYYMMDD。
Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。
Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。
Agency [out] 字符型指針,指向簽證機關信息。需要在調用時分配內存,字節數不小31。
ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調用時分配內存,字節數不小9, 格式為:CCYYMMDD。
ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式為:CCYYMMDD,有效期為長期的表示為漢字“長期”。
FPMsg [out] 字符型指針,指向eID中的指紋特征值。需要在調用時分配內存,字節數不小1024。
FPMsgLen [out] 整型指針,指向eID中的指紋特征值長度。
directory [in] 字符指針,表示照片存儲路徑,路徑最后有無“\”均可;可以給空值(NULL),表示照片存儲在ProgramData目錄子目錄 PLSY Soft中。
返回值:
返回值 含義
1 成功
0 失敗
其他 錯誤值參照eID_ReadBaseMsg的錯誤返回
5.接口使用流程及示例
在連接好讀卡機具以后,首先需要調用函數InitComm打開相應端口。打開端口成功以后,即可以使用循環認證并讀取卡中信息。
5.1.二代證示例
示 例:
#include “sdtapi.h”
int main()
{
int ret;
int iPort=1;
ret=InitComm(iPort);
if ( ret ){
ret= Authenticate ();
if (ret){
char Msg[200];
ret= ReadBaseMsg (Msg, 0 );
if (ret > 0 ){
//顯示文字及圖片信息
}
char Msg1[200];
int num;
ret= ReadNewAppMsg (Msg1, &num );
if (ret > 0 ){
//顯示追加地址信息
}
}
}
ret= CloseComm();
return ret;
}
5.2.TypeA卡示例(iDR210)
示 例:
#include “sdtapi.h”
int main()
{
int ret;
int dev;
ret =InitComm (1001);//USB接口的iDR210
if (ret)
{
char csn[1024]={0};
if (Routon_IC_HL_ReadCardSN(csn))//讀A卡卡號
{
//
}
else
{
MessageBox( NULL, "Routon_IC_HL_ReadCardSN error。",
"錯誤", MB_OK | MB_ICONERROR );
return;
}
ret=Routon_IC_FindCard();
if (ret)
{
int sid=0,bid=0;
unsigned char da[64]={0};
unsigned char pw[6]={0xff,0xff,0xff,0xff,0xff,0xff};
ret=Routon_IC_HL_ReadCard (sid,bid,0x60,pw,da);//讀0扇區0塊的內容
}
}
CloseComm();
}
5.3.讀取指紋及身份證信息示例(iDR210)
ret = InitComm(1001);
if ( ret ){
ret=IsFingerPrintDevice();
if (ret!=1)
{
sprintf(msg,"設備不支持讀取指紋信息!返回值=%d",ret);
MessageBox(msg,"提示");
return ;
}
ret= Authenticate ();
if (ret){
/*unsigned char unCHMsg[256];
unsigned char ucFPMsg[1024];
int uiFPMsgLen,uiCHMsgLen;
ret = ReadBaseFPMsg(unCHMsg, &uiCHMsgLen,ucFPMsg, &uiFPMsgLen);*/
char name[32]={0};
char Gender[4]={0};
char Folk[4]={0};
char BirthDay[9]={0};
char Code[19]={0};
char Address[71]={0};
char Agency[31]={0};
char ExpireStart[9]={0};
char ExpireEnd[9]={0};
char pucFPMsg[1024]={0};
unsigned int puiFPMsgLen=0;
ret = ReadBaseInfosFPPhoto(name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd,“C:\\”, pucFPMsg, &puiFPMsgLen);
if (ret!=1)
{
sprintf(msg,"讀指紋信息失敗!返回值=%d",ret);
MessageBox(msg,"提示");
return ;
}
if (uiFPMsgLen<1024)
{
sprintf(msg,"無指紋信息!");
MessageBox(msg,"提示");
}
…
//此處處理指紋及身份證信息
}
}
CloseComm();
5.4.CPU卡操作示例(iDR210)
unsigned char data[1024];
memset(data,0,1024);
int datalen=0;
ret = InitComm(1);//串口1
if ( ret ){
ret=Routon_IC_FindCard();
if (ret!=2)//類型2為CPU卡
{
sprintf(msg,"不是CPU卡!返回值=%d",ret);
MessageBox(msg,"提示");
return ;
}
char apdu[]=” 00A404000E315041592E5359532E4444463031”;
ret=Routon_CPUCard_Active();
if (ret==1){ //激活成功
ret=Routon_APDU(apdu,data,&datalen);//data為16進制值
}
}
CloseComm();
5.5.外國人居留證操作示例(iDR200/iDR210)
#include “sdtapi.h”
int main()
{
int ret;
int dev;
ret =InitComm (1001);//USB接口, 1-16則為串口號
if ( ret )
{
ret= Authenticate ();
if (ret){
ret= Routon_DecideIDCardType()
if (ret == 100 ){ //身份證卡
//讀取身份證信息
ret = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);
}
else if(ret == 101){ //外國人居留證
//讀取外國居留證
ret = Routon_ReadAllForeignBaseInfos(enName, Gender, Code,
Nation, cnName, BirthDay, ExpireStart, ExpireEnd,CardVertion,Agency,CardType,FutureItem);
}
}
}
CloseComm();
return 0;
}
5.6.“部標”設備和HID設備同時連接PC,讀卡示例(iDR210)
#include “sdtapi.h”
int main()
{
int ret;
int index;//輸入的USB設備索引號,“0”部標設備,“1”HID1,“2”HID2
int SDTCount[1];//當前PC連接的部標設備數量
int HIDCount[1];//當前PC連接的HID設備數量
FindAllUSB(SDTCount, HIDCount);
ret=SelectUSB(index);
if ( ret )
{
ret= Authenticate ();
if (ret){
ret= Routon_DecideIDCardType();
if (ret == 100 ){ //身份證卡
//讀取身份證信息
ret = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);
}
else if(ret == 101){ //外國人居留證
//讀取外國居留證
ret = Routon_ReadForeignBaseInfosPhoto(enName, Gender, Code, Nation, cnName, BirthDay, ExpireStart, ExpireEnd);
}
}
}
CloseSDTandHIDComm(index);
}
5.7.外國證居留證生成正反面照片操作示例(iDR210)
#include “sdtapi.h”
int main()
{
int ret;
int dev;
ret =InitComm (1001);//USB接口, 1-16則為串口號
if ( ret )
{
ret= Authenticate ();
if (ret){
ret= Routon_DecideIDCardType()
if (ret == 100 ){ //身份證卡
//讀取身份證信息
ret = ReadBaseInfosPhoto(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd, "D:\\IDtemp");
}
else if(ret == 101){ //外國人居留證
//讀取外國居留證
ret = Routon_ReadForeignBaseInfosPhoto(enName, Gender, Code, Nation, cnName, BirthDay, ExpireStart, ExpireEnd, "D:\\FIDtemp");
}
}
}
CloseComm();
return 0;
}
5.8.eID讀卡示例
#include “sdtapi.h”
int main()
{
int ret;
int dev;
ret =InitComm (1001);//USB接口, 1-16則為串口號
if ( ret )
{
ret= eID_Authenticate ();
if (ret){
ret = eID_ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd, FPMsg, AddAddress,“C:\\temp\\”);
}
}
CloseComm();
return 0;
}