1. 程式人生 > >身份證閱讀器身份證讀卡器Linux系統二次開發包(含Linux身份證相片解碼庫)

身份證閱讀器身份證讀卡器Linux系統二次開發包(含Linux身份證相片解碼庫)

注意:

此身份證閱讀器Linux系統SDK是最新的採用USB介面通訊的開發包,涵蓋了身份證、M1、CPU、IC等多種卡片的Linux系統應用示例,包括了Linux系統上面身份證相片解碼(已攻克Linux相片解碼難題)。

目前測試版本:X86構架Linux,嵌入式ARM Linux未經深度測試。

應用產品:

門禁系統、道閘、考勤系統以及人臉識別系統、自助終端、機器人系統等。

身份證閱讀器模組模組

支援身份證、社保卡、CPU卡、M1卡、IC卡、醫保卡、磁條卡、銀行卡等多種卡片識別讀取,提供完善的介面SDK二次開發技術支援,可提供Linux、微控制器、ARM的通訊協議以及Android、Windows等系統二次開發包,可以適用於市場上的閘機、門禁、人臉識別考勤機、機器人終端、通道閘等產品使用。

Linux系統身份證閱讀器二次開發包
Linux系統

Linux系統SDK使用步驟:

1、連線讀卡器 

long ICC_Reader_Open(char * dev_name);

引數: 

dev_name:[IN] 埠號,固定"USB1"  

返回值:返回大於0的裝置控制代碼 

2、斷開讀卡器連線

long ICC_Reader_Close(long ReaderHandle);

引數: 

ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

返回值:成功返回0

具體的介面引數和返回值請檢視termb.h檔案中的介面說明。

1. 工具鏈採用arm-marvell-linux-gnueabi編譯,demo和編譯方法可參照main.cpp和Makefile。

2. lib目錄下為編譯用到的庫檔案,

3. 程式呼叫可以用如下方式:

 # LD_LIBRARY_PATH=lib ./main

 也可以將lib目錄下所有庫檔案拷貝到系統庫目錄中,直接呼叫即可。

///////////////////////////////////////////////////////////////各卡片操作順序////////////////////////////////////////////////////////////

【typeA CPU 卡操作順序】

1 設定為TypeA卡片

2 請求卡片

3 防碰撞

4 選擇卡片

5 上電

6 APDU 命令

【typeB 卡操作順序】

1 設定為TypeB卡片

2 上電

3 選卡

4 APDU 命令

【M1卡操作順序】

1 請求卡片

2 防碰撞

3 選擇卡片

4 認證金鑰

5 讀或寫

【接觸CPU卡操作順序】

1 上電覆位

2 APDU 命令

【身份證操作順序】

讀取證件

獲取證件型別

獲取資訊

Linux系統開發包核心程式碼:

#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 //卡片型別不對

#define IFD_ICC_NoExist-2 //無卡

#define IFD_ICC_NoPower-3 //有卡未上電

#define IFD_ICC_NoResponse-4     //卡片無應答

#define IFD_ConnectError-11     //讀卡器連線錯

#define IFD_UnConnected-12         //未建立連線(沒有執行開啟裝置函式)

#define IFD_BadCommand-13         //(動態庫)不支援該命令

#define IFD_ParameterError-14     //(發給動態庫的)命令引數錯

#define IFD_CheckSumError-15     //資訊校驗和出錯

#define IFD_OutTime   -20

#ifdef __cplusplus

