EST系列身份證閱讀器(讀卡器)Linux二次開(kāi)發(fā)包SDK(含libwlt2bmp.so相片解碼)
身份證閱讀器模組模塊,支持身份證、社???、CPU卡、M1卡、IC卡、醫???、磁條卡、銀行卡等多種卡片識別讀取,提供完善的接口SDK二次開(kāi)發(fā)技術(shù)支持,可提供Linux、單片機、ARM的通訊協(xié)議以及Android、Windows等系統二次開(kāi)發(fā)包,可以適用于市場(chǎng)上的閘機、門(mén)禁、人臉識別考勤機、機器人終端、通道閘等產(chǎn)品使用。
版本:V2018.09.25(USB版本)
注意:此Linux版本是廣東東信智能科技有限公司最新的采用USB接口通訊的開(kāi)發(fā)包,涵蓋了身份證、M1、CPU、IC等多種卡片的Linux系統應用示例,包括了libwlt2bmp.so身份證相片解碼。
應用產(chǎn)品:門(mén)禁系統、道閘、考勤系統以及人臉識別系統、自助終端、機器人系統等。
///////////////////////////////////////////各卡片操作順序//////////////////////////////
【typeA CPU 卡操作順序】
1 設置為T(mén)ypeA卡片
2 請求卡片
3 防碰撞
4 選擇卡片
5 上電
6 APDU 命令
【typeB 卡操作順序】
1 設置為T(mén)ypeB卡片
2 上電
3 選卡
4 APDU 命令
【M1卡操作順序】
1 請求卡片
2 防碰撞
3 選擇卡片
4 認證密鑰
5 讀或寫(xiě)
【接觸CPU卡操作順序】
1 上電復位
2 APDU 命令
【身份證操作順序】
讀取證件
獲取證件類(lèi)型
獲取信息
Linux系統開(kāi)發(fā)包核心代碼:
#ifndef _EST100_BASE_H_
#define _EST100_BASE_H_
#include <stdio.h>
#include <errno.h>
#include <dlfcn.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/time.h>
#include <ctype.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <stddef.h>
#include <termios.h>
#include <strings.h>
#include <stdbool.h>
#include <locale.h>
#include <iconv.h>
#include <sys/io.h>//chmod
#include <sys/stat.h>
#include "./include/libusb-1.0/libusb.h"
#define IFD_OK0 //執行成功
#define IFD_ICC_TypeError-1 //卡片類(lèi)型不對
#define IFD_ICC_NoExist-2 //無(wú)卡
#define IFD_ICC_NoPower-3 //有卡未上電
#define IFD_ICC_NoResponse-4 //卡片無(wú)應答
#define IFD_ConnectError-11 //讀卡器連接錯
#define IFD_UnConnected-12 //未建立連接(沒(méi)有執行打開(kāi)設備函數)
#define IFD_BadCommand-13 //(動(dòng)態(tài)庫)不支持該命令
#define IFD_ParameterError-14 //(發(fā)給動(dòng)態(tài)庫的)命令參數錯
#define IFD_CheckSumError-15 //信息校驗和出錯
#define IFD_OutTime -20
#ifdef __cplusplus
extern "C" {
#endif
/******************************************************************************************************************************************\
\ /
/設備類(lèi) \
\ /
\******************************************************************************************************************************************/
/*****************************************
* 功能:連接讀卡器
* 參數:
*dev_name:[IN] 端口號,固定"USB1"
* 返回值:
*返回大于0的設備句柄
******************************************/
long ICC_Reader_Open(char * dev_name);
/*****************************************
* 功能:斷開(kāi)讀卡器連接
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
* 返回值:
*成功返回0
***************************************************************/
long ICC_Reader_Close(long ReaderHandle);
/*****************************************
* 功能: 蜂鳴
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*timeout: [IN] 超時(shí)時(shí)間,固定為5
* 返回值:
*成功返回0
******************************************/
long ICC_PosBeep(long ReaderHandle, unsigned char timeOut);
/******************************************************************************************************************************************\
\ /
/接CPU \
\ /
\******************************************************************************************************************************************/
/*****************************************
* 功能: 接觸CPU卡上電(冷復位)
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*ICC_Slot_No:[IN] 卡座號 0x01(大卡座),0x11~0x14(SAM1~SAM4)
*Response:[OUT] ATR
* 返回值:
*成功返回數據長(cháng)度
***************************************************************/
long ICC_Reader_pre_PowerOn(long ReaderHandle, unsigned char ICC_Slot_No, unsigned char* Response);
/*****************************************
* 功能: 接觸CPU卡下電
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*ICC_Slot_No:[IN] 卡座號 0x01(大卡座),0x11~0x14(SAM1~SAM4)
* 返回值:
*成功返回0
***************************************************************/
long ICC_Reader_PowerOff(long ReaderHandle,unsigned char ICC_Slot_No);
/*****************************************
* 功能: 接觸CPU卡執行APDU命令
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*ICC_Slot_No:[IN] 卡座號 0x01(大卡座),0x11~0x14(SAM1~SAM4)
*Lenth_of_Command_APDU: [IN] APDU命令的長(cháng)度
*Command_APDU:[IN] APDU命令
*Response_APDU: [OUT] 響應信息
* 返回值:
*成功返回響應信息數據的長(cháng)度
***************************************************************/
long ICC_Reader_Application(long ReaderHandle,unsigned char ICC_Slot_No, long Lenth_of_Command_APDU,unsigned char* Command_APDU,unsigned char* Response_APDU); //執行apdu命令 返回數據長(cháng)
/******************************************************************************************************************************************\
\ /
/非接類(lèi) \
\ /
\******************************************************************************************************************************************/
/****************************************
* 功能: 設置為操作TypeA卡
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
* 返回值:
*成功返回0
***************************************************************/
long PICC_Reader_SetTypeA(long ReaderHandle);
/*****************************************
* 功能: 設置為操作TypeB卡
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
* 返回值:
*成功返回0
***************************************************************/
long PICC_Reader_SetTypeB(long ReaderHandle);
/*****************************************
* 功能: 請求卡片
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
* 返回值:
*成功返回0
***************************************************************/
long PICC_Reader_Request(long ReaderHandle);
/*****************************************
* 功能: 防碰撞
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*UID: [OUT] 4字節UID
* 返回值:
*成功返回0
***************************************************************/
long PICC_Reader_anticoll(long ReaderHandle,unsigned char *uid);
/*****************************************
* 功能: 選擇卡片
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*cardtype:[IN] 0x41表示TypeA & M1, 0x42表示TypeB
* 返回值:
*成功返回0
***************************************************************/
long PICC_Reader_Select(long ReaderHandle,unsigned char cardtype);
/*****************************************
* 功能: TypeA卡上電
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*Response: [OUT] 上電返回數據
* 返回值:
*成功返回數據長(cháng)度
***************************************************************/
long PICC_Reader_PowerOnTypeA(long ReaderHandle,unsigned char* Response);
/*****************************************
* 功能: TypeB卡上電
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*Response: [OUT] 上電返回數據
* 返回值:
*成功返回數據長(cháng)度
***************************************************************/
long PICC_Reader_PowerOnTypeB(long ReaderHandle,unsigned char* Response);
/*****************************************
* 功能: TypeA & B 卡執行APDU命令
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*Lenth_of_Command_APDU: [IN] APDU命令的長(cháng)度
*Command_APDU:[IN] APDU命令
*Response_APDU: [OUT] 響應信息
* 返回值:
*成功返回響應信息數據的長(cháng)度
***************************************************************/
long PICC_Reader_Application(long ReaderHandle,long Lenth_of_Command_APDU,unsigned char* Command_APDU,unsigned char* Response_APDU);
/*****************************************
* 功能: M1卡認證秘鑰
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*Mode: [IN] 0x60 表示認證KeyA, 0x61表示認證KeyB
*SecNr:[IN] 扇區號 S50系列卡 0~15, S70系列卡 0~63
*Key: [IN] 6字節秘鑰
* 返回值:
*成功返回0
***************************************************************/
long PICC_Reader_Authentication_Pass(long ReaderHandle,unsigned char Mode, unsigned char SecNr,unsigned char *PassWord);
/*****************************************
* 功能: M1讀卡
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*Addr:[IN] 塊地址 S50系列卡 0~63, S70系列卡 0~255, 例如:1扇區1塊,這里Addr=5=1*4 + 1(扇區號*4 + 塊號)
*Data:[OUT] 16字節塊數據
* 返回值:
*成功返回0
*****************************************************************************************************************/
long PICC_Reader_Read(long ReaderHandle,unsigned char Addr,unsigned char *Data);
/*****************************************
* 功能: M1寫(xiě)卡
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*Addr:[IN] 塊地址 S50系列卡 0~63, S70系列卡 0~255, 例如:1扇區1塊,這里Addr=5=1*4 + 1(扇區號*4 + 塊號)
*Data: [IN] 16字節待寫(xiě)入數據
* 返回值:
*成功返回0
***************************************************************************************************************/
long PICC_Reader_Write(long ReaderHandle,unsigned char Addr,unsigned char *Data);
/******************************************************************************************************************************************\
\ /
/磁條卡 \
\ /
\******************************************************************************************************************************************/
/*****************************************
* 功能: 讀磁條卡
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
*ctime:[IN] 等待刷卡的超時(shí)時(shí)間,單位:秒
*track:[IN] 磁道 1~3
*rlen: [OUT] 返回的磁道數據長(cháng)度
*Data: [OUT] 返回的磁道數據
* 返回值:
*成功返回0
****************************************************************/
long Rcard(long ReaderHandle,unsigned char ctime,int track,unsigned char *rlen,char *Data);
long ICC_GetTimeOut(long ReaderHandle, unsigned char flag);//內部調用
/******************************************************************************************************************************************\
\ /
/身份證 \
\ /
\******************************************************************************************************************************************/
/*****************************************
* 功能: 讀取證件(居民身份證 + 外國人永久居留證 + 港澳臺居民居住證)
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
* 返回值:
*成功返回0,執行成功后可調用下列g(shù)et函數獲取相應的信息
***********************************************************************/
long PICC_ReadIDCard(long ReaderHandle);
/*****************************************
* 功能: 讀取證件,包含指紋(居民身份證 + 外國人永久居留證 + 港澳臺居民居住證)
* 參數:
*ReaderHandle:[IN] 執行ICC_Reader_Open 函數成功時(shí)的返回值
* 返回值:
*成功返回0,執行成功后可調用下列g(shù)et函數獲取相應的信息
***********************************************************************/
long PICC_ReadIDCardFP(long ReaderHandle);
/*****************************************
* 功能: 獲取證件類(lèi)型
* 參數:
*無(wú)
* 返回值:
*0:表示居民身份證
*1:表示外國人永久居留證
*2:表示港澳臺居民居住證
*****************************************/
int GetCardType();
/*****************************************
* 功能: 獲取姓名
* 參數:
*pName: [OUT] 姓名
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetName(char* pName);
/*****************************************
* 功能: 獲取性別
* 參數:
*pSex: [OUT] 性別
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetSex(char* pSex);
/*****************************************
* 功能: 獲取民族
* 參數:
*pNation: [OUT] 民族
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0
*****************************************/
int GetNation(char* pNation);
/*****************************************
* 功能: 獲取出生日期
* 參數:
*pBirth: [OUT] 出生日期
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetBirth(char* pBirth);
/*****************************************
* 功能: 獲取住址
* 參數:
*pAddress: [OUT] 住址
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、2
*****************************************/
int GetAddress(char* pAddress);
/*****************************************
* 功能: 獲取證件號碼
* 參數:
*pCertNo: [OUT] 證件號碼
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetCertNo(char* pCertNo);
/*****************************************
* 功能: 獲取簽發(fā)機關(guān)
* 參數:
*pDepartemt: [OUT] 簽發(fā)機關(guān)
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、2
*****************************************/
int GetDepartemt(char* pDepartemt);
/*****************************************
* 功能: 獲取有效起始日期
* 參數:
*pEffectDate: [OUT] 有效起始日期
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetEffectDate(char* pEffectDate);
/*****************************************
* 功能: 獲取有效截止日期
* 參數:
*pExpireDate: [OUT] 有效截止日期
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetExpireDate(char* pExpireDate);
/*****************************************
* 功能: 獲取通行證號碼
* 參數:
*pTXZHM: [OUT] 通行證號碼
* 返回值:
*成功返回0
* 包含證件類(lèi)型:2
*****************************************/
int GetTXZHM(char* pTXZHM);
/*****************************************
* 功能: 獲取通行證簽發(fā)次數
* 參數:
*pTXZQFCS: [OUT] 通行證簽發(fā)次數
* 返回值:
*成功返回0
* 包含證件類(lèi)型:2
*****************************************/
int GetTXZQFCS(char* pTXZQFCS);
/*****************************************
* 功能: 獲取英文名
* 參數:
*pEnName: [OUT] 外國人英文名
* 返回值:
*成功返回0
* 包含證件類(lèi)型:1
*****************************************/
int GetEnName(char* pEnName);
/*****************************************
* 功能: 獲取國籍代碼
* 參數:
*pNationalityCode: [OUT] 外國人國籍代碼
* 返回值:
*成功返回0
* 包含證件類(lèi)型:1
*****************************************/
int GetNationalityCode(char* pNationalityCode);
/*****************************************
* 功能: 獲取證件版本
* 參數:
*pCardVersion: [OUT] 外國人居留證證件版本
* 返回值:
*成功返回0
* 包含證件類(lèi)型:1
*****************************************/
int GetCardVersion(char* pCardVersion);
/*****************************************
* 功能: 獲取照片
* 參數:
*dlpath: [IN] so路徑, 例如:"../lib/libwltdecode.so"
*pBmpfilepath: [IN] 照片路徑, 例如:"../list/zp.bmp"
* 返回值:
*成功返回0
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetBmpFile(const char* dlpath, char* pBmpfilepath);
/*****************************************
* 功能: 是否含指紋信息
* 參數:
*無(wú)
* 返回值:
*成功返回指紋數據長(cháng)度,0表示沒(méi)有
* 包含證件類(lèi)型:0、1、2
*****************************************/
int IsFingerExist();
/*****************************************
* 功能: 獲取指紋信息
* 參數:
*fpInfo: [OUT] 指紋數據
* 返回值:
*成功返回獲取到的指紋數據長(cháng)度,0表示沒(méi)有
* 包含證件類(lèi)型:0、1、2
*****************************************/
int GetFingerprint(unsigned char* fpInfo);
#ifdef __cplusplus
}
#endif
#endif
產(chǎn)品咨詢(xún)熱線(xiàn):13822216429
技術(shù)咨詢(xún)熱線(xiàn):13922210502
廣東東信智能科技有限公司 www.eastcoms.com
廣東省廣州市科學(xué)城總部經(jīng)濟區觀(guān)虹路12號