extern "C" {

#endif

/******************************************************************************************************************************************\

\   /

/裝置類   \

\   /

\******************************************************************************************************************************************/

/*****************************************

* 功能:連線讀卡器 

* 引數: 

*dev_name:[IN] 埠號,固定"USB1"  

* 返回值: 

*返回大於0的裝置控制代碼 

******************************************/

long ICC_Reader_Open(char * dev_name);

/*****************************************

* 功能:斷開讀卡器連線

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

* 返回值: 

*成功返回0

***************************************************************/

long ICC_Reader_Close(long ReaderHandle);

/*****************************************

* 功能: 蜂鳴 

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*timeout: [IN] 超時時間,固定為5

* 返回值: 

*成功返回0 

******************************************/

long ICC_PosBeep(long ReaderHandle, unsigned char timeOut);

/******************************************************************************************************************************************\

\   /

/接CPU   \

\   /

\******************************************************************************************************************************************/

/*****************************************

* 功能: 接觸CPU卡上電(冷復位)

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*ICC_Slot_No:[IN] 卡座號 0x01(大卡座),0x11~0x14(SAM1~SAM4)

*Response:[OUT] ATR

* 返回值: 

*成功返回資料長度

***************************************************************/

long ICC_Reader_pre_PowerOn(long ReaderHandle, unsigned char ICC_Slot_No, unsigned char* Response);

/*****************************************

* 功能: 接觸CPU卡下電

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*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 函式成功時的返回值

*ICC_Slot_No:[IN] 卡座號 0x01(大卡座),0x11~0x14(SAM1~SAM4)

*Lenth_of_Command_APDU: [IN] APDU命令的長度

*Command_APDU:[IN] APDU命令

*Response_APDU: [OUT] 響應資訊

* 返回值: 

*成功返回響應資訊資料的長度

***************************************************************/

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命令  返回資料長

/******************************************************************************************************************************************\

\   /

/非接類   \

\   /

\******************************************************************************************************************************************/

/****************************************

* 功能: 設定為操作TypeA卡

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

* 返回值: 

*成功返回0

***************************************************************/

long PICC_Reader_SetTypeA(long ReaderHandle);

/*****************************************

* 功能: 設定為操作TypeB卡

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

* 返回值: 

*成功返回0

***************************************************************/

long PICC_Reader_SetTypeB(long ReaderHandle);

/*****************************************

* 功能: 請求卡片

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

* 返回值: 

*成功返回0

***************************************************************/

long PICC_Reader_Request(long ReaderHandle);

/*****************************************

* 功能: 防碰撞

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*UID: [OUT] 4位元組UID

* 返回值: 

*成功返回0

***************************************************************/

long PICC_Reader_anticoll(long ReaderHandle,unsigned char *uid);

/*****************************************

* 功能: 選擇卡片

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*cardtype:[IN] 0x41表示TypeA & M1, 0x42表示TypeB

* 返回值: 

*成功返回0

***************************************************************/

long PICC_Reader_Select(long ReaderHandle,unsigned char cardtype);

/*****************************************

* 功能: TypeA卡上電

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*Response: [OUT] 上電返回資料

* 返回值: 

*成功返回資料長度

***************************************************************/

long PICC_Reader_PowerOnTypeA(long ReaderHandle,unsigned char* Response);

/*****************************************

* 功能: TypeB卡上電

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*Response: [OUT] 上電返回資料

* 返回值: 

*成功返回資料長度

***************************************************************/

long PICC_Reader_PowerOnTypeB(long ReaderHandle,unsigned char* Response);

/*****************************************

* 功能: TypeA & B 卡執行APDU命令

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*Lenth_of_Command_APDU: [IN] APDU命令的長度

*Command_APDU:[IN] APDU命令

*Response_APDU: [OUT] 響應資訊

* 返回值: 

*成功返回響應資訊資料的長度

***************************************************************/

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 函式成功時的返回值

*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 函式成功時的返回值

*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寫卡

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*Addr:[IN] 塊地址 S50系列卡 0~63, S70系列卡 0~255, 例如:1扇區1塊,這裡Addr=5=1*4 + 1(扇區號*4 + 塊號)

*Data: [IN] 16位元組待寫入資料

* 返回值: 

*成功返回0

***************************************************************************************************************/

long PICC_Reader_Write(long ReaderHandle,unsigned char Addr,unsigned char *Data);

/******************************************************************************************************************************************\

\   /

/磁條卡   \

\   /

\******************************************************************************************************************************************/

/*****************************************

* 功能: 讀磁條卡

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

*ctime:[IN] 等待刷卡的超時時間,單位:秒

*track:[IN] 磁軌 1~3

*rlen: [OUT] 返回的磁軌資料長度

*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 函式成功時的返回值

* 返回值: 

*成功返回0,執行成功後可呼叫下列get函式獲取相應的資訊

***********************************************************************/

long PICC_ReadIDCard(long ReaderHandle);

/*****************************************

* 功能: 讀取證件,包含指紋(居民身份證 + 外國人永久居留證 + 港澳臺居民居住證)

* 引數: 

*ReaderHandle:[IN] 執行ICC_Reader_Open 函式成功時的返回值

* 返回值: 

*成功返回0,執行成功後可呼叫下列get函式獲取相應的資訊

***********************************************************************/

long PICC_ReadIDCardFP(long ReaderHandle);

/*****************************************

* 功能: 獲取證件型別

* 引數: 

*無

* 返回值: 

*0:表示居民身份證

*1:表示外國人永久居留證

*2:表示港澳臺居民居住證

*****************************************/

int GetCardType();

/*****************************************

* 功能: 獲取姓名

* 引數: 

*pName: [OUT] 姓名

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetName(char* pName);

/*****************************************

* 功能: 獲取性別

* 引數: 

*pSex: [OUT] 性別

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetSex(char* pSex);

/*****************************************

* 功能: 獲取民族

* 引數: 

*pNation: [OUT] 民族

* 返回值: 

*成功返回0

* 包含證件型別:0

*****************************************/

int GetNation(char* pNation);

/*****************************************

* 功能: 獲取出生日期

* 引數: 

*pBirth: [OUT] 出生日期

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetBirth(char* pBirth);

/*****************************************

* 功能: 獲取住址

* 引數: 

*pAddress: [OUT] 住址

* 返回值: 

*成功返回0

* 包含證件型別:0、2

*****************************************/

int GetAddress(char* pAddress);

/*****************************************

* 功能: 獲取證件號碼

* 引數: 

*pCertNo: [OUT] 證件號碼

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetCertNo(char* pCertNo);

/*****************************************

* 功能: 獲取簽發機關

* 引數: 

*pDepartemt: [OUT] 簽發機關

* 返回值: 

*成功返回0

* 包含證件型別:0、2

*****************************************/

int GetDepartemt(char* pDepartemt);

/*****************************************

* 功能: 獲取有效起始日期

* 引數: 

*pEffectDate: [OUT] 有效起始日期

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetEffectDate(char* pEffectDate);

/*****************************************

* 功能: 獲取有效截止日期

* 引數: 

*pExpireDate: [OUT] 有效截止日期

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetExpireDate(char* pExpireDate);

/*****************************************

* 功能: 獲取通行證號碼

* 引數: 

*pTXZHM: [OUT] 通行證號碼

* 返回值: 

*成功返回0

* 包含證件型別:2

*****************************************/

int GetTXZHM(char* pTXZHM);

/*****************************************

* 功能: 獲取通行證簽發次數

* 引數: 

*pTXZQFCS: [OUT] 通行證簽發次數

* 返回值: 

*成功返回0

* 包含證件型別:2

*****************************************/

int GetTXZQFCS(char* pTXZQFCS);

/*****************************************

* 功能: 獲取英文名

* 引數: 

*pEnName: [OUT] 外國人英文名

* 返回值: 

*成功返回0

* 包含證件型別:1

*****************************************/

int GetEnName(char* pEnName);

/*****************************************

* 功能: 獲取國籍程式碼

* 引數: 

*pNationalityCode: [OUT] 外國人國籍程式碼

* 返回值: 

*成功返回0

* 包含證件型別:1

*****************************************/

int GetNationalityCode(char* pNationalityCode);

/*****************************************

* 功能: 獲取證件版本

* 引數: 

*pCardVersion: [OUT] 外國人居留證證件版本

* 返回值: 

*成功返回0

* 包含證件型別:1

*****************************************/

int GetCardVersion(char* pCardVersion);

/*****************************************

* 功能: 獲取照片

* 引數: 

*dlpath: [IN] so路徑, 例如:"../lib/libwltdecode.so"

*pBmpfilepath: [IN] 照片路徑, 例如:"../list/zp.bmp"

* 返回值: 

*成功返回0

* 包含證件型別:0、1、2

*****************************************/

int GetBmpFile(const char* dlpath, char* pBmpfilepath);

/*****************************************

* 功能: 是否含指紋資訊

* 引數: 

*無

* 返回值: 

*成功返回指紋資料長度,0表示沒有

* 包含證件型別:0、1、2

*****************************************/

int IsFingerExist();

/*****************************************

* 功能: 獲取指紋資訊

* 引數: 

*fpInfo: [OUT] 指紋資料

* 返回值: 

*成功返回獲取到的指紋資料長度,0表示沒有

* 包含證件型別:0、1、2

*****************************************/

int GetFingerprint(unsigned char* fpInfo);

#ifdef __cplusplus

}

#endif

#endif