最近有个身份证识别功能需要实现,通过整理把接口进行了封装整理,方便其他业务逻辑调用,代码如下:
1、IDCardHelper.h
#pragma once
#include <map>
#pragma pack(1)
typedef struct tagIDCardData {
char Name[32]; //姓名
char Sex[6]; //性别
char Nation[64]; //名族
char Born[18]; //出生日期
char Address[72]; //住址
char IDCardNo[38]; //身份证号
char GrantDept[32]; //发证机关
char UserLifeBegin[18]; // 有效开始日期
char UserLifeEnd[18]; // 有效截止日期
char PassID[20]; // 通行证号码
char IssuesTimes[6]; //签发次数
char reserved[12]; // 保留
char PhotoFileName[255];// 照片路径
char CardType[4]; //证件类型
char EngName[122]; //英文名
char CertVol[6]; //证件版本号
}IDCardData;
#pragma pack()
typedef int(*ProgressCallback)(int progress);
//二代证相关API---------------------------------------------------------------------------------------
typedef int (_stdcall *Syn_GetCOMBaud)(int iPort, unsigned int * puiBaudRate);
typedef int (_stdcall *Syn_SetCOMBaud)(int iPort, unsigned int uiCurrBaud, unsigned int uiSetBaud);
typedef int (_stdcall *Syn_OpenPort)(int iPort);
typedef int (_stdcall *Syn_ClosePort)(int iPort);
//
// SAM类函数
//
//
typedef int (_stdcall *Syn_SetMaxRFByte)(int iPort, unsigned char ucByte, int bIfOpen);
typedef int (_stdcall *Syn_ResetSAM)(int iPort, int iIfOpen);
typedef int (_stdcall *Syn_GetSAMStatus)(int iPort, int iIfOpen);
typedef int (_stdcall *Syn_GetSAMID)(int iPort, unsigned char * pucSAMID, int iIfOpen);
typedef int (_stdcall *Syn_GetSAMIDToStr)(int iPort, char * pcSAMID, int iIfOpen);
//
// 身份证卡类函数
//
//
typedef int (_stdcall *Syn_StartFindIDCard)(int iPort, unsigned char * pucIIN, int iIfOpen);
typedef int (_stdcall *Syn_SelectIDCard)(int iPort, unsigned char * pucSN, int iIfOpen);
typedef int (_stdcall *Syn_ReadBaseMsg)(
int iPort,
unsigned char * pucCHMsg,
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int * puiPHMsgLen,
int iIfOpen);
typedef int (_stdcall *Syn_ReadBaseMsgToFile)(
int iPort,
char * pcCHMsgFileName,
unsigned int * puiCHMsgFileLen,
char * pcPHMsgFileName,
unsigned int * puiPHMsgFileLen,
int iIfOpen
);
typedef int (_stdcall *Syn_ReadBaseFPMsg)(
int iPort,
unsigned char * pucCHMsg,
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int * puiPHMsgLen,
unsigned char * pucFPMsg,
unsigned int * puiFPMsgLen,
int iIfOpen
);
typedef int (_stdcall *Syn_ReadBaseFPMsgToFile)(
int iPort,
char * pcCHMsgFileName,
unsigned int * puiCHMsgFileLen,
char * pcPHMsgFileName,
unsigned int * puiPHMsgFileLen,
char * pcFPMsgFileName,
unsigned int * puiFPMsgFileLen,
int iIfOpen
);
typedef int (_stdcall *Syn_ReadNewAppMsg)(int iPort, unsigned char * pucAppMsg, unsigned int * puiAppMsgLen, int iIfOpen);
typedef int (_stdcall *Syn_GetBmp)(int iPort, char * Wlt_File);
typedef int (_stdcall *Syn_ReadMsg)(int iPort, int iIfOpen, IDCardData *pIDCardData);
typedef int (_stdcall *Syn_ReadFPMsg)(int iPort, int iIfOpen, IDCardData *pIDCardData, char * cFPhotoname);
typedef int (_stdcall *Syn_FindReader)();
typedef int (_stdcall *Syn_FindUSBReader)();
typedef int (_stdcall *Syn_BmpToJpeg)(char * cBmpName, char * cJpegName);
typedef int (_stdcall *Syn_PhotoToStrBase64)(char * cBase64, int * iLen, char *cPhotoName);
typedef int (_stdcall *Syn_StrBase64ToPhoto)(char * cBase64, int iLen, char *cPhotoName);
//
// 设置附加功能函数
//
//
typedef int (_stdcall *Syn_SetPhotoPath)(int iOption, char * cPhotoPath);
typedef int (_stdcall *Syn_SetPhotoType)(int iType);
typedef int (_stdcall *Syn_SetPhotoName)(int iType);
typedef int (_stdcall *Syn_SetPhotoNameEx)(int iType, char * cPhotoname);
typedef int (_stdcall *Syn_SetSexType)(int iType);
typedef int (_stdcall *Syn_SetNationType)(int iType);
typedef int (_stdcall *Syn_SetBornType)(int iType);
typedef int (_stdcall *Syn_SetUserLifeBType)(int iType);
typedef int (_stdcall *Syn_SetUserLifeEType)(int iType, int iOption);
//
// USBHID函数
//
//
typedef int (_stdcall *Syn_USBHIDM1Reset)(int iPort, DWORD * pdwCardSN, unsigned char * pbSize);
typedef int (_stdcall *Syn_USBHIDM1AuthenKey)(int iPort, unsigned char KeyType, unsigned char BlockNo, unsigned char * pKey);
typedef int (_stdcall *Syn_USBHIDM1ReadBlock)(int iPort, unsigned char BlockNo, unsigned char * pBlock);
typedef int (_stdcall *Syn_USBHIDM1WriteBlock)(int iPort, unsigned char BlockNo, unsigned char * pBlock);
typedef int (_stdcall *Syn_USBHIDM1Halt)(int iPort);
typedef int (_stdcall *Syn_USBHIDReadFactoryInfo)(
int iPort,
unsigned char * pFactory,
unsigned char * pVol,
unsigned char * pSerialNo,
unsigned char * pReserved);
typedef int (_stdcall *Syn_USBHIDWriteFactoryInfo)(
int iPort,
unsigned char * pFactory,
unsigned char * pVol,
unsigned char * pSerialNo,
unsigned char * pReserved);
typedef int (_stdcall *Syn_USBHIDReadUserInfo)(int iPort, unsigned char *pInfo);
typedef int (_stdcall *Syn_USBHIDWriteUserInfo)(int iPort, unsigned char *pInfo);
typedef int (_stdcall *Syn_USBHIDGetMaxByte)(int iPort, unsigned char *pSAMMaxByte, unsigned char *pARMVol);
typedef int (_stdcall *Syn_USBHIDSendSound)(int iPort, unsigned char ucSound);
typedef int (_stdcall *Syn_USBHIDControlLED)(int iPort, unsigned char ucLed);
typedef int (_stdcall *Syn_USBHIDControlBeep)(int iPort, unsigned char ucType, unsigned short usTime);
typedef int (_stdcall *Syn_USBHIDGetSecCardID)(int iPort, unsigned char * pdwCardSN);
typedef int (_stdcall *Syn_USBHIDSIMpowerOn)(int iPort, unsigned char * ucATR, unsigned char * ucLen);
typedef int (_stdcall *Syn_USBHIDSIMpowerOff)(int iPort);
typedef int (_stdcall *Syn_USBHIDSIMAPDU)(int iPort, int slen, unsigned char *datasend, int* rlen, unsigned char* datareceive);
//typedef int (_stdcall *Syn_USBHIDReadUserMac)(int iPort, unsigned char *pMac);
typedef int (_stdcall *Syn_USBHIDWriteUserMac)(int iPort, unsigned char *pMac);
//add new interface
//int _stdcall Syn_USBHIDSetTransportType(int iPort,int type);
typedef int (_stdcall *Syn_USBHIDSetUserIDCode)(int iPort, unsigned char *code, int len);
typedef int (_stdcall *Syn_USBHIDIsEncryptMode)(int iPort);
typedef int (_stdcall *Syn_USBHIDdoUpdate)(int iPort, unsigned char *updateBuffer, long bufferLen, ProgressCallback progressCallback);
//
// USBReade.dll USBHID函数
//
//
//typedef int (_stdcall *Syn_USBOpenPort)(int iPort);
//typedef int (_stdcall *Syn_USBClosePort)(int iPort);
//typedef int (_stdcall *Syn_USBSetMaxRFByte)(int iPort, unsigned char ucByte, int bIfOpen);
//typedef int (_stdcall *Syn_USBStartFindIDCard)(int iPort, unsigned char * pucIIN, int iIfOpen);
//typedef int (_stdcall *Syn_USBSelectIDCard)(int iPort, unsigned char * pucSN, int iIfOpen);
//typedef int (_stdcall *Syn_USBReadBaseMsg)(
// int iPort,
// unsigned char * pucCHMsg,
// unsigned int * puiCHMsgLen,
// unsigned char * pucPHMsg,
// unsigned int * puiPHMsgLen,
// int iIfOpen);
//typedef int (_stdcall *Syn_USBReadBaseFPMsg)(
// int iPort,
// unsigned char * pucCHMsg,
// unsigned int * puiCHMsgLen,
// unsigned char * pucPHMsg,
// unsigned int * puiPHMsgLen,
// unsigned char * pucFPMsg,
// unsigned int * puiFPMsgLen,
// int iIfOpen
// );
//typedef int (_stdcall *Syn_USBReadNewAppMsg)(int iPort, unsigned char * pucAppMsg, unsigned int * puiAppMsgLen, int iIfOpen);
//typedef int (_stdcall *Syn_USBGetSAMID)(int iPort, unsigned char * pucSAMID, int iIfOpen);
//typedef int (_stdcall *Syn_USBGetSAMIDToStr)(int iPort, char * pcSAMID, int iIfOpen);
//typedef int (_stdcall *Syn_USBM1Reset)(int iPort, DWORD * pdwCardSN, unsigned char * pbSize);
//typedef int (_stdcall *Syn_USBM1AuthenKey)(int iPort, unsigned char KeyType, unsigned char BlockNo, unsigned char * pKey);
//typedef int (_stdcall *Syn_USBM1ReadBlock)(int iPort, unsigned char BlockNo, unsigned char * pBlock);
//typedef int (_stdcall *Syn_USBM1WriteBlock)(int iPort, unsigned char BlockNo, unsigned char * pBlock);
//typedef int (_stdcall *Syn_USBM1Halt)(int iPort);
//typedef int (_stdcall *Syn_USBReadFactoryInfo)(
// int iPort,
// unsigned char * pFactory,
// unsigned char * pVol,
// unsigned char * pSerialNo,
// unsigned char * pReserved);
//typedef int (_stdcall *Syn_USBWriteFactoryInfo)(
// int iPort,
// unsigned char * pFactory,
// unsigned char * pVol,
// unsigned char * pSerialNo,
// unsigned char * pReserved);
//typedef int (_stdcall *Syn_USBReadUserInfo)(int iPort, unsigned char *pInfo);
//typedef int (_stdcall *Syn_USBWriteUserInfo)(int iPort, unsigned char *pInfo);
//typedef int (_stdcall *Syn_USBGetMaxByte)(int iPort, unsigned char *pSAMMaxByte, unsigned char *pARMVol);
//typedef int (_stdcall *Syn_USBSendSound)(int iPort, unsigned char ucSound);
//typedef int (_stdcall *Syn_USBControlLED)(int iPort, unsigned char ucLed);
//typedef int (_stdcall *Syn_USBControlBeep)(int iPort, unsigned char ucType, unsigned short usTime);
//typedef int (_stdcall *Syn_USBGetSecCardID)(int iPort, unsigned char * pdwCardSN);
//typedef int (_stdcall *Syn_USBSIMpowerOn)(int iPort, unsigned char * ucATR, unsigned char * ucLen);
//typedef int (_stdcall *Syn_USBSIMpowerOff)(int iPort);
//typedef int (_stdcall *Syn_USBSIMAPDU)(int iPort, int slen, unsigned char *datasend, int* rlen, unsigned char* datareceive);
//typedef int (_stdcall *Syn_USBReadUserMac)(int iPort, unsigned char *pMac);
//typedef int (_stdcall *Syn_USBWriteUserMac)(int iPort, unsigned char *pMac);
//typedef int (_stdcall *Syn_USBPSAMpowerOn)( int iPort, int slot, unsigned char * ucATR, unsigned char * ucLen);
//typedef int (_stdcall *Syn_USBPSAMpowerOff)( int iPort, int slot);
//typedef int (_stdcall *Syn_USBPSAMAPDU)(int iPort, int slot,int slen,unsigned char *datasend,int* rlen,unsigned char* datareceive);
//typedef int (_stdcall *Syn_USBControlFingerLed)( int iPort,unsigned char ucType,unsigned short usTime);
typedef int (_stdcall *Syn_PSAMpowerOn)( int iPort, int slot, unsigned char * ucATR, unsigned char * ucLen);
typedef int (_stdcall *Syn_PSAMpowerOff)( int iPort, int slot);
typedef int (_stdcall *Syn_PSAMAPDU)(int iPort, int slot,int slen,unsigned char *datasend,int* rlen,unsigned char* datareceive);
typedef int (_stdcall *Syn_ControlFingerLed)( int iPort,unsigned char ucType,unsigned short usTime);
//add new interface
//int _stdcall Syn_USBSetTransportType(int iPort,int type);
//typedef int (_stdcall *Syn_USBSetUserIDCode)(int iPort, unsigned char *code, int len);
//typedef int (_stdcall *Syn_USBIsEncryptMode)(int iPort);
//typedef int (_stdcall *Syn_USBdoUpdate)(int iPort, unsigned char *updateBuffer, long bufferLen, ProgressCallback progressCallback);
//
// 串口操作M1卡函数
//
//
typedef int (_stdcall *Syn_SerialFindReader)(int iPort, unsigned int* badurate);
typedef int (_stdcall *Syn_SerialOpen)(int iPort, int badurate);
typedef int (_stdcall *Syn_SerialClose)(int iPort);
typedef int (_stdcall *Syn_SerialM1Reset)(int iPort, DWORD * pdwCardSN, unsigned char * pbSize);
typedef int (_stdcall *Syn_SerialM1AuthenKey)(int iPort, unsigned char KeyType, unsigned char BlockNo, unsigned char * pKey);
typedef int (_stdcall *Syn_SerialM1ReadBlock)(int iPort, unsigned char BlockNo, unsigned char * pBlock);
typedef int (_stdcall *Syn_SerialM1WriteBlock)(int iPort, unsigned char BlockNo, unsigned char * pBlock);
typedef int (_stdcall *Syn_SerialM1Halt)(int iPort);
typedef int (_stdcall *Syn_SerialStartFindCPUCard)( int iPort , unsigned char * ATS, int *rlen);
typedef int (_stdcall *Syn_SerialStartRemoveCPUCard)( int iPort , unsigned char * ATS);
typedef int (_stdcall *Syn_SerialPCTOCPUCard)(int iPort,int slen,unsigned char *datasend,int* rlen,unsigned char* datareceive);
typedef int (_stdcall *Syn_SerialSIMpowerOn)( int iPort, unsigned char * ucATR , unsigned char * ucLen);
typedef int (_stdcall *Syn_SerialSIMpowerOff)( int iPort);
typedef int (_stdcall *Syn_SerialSIMAPDU)(int iPort,int slen,unsigned char *datasend,int* rlen,unsigned char* datareceive);
typedef int (_stdcall *Syn_SerialControlBeep)( int iPort,unsigned char ucType,unsigned short usTime);
typedef int (_stdcall *Syn_SerialGetSecCardID)( int iPort, unsigned char * pdwCardSN);
typedef int (_stdcall *Syn_SerialPSAMpowerOn)( int iPort, int slot, unsigned char * ucATR, unsigned char * ucLen);
typedef int (_stdcall *Syn_SerialPSAMpowerOff)( int iPort, int slot);
typedef int (_stdcall *Syn_SerialPSAMAPDU)(int iPort, int slot,int slen,unsigned char *datasend,int* rlen,unsigned char* datareceive);
typedef int (_stdcall *Syn_SerialControlFingerLed)( int iPort,unsigned char ucType,unsigned short usTime);
typedef int (_stdcall *Syn_SerialReadUserInfo)( int iPort,unsigned char *pInfo);
typedef int (_stdcall *Syn_SerialWriteUserInfo)( int iPort,unsigned char *pInfo);
//typedef int (_stdcall *Syn_USBStartFindCPUCard)(int iPort, unsigned char * ATS, int *rlen);
typedef int (_stdcall *Syn_StartFindCPUCard)(int iPort, unsigned char * ATS, int *rlen);
//typedef int (_stdcall *Syn_USBStartRemoveCPUCard)(int iPort, unsigned char * ATS);
typedef int (_stdcall *Syn_StartRemoveCPUCard)(int iPort, unsigned char * ATS);
//typedef int (_stdcall *Syn_USBPCTOCPUCard)(int iPort, int slen, unsigned char *datasend, int* rlen, unsigned char* datareceive);
typedef int (_stdcall *Syn_PCTOCPUCard)(int iPort, int slen, unsigned char *datasend, int* rlen, unsigned char* datareceive);
class IDCardHelper
{
public:
/
/// 单例模式访问接口
/// @return 本类对象指针地址
/
static IDCardXZX* Instance(){
static IDCardXZX icf;
return &icf;
}
~IDCardXZX(void);
int FindUSBDriverDevice();
///寻找读卡器
int FindCard();
/
/// 读取身份证信息
/// @return 返回是否成功标志 0:成功 -1:动态库加载失败 -2:没有找到读卡器 -3:读卡器连接在串口 -4:打开端口错误 -5:获取最大通信字节数失败
/// -6:端口9999异常 -7:eRR1 -8:eRR2 -9:eRR3 -10:照片解码错误 -11:完整过程读取身份证信息错误
/
int ReadCardInfo();
/
/// 清空身份证信息
/// @return 无
/
void ClearIdCardInfo();
/
/// 获取身份证号
/// @return 身份证号
/
CString IdNo(){ return m_idcardData.IDCardNo;};
/
/// 获取姓名
/// @return 姓名
/
CString Name(){ return m_idcardData.Name;};
/
/// 获取性别
/// @return 性别
/
CString Sex(){ return m_idcardData.Sex;};
/
/// 获取年龄
/// @return 年龄
/
CString Age();
protected:
IDCardXZX(void);
/
/// 初始化参数
/// @return 无
/
void InitParam();
/
/// 释放设备动态库
/// @return 无
/
void FreeSubModule();
/
/// 加载设备动态库
/// @return 返回加载状态
/
bool LoadSubModule();
Syn_GetCOMBaud XZX_GetCOMBaud;
Syn_SetCOMBaud XZX_SetCOMBaud;
Syn_OpenPort XZX_OpenPort;
Syn_ClosePort XZX_ClosePort;
//
// SAM类函数
//
//
Syn_SetMaxRFByte XZX_SetMaxRFByte;
Syn_ResetSAM XZX_ResetSAM;
Syn_GetSAMStatus XZX_GetSAMStatus;
Syn_GetSAMID XZX_GetSAMID;
Syn_GetSAMIDToStr XZX_GetSAMIDToStr;
//
// 身份证卡类函数
//
//
Syn_StartFindIDCard XZX_StartFindIDCard;
Syn_SelectIDCard XZX_SelectIDCard;
Syn_ReadBaseMsg XZX_ReadBaseMsg;
Syn_ReadBaseMsgToFile XZX_ReadBaseMsgToFile;
Syn_ReadBaseFPMsg XZX_ReadBaseFPMsg;
Syn_ReadBaseFPMsgToFile XZX_ReadBaseFPMsgToFile;
Syn_ReadNewAppMsg XZX_ReadNewAppMsg;
Syn_GetBmp XZX_GetBmp;
Syn_ReadMsg XZX_ReadMsg;
Syn_ReadFPMsg XZX_ReadFPMsg;
Syn_FindReader XZX_FindReader;
Syn_FindUSBReader XZX_FindUSBReader;
Syn_BmpToJpeg XZX_BmpToJpeg;
Syn_PhotoToStrBase64 XZX_PhotoToStrBase64;
Syn_StrBase64ToPhoto XZX_StrBase64ToPhoto;
//
// 设置附加功能函数
//
//
Syn_SetPhotoPath XZX_SetPhotoPath;
Syn_SetPhotoType XZX_SetPhotoType;
Syn_SetPhotoName XZX_SetPhotoName;
Syn_SetPhotoNameEx XZX_SetPhotoNameEx;
Syn_SetSexType XZX_SetSexType;
Syn_SetNationType XZX_SetNationType;
Syn_SetBornType XZX_SetBornType;
Syn_SetUserLifeBType XZX_SetUserLifeBType;
Syn_SetUserLifeEType XZX_SetUserLifeEType;
//
// USBHID函数
//
//
Syn_USBHIDM1Reset XZX_USBHIDM1Reset;
Syn_USBHIDM1AuthenKey XZX_USBHIDM1AuthenKey;
Syn_USBHIDM1ReadBlock XZX_USBHIDM1ReadBlock;
Syn_USBHIDM1WriteBlock XZX_USBHIDM1WriteBlock;
Syn_USBHIDM1Halt XZX_USBHIDM1Halt;
Syn_USBHIDReadFactoryInfo XZX_USBHIDReadFactoryInfo;
Syn_USBHIDWriteFactoryInfo XZX_USBHIDWriteFactoryInfo;
Syn_USBHIDReadUserInfo XZX_USBHIDReadUserInfo;
Syn_USBHIDWriteUserInfo XZX_USBHIDWriteUserInfo;
Syn_USBHIDGetMaxByte XZX_USBHIDGetMaxByte;
Syn_USBHIDSendSound XZX_USBHIDSendSound;
Syn_USBHIDControlLED XZX_USBHIDControlLED;
Syn_USBHIDControlBeep XZX_USBHIDControlBeep;
Syn_USBHIDGetSecCardID XZX_USBHIDGetSecCardID;
Syn_USBHIDSIMpowerOn XZX_USBHIDSIMpowerOn;
Syn_USBHIDSIMpowerOff XZX_USBHIDSIMpowerOff;
Syn_USBHIDSIMAPDU XZX_USBHIDSIMAPDU;
//Syn_USBHIDReadUserMac XZX_USBHIDReadUserMac;
Syn_USBHIDWriteUserMac XZX_USBHIDWriteUserMac;
//add new interface
//int _stdcall Syn_USBHIDSetTransportType(int iPort,int type);
Syn_USBHIDSetUserIDCode XZX_USBHIDSetUserIDCode;
Syn_USBHIDIsEncryptMode XZX_USBHIDIsEncryptMode;
Syn_USBHIDdoUpdate XZX_USBHIDdoUpdate;
//
// USBReade.dll USBHID函数
//
//
//Syn_USBOpenPort XZX_USBOpenPort;
//Syn_USBClosePort XZX_USBClosePort;
//Syn_USBSetMaxRFByte XZX_USBSetMaxRFByte;
//Syn_USBStartFindIDCard XZX_USBStartFindIDCard;
//Syn_USBSelectIDCard XZX_USBSelectIDCard;
//Syn_USBReadBaseMsg XZX_USBReadBaseMsg;
//Syn_USBReadBaseFPMsg XZX_USBReadBaseFPMsg;
//Syn_USBReadNewAppMsg XZX_USBReadNewAppMsg;
//Syn_USBGetSAMID XZX_USBGetSAMID;
//Syn_USBGetSAMIDToStr XZX_USBGetSAMIDToStr;
//Syn_USBM1Reset XZX_USBM1Reset;
//Syn_USBM1AuthenKey XZX_USBM1AuthenKey;
//Syn_USBM1ReadBlock XZX_USBM1ReadBlock;
//Syn_USBM1WriteBlock XZX_USBM1WriteBlock;
//Syn_USBM1Halt XZX_USBM1Halt;
//Syn_USBReadFactoryInfo XZX_USBReadFactoryInfo;
//Syn_USBWriteFactoryInfo XZX_USBWriteFactoryInfo;
//Syn_USBReadUserInfo XZX_USBReadUserInfo;
//Syn_USBWriteUserInfo XZX_USBWriteUserInfo;
//Syn_USBGetMaxByte XZX_USBGetMaxByte;
//Syn_USBSendSound XZX_USBSendSound;
//Syn_USBControlLED XZX_USBControlLED;
//Syn_USBControlBeep XZX_USBControlBeep;
//Syn_USBGetSecCardID XZX_USBGetSecCardID;
//Syn_USBSIMpowerOn XZX_USBSIMpowerOn;
//Syn_USBSIMpowerOff XZX_USBSIMpowerOff;
//Syn_USBSIMAPDU XZX_USBSIMAPDU;
//Syn_USBReadUserMac XZX_USBReadUserMac;
//Syn_USBWriteUserMac XZX_USBWriteUserMac;
//Syn_USBPSAMpowerOn XZX_USBPSAMpowerOn;
//Syn_USBPSAMpowerOff XZX_USBPSAMpowerOff;
//Syn_USBPSAMAPDU XZX_USBPSAMAPDU;
//Syn_USBControlFingerLed XZX_USBControlFingerLed;
Syn_PSAMpowerOn XZX_PSAMpowerOn;
Syn_PSAMpowerOff XZX_PSAMpowerOff;
Syn_PSAMAPDU XZX_PSAMAPDU;
Syn_ControlFingerLed XZX_ControlFingerLed;
//add new interface
//int _stdcall Syn_USBSetTransportType(int iPort,int type);
//Syn_USBSetUserIDCode XZX_USBSetUserIDCode;
//Syn_USBIsEncryptMode XZX_USBIsEncryptMode;
//Syn_USBdoUpdate XZX_USBdoUpdate;
//
// 串口操作M1卡函数
//
//
Syn_SerialFindReader XZX_SerialFindReader;
Syn_SerialOpen XZX_SerialOpen;
Syn_SerialClose XZX_SerialClose;
Syn_SerialM1Reset XZX_SerialM1Reset;
Syn_SerialM1AuthenKey XZX_SerialM1AuthenKey;
Syn_SerialM1ReadBlock XZX_SerialM1ReadBlock;
Syn_SerialM1WriteBlock XZX_SerialM1WriteBlock;
Syn_SerialM1Halt XZX_SerialM1Halt;
Syn_SerialStartFindCPUCard XZX_SerialStartFindCPUCard;
Syn_SerialStartRemoveCPUCard XZX_SerialStartRemoveCPUCard;
Syn_SerialPCTOCPUCard XZX_SerialPCTOCPUCard;
Syn_SerialSIMpowerOn XZX_SerialSIMpowerOn;
Syn_SerialSIMpowerOff XZX_SerialSIMpowerOff;
Syn_SerialSIMAPDU XZX_SerialSIMAPDU;
Syn_SerialControlBeep XZX_SerialControlBeep;
Syn_SerialGetSecCardID XZX_SerialGetSecCardID;
Syn_SerialPSAMpowerOn XZX_SerialPSAMpowerOn;
Syn_SerialPSAMpowerOff XZX_SerialPSAMpowerOff;
Syn_SerialPSAMAPDU XZX_SerialPSAMAPDU;
Syn_SerialControlFingerLed XZX_SerialControlFingerLed;
Syn_SerialReadUserInfo XZX_SerialReadUserInfo;
Syn_SerialWriteUserInfo XZX_SerialWriteUserInfo;
//Syn_USBStartFindCPUCard XZX_USBStartFindCPUCard;
Syn_StartFindCPUCard XZX_StartFindCPUCard;
//Syn_USBStartRemoveCPUCard XZX_USBStartRemoveCPUCard;
Syn_StartRemoveCPUCard XZX_StartRemoveCPUCard;
//Syn_USBPCTOCPUCard XZX_USBPCTOCPUCard;
Syn_PCTOCPUCard XZX_PCTOCPUCard;
protected:
HINSTANCE m_hSubModuleA;
bool m_bSubModEnable;
int m_iPort;
unsigned int m_CurrBaud;
unsigned char m_iMaxByte;
int m_iReadStart;
int m_iReadSum;
int m_iReadOKSum;
IDCardData m_idcardData;
int m_errNum;
public:
std::map<int,CString> m_errMsgs;
bool link;
};
2、IDCardHelper.cpp
#include "stdafx.h"
#include "IDCardXZX.h"
IDCardXZX::IDCardXZX(void)
{
InitParam();
memset(&m_idcardData,0,sizeof(m_idcardData));
link = true;
}
IDCardXZX::~IDCardXZX(void)
{
FreeSubModule();
}
/
/// 初始化参数
/// @return 无
/
void IDCardXZX::InitParam()
{
m_hSubModuleA = NULL;
m_bSubModEnable = false;
XZX_FindReader = NULL;
}
/
/// 释放设备动态库
/// @return 无
/
void IDCardXZX::FreeSubModule()
{
if(NULL != m_hSubModuleA)
{
FreeLibrary(m_hSubModuleA);
m_hSubModuleA = NULL;
XZX_GetCOMBaud = NULL;
XZX_SetCOMBaud = NULL;
XZX_OpenPort = NULL;
XZX_ClosePort = NULL;
//
// SAM类函数
//
//
XZX_SetMaxRFByte = NULL;
XZX_ResetSAM = NULL;
XZX_GetSAMStatus = NULL;
XZX_GetSAMID = NULL;
XZX_GetSAMIDToStr = NULL;
//
// 身份证卡类函数
//
//
XZX_StartFindIDCard = NULL;
XZX_SelectIDCard = NULL;
XZX_ReadBaseMsg = NULL;
XZX_ReadBaseMsgToFile = NULL;
XZX_ReadBaseFPMsg = NULL;
XZX_ReadBaseFPMsgToFile = NULL;
XZX_ReadNewAppMsg = NULL;
XZX_GetBmp = NULL;
XZX_ReadMsg = NULL;
XZX_ReadFPMsg = NULL;
XZX_FindReader = NULL;
XZX_FindUSBReader = NULL;
XZX_BmpToJpeg = NULL;
XZX_PhotoToStrBase64 = NULL;
XZX_StrBase64ToPhoto = NULL;
//
// 设置附加功能函数
//
//
XZX_SetPhotoPath = NULL;
XZX_SetPhotoType = NULL;
XZX_SetPhotoName = NULL;
XZX_SetPhotoNameEx = NULL;
XZX_SetSexType = NULL;
XZX_SetNationType = NULL;
XZX_SetBornType = NULL;
XZX_SetUserLifeBType = NULL;
XZX_SetUserLifeEType = NULL;
//
// USBHID函数
//
//
XZX_USBHIDM1Reset = NULL;
XZX_USBHIDM1AuthenKey = NULL;
XZX_USBHIDM1ReadBlock = NULL;
XZX_USBHIDM1WriteBlock = NULL;
XZX_USBHIDM1Halt = NULL;
XZX_USBHIDReadFactoryInfo = NULL;
XZX_USBHIDWriteFactoryInfo = NULL;
XZX_USBHIDReadUserInfo = NULL;
XZX_USBHIDWriteUserInfo = NULL;
XZX_USBHIDGetMaxByte = NULL;
XZX_USBHIDSendSound = NULL;
XZX_USBHIDControlLED = NULL;
XZX_USBHIDControlBeep = NULL;
XZX_USBHIDGetSecCardID = NULL;
XZX_USBHIDSIMpowerOn = NULL;
XZX_USBHIDSIMpowerOff = NULL;
XZX_USBHIDSIMAPDU = NULL;
//XZX_USBHIDReadUserMac = NULL;
XZX_USBHIDWriteUserMac = NULL;
//add new interface
//int _stdcall Syn_USBHIDSetTransportType(int iPort,int type);
XZX_USBHIDSetUserIDCode = NULL;
XZX_USBHIDIsEncryptMode = NULL;
XZX_USBHIDdoUpdate = NULL;
//
// USBReade.dll USBHID函数
//
//
//XZX_USBOpenPort = NULL;
//XZX_USBClosePort = NULL;
//XZX_USBSetMaxRFByte = NULL;
//XZX_USBStartFindIDCard = NULL;
//XZX_USBSelectIDCard = NULL;
//XZX_USBReadBaseMsg = NULL;
//XZX_USBReadBaseFPMsg = NULL;
//XZX_USBReadNewAppMsg = NULL;
//XZX_USBGetSAMID = NULL;
//XZX_USBGetSAMIDToStr = NULL;
//XZX_USBM1Reset = NULL;
//XZX_USBM1AuthenKey = NULL;
//XZX_USBM1ReadBlock = NULL;
//XZX_USBM1WriteBlock = NULL;
//XZX_USBM1Halt = NULL;
//XZX_USBReadFactoryInfo = NULL;
//XZX_USBWriteFactoryInfo = NULL;
//XZX_USBReadUserInfo = NULL;
//XZX_USBWriteUserInfo = NULL;
//XZX_USBGetMaxByte = NULL;
//XZX_USBSendSound = NULL;
//XZX_USBControlLED = NULL;
//XZX_USBControlBeep = NULL;
//XZX_USBGetSecCardID = NULL;
//XZX_USBSIMpowerOn = NULL;
//XZX_USBSIMpowerOff = NULL;
//XZX_USBSIMAPDU = NULL;
//XZX_USBReadUserMac = NULL;
//XZX_USBWriteUserMac = NULL;
//XZX_USBPSAMpowerOn = NULL;
//XZX_USBPSAMpowerOff = NULL;
//XZX_USBPSAMAPDU = NULL;
//XZX_USBControlFingerLed = NULL;
XZX_PSAMpowerOn = NULL;
XZX_PSAMpowerOff = NULL;
XZX_PSAMAPDU = NULL;
XZX_ControlFingerLed = NULL;
//add new interface
//int _stdcall Syn_USBSetTransportType(int iPort,int type);
//XZX_USBSetUserIDCode = NULL;
//XZX_USBIsEncryptMode = NULL;
//XZX_USBdoUpdate = NULL;
//
// 串口操作M1卡函数
//
//
XZX_SerialFindReader = NULL;
XZX_SerialOpen = NULL;
XZX_SerialClose = NULL;
XZX_SerialM1Reset = NULL;
XZX_SerialM1AuthenKey = NULL;
XZX_SerialM1WriteBlock = NULL;
XZX_SerialM1Halt = NULL;
XZX_SerialStartFindCPUCard = NULL;
XZX_SerialStartRemoveCPUCard = NULL;
XZX_SerialPCTOCPUCard = NULL;
XZX_SerialSIMpowerOn = NULL;
XZX_SerialSIMpowerOff = NULL;
XZX_SerialSIMAPDU = NULL;
XZX_SerialControlBeep = NULL;
XZX_SerialGetSecCardID = NULL;
XZX_SerialPSAMpowerOn = NULL;
XZX_SerialPSAMpowerOff = NULL;
XZX_SerialPSAMAPDU = NULL;
XZX_SerialControlFingerLed = NULL;
XZX_SerialReadUserInfo = NULL;
XZX_SerialWriteUserInfo = NULL;
//XZX_USBStartFindCPUCard = NULL;
XZX_StartFindCPUCard = NULL;
//XZX_USBStartRemoveCPUCard = NULL;
XZX_StartRemoveCPUCard = NULL;
//XZX_USBPCTOCPUCard = NULL;
XZX_PCTOCPUCard = NULL;
}
}
/
/// 加载设备动态库
/// @return 返回加载状态
/
bool IDCardXZX::LoadSubModule()
{
bool bRet = false;
do
{
if(m_bSubModEnable)//判断动态库是否已加载
{
bRet = true;
break;
}
m_hSubModuleA = LoadLibrary(_T("SynIDCardAPI.dll"));//加载设备动态库
if(NULL == m_hSubModuleA)
{
break;
}
//二代证相关API---------------------------------------------------------------------------------------
//XZX_FindReader = (Syn_FindReader)GetProcAddress(m_hSubModuleA, "Syn_FindReader");
//if(NULL == XZX_FindReader)
//{
// break;
//}
XZX_GetCOMBaud = (Syn_GetCOMBaud)GetProcAddress(m_hSubModuleA, "Syn_GetCOMBaud");
if(NULL == XZX_GetCOMBaud) break;
XZX_SetCOMBaud = (Syn_SetCOMBaud)GetProcAddress(m_hSubModuleA, "Syn_SetCOMBaud");
if(NULL == XZX_SetCOMBaud) break;
XZX_OpenPort = (Syn_OpenPort)GetProcAddress(m_hSubModuleA, "Syn_OpenPort");
if(NULL == XZX_OpenPort) break;
XZX_ClosePort = (Syn_ClosePort)GetProcAddress(m_hSubModuleA, "Syn_ClosePort");
if(NULL == XZX_ClosePort) break;
//
// SAM类函数
//
//
XZX_SetMaxRFByte = (Syn_SetMaxRFByte)GetProcAddress(m_hSubModuleA, "Syn_SetMaxRFByte");
if(NULL == XZX_SetMaxRFByte) break;
XZX_ResetSAM = (Syn_ResetSAM)GetProcAddress(m_hSubModuleA, "Syn_ResetSAM");
if(NULL == XZX_ResetSAM) break;
XZX_GetSAMStatus = (Syn_GetSAMStatus)GetProcAddress(m_hSubModuleA, "Syn_GetSAMStatus");
if(NULL == XZX_GetSAMStatus) break;
XZX_GetSAMID = (Syn_GetSAMID)GetProcAddress(m_hSubModuleA, "Syn_GetSAMID");
if(NULL == XZX_GetSAMID) break;
XZX_GetSAMIDToStr = (Syn_GetSAMIDToStr)GetProcAddress(m_hSubModuleA, "Syn_GetSAMIDToStr");
if(NULL == XZX_GetSAMIDToStr) break;
//
// 身份证卡类函数
//
//
XZX_StartFindIDCard = (Syn_StartFindIDCard)GetProcAddress(m_hSubModuleA, "Syn_StartFindIDCard");
if(NULL == XZX_StartFindIDCard) break;
XZX_SelectIDCard = (Syn_SelectIDCard)GetProcAddress(m_hSubModuleA, "Syn_SelectIDCard");
if(NULL == XZX_SelectIDCard) break;
XZX_ReadBaseMsg = (Syn_ReadBaseMsg)GetProcAddress(m_hSubModuleA, "Syn_ReadBaseMsg");
if(NULL == XZX_ReadBaseMsg) break;
XZX_ReadBaseMsgToFile = (Syn_ReadBaseMsgToFile)GetProcAddress(m_hSubModuleA, "Syn_ReadBaseMsgToFile");
if(NULL == XZX_ReadBaseMsgToFile) break;
XZX_ReadBaseFPMsg = (Syn_ReadBaseFPMsg)GetProcAddress(m_hSubModuleA, "Syn_ReadBaseFPMsg");
if(NULL == XZX_ReadBaseFPMsg) break;
XZX_ReadBaseFPMsgToFile = (Syn_ReadBaseFPMsgToFile)GetProcAddress(m_hSubModuleA, "Syn_ReadBaseFPMsgToFile");
if(NULL == XZX_ReadBaseFPMsgToFile) break;
XZX_ReadNewAppMsg = (Syn_ReadNewAppMsg)GetProcAddress(m_hSubModuleA, "Syn_ReadNewAppMsg");
if(NULL == XZX_ReadNewAppMsg) break;
XZX_GetBmp = (Syn_GetBmp)GetProcAddress(m_hSubModuleA, "Syn_GetBmp");
if(NULL == XZX_GetBmp) break;
XZX_ReadMsg = (Syn_ReadMsg)GetProcAddress(m_hSubModuleA, "Syn_ReadMsg");
if(NULL == XZX_ReadMsg) break;
XZX_ReadFPMsg = (Syn_ReadFPMsg)GetProcAddress(m_hSubModuleA, "Syn_ReadFPMsg");
if(NULL == XZX_ReadFPMsg) break;
XZX_FindReader = (Syn_FindReader)GetProcAddress(m_hSubModuleA, "Syn_FindReader");
if(NULL == XZX_FindReader) break;
XZX_FindUSBReader = (Syn_FindUSBReader)GetProcAddress(m_hSubModuleA, "Syn_FindUSBReader");
if(NULL == XZX_FindUSBReader) break;
XZX_BmpToJpeg = (Syn_BmpToJpeg)GetProcAddress(m_hSubModuleA, "Syn_BmpToJpeg");
if(NULL == XZX_BmpToJpeg) break;
XZX_PhotoToStrBase64 = (Syn_PhotoToStrBase64)GetProcAddress(m_hSubModuleA, "Syn_PhotoToStrBase64");
if(NULL == XZX_PhotoToStrBase64) break;
XZX_StrBase64ToPhoto = (Syn_StrBase64ToPhoto)GetProcAddress(m_hSubModuleA, "Syn_StrBase64ToPhoto");
if(NULL == XZX_StrBase64ToPhoto) break;
//
// 设置附加功能函数
//
//
XZX_SetPhotoPath = (Syn_SetPhotoPath)GetProcAddress(m_hSubModuleA, "Syn_SetPhotoPath");
if(NULL == XZX_SetPhotoPath) break;
XZX_SetPhotoType = (Syn_SetPhotoType)GetProcAddress(m_hSubModuleA, "Syn_SetPhotoType");
if(NULL == XZX_SetPhotoType) break;
XZX_SetPhotoName = (Syn_SetPhotoName)GetProcAddress(m_hSubModuleA, "Syn_SetPhotoName");
if(NULL == XZX_SetPhotoName) break;
XZX_SetPhotoNameEx = (Syn_SetPhotoNameEx)GetProcAddress(m_hSubModuleA, "Syn_SetPhotoNameEx");
if(NULL == XZX_SetPhotoNameEx) break;
XZX_SetSexType = (Syn_SetSexType)GetProcAddress(m_hSubModuleA, "Syn_SetSexType");
if(NULL == XZX_SetSexType) break;
XZX_SetNationType = (Syn_SetNationType)GetProcAddress(m_hSubModuleA, "Syn_SetNationType");
if(NULL == XZX_SetNationType) break;
XZX_SetBornType = (Syn_SetBornType)GetProcAddress(m_hSubModuleA, "Syn_SetBornType");
if(NULL == XZX_SetBornType) break;
XZX_SetUserLifeBType = (Syn_SetUserLifeBType)GetProcAddress(m_hSubModuleA, "Syn_SetUserLifeBType");
if(NULL == XZX_SetUserLifeBType) break;
XZX_SetUserLifeEType = (Syn_SetUserLifeEType)GetProcAddress(m_hSubModuleA, "Syn_SetUserLifeEType");
if(NULL == XZX_SetUserLifeEType) break;
//
// USBHID函数
//
//
XZX_USBHIDM1Reset = (Syn_USBHIDM1Reset)GetProcAddress(m_hSubModuleA, "Syn_USBHIDM1Reset");
if(NULL == XZX_USBHIDM1Reset) break;
XZX_USBHIDM1AuthenKey = (Syn_USBHIDM1AuthenKey)GetProcAddress(m_hSubModuleA, "Syn_USBHIDM1AuthenKey");
if(NULL == XZX_USBHIDM1AuthenKey) break;
XZX_USBHIDM1ReadBlock = (Syn_USBHIDM1ReadBlock)GetProcAddress(m_hSubModuleA, "Syn_USBHIDM1ReadBlock");
if(NULL == XZX_USBHIDM1ReadBlock) break;
XZX_USBHIDM1WriteBlock = (Syn_USBHIDM1WriteBlock)GetProcAddress(m_hSubModuleA, "Syn_USBHIDM1WriteBlock");
if(NULL == XZX_USBHIDM1WriteBlock) break;
XZX_USBHIDM1Halt = (Syn_USBHIDM1Halt)GetProcAddress(m_hSubModuleA, "Syn_USBHIDM1Halt");
if(NULL == XZX_USBHIDM1Halt) break;
XZX_USBHIDReadFactoryInfo = (Syn_USBHIDReadFactoryInfo)GetProcAddress(m_hSubModuleA, "Syn_USBHIDReadFactoryInfo");
if(NULL == XZX_USBHIDReadFactoryInfo) break;
XZX_USBHIDWriteFactoryInfo = (Syn_USBHIDWriteFactoryInfo)GetProcAddress(m_hSubModuleA, "Syn_USBHIDWriteFactoryInfo");
if(NULL == XZX_USBHIDWriteFactoryInfo) break;
XZX_USBHIDReadUserInfo = (Syn_USBHIDReadUserInfo)GetProcAddress(m_hSubModuleA, "Syn_USBHIDReadUserInfo");
if(NULL == XZX_USBHIDReadUserInfo) break;
XZX_USBHIDWriteUserInfo = (Syn_USBHIDWriteUserInfo)GetProcAddress(m_hSubModuleA, "Syn_USBHIDWriteUserInfo");
if(NULL == XZX_USBHIDWriteUserInfo) break;
XZX_USBHIDGetMaxByte = (Syn_USBHIDGetMaxByte)GetProcAddress(m_hSubModuleA, "Syn_USBHIDGetMaxByte");
if(NULL == XZX_USBHIDGetMaxByte) break;
XZX_USBHIDSendSound = (Syn_USBHIDSendSound)GetProcAddress(m_hSubModuleA, "Syn_USBHIDSendSound");
if(NULL == XZX_USBHIDSendSound) break;
XZX_USBHIDControlLED = (Syn_USBHIDControlLED)GetProcAddress(m_hSubModuleA, "Syn_USBHIDControlLED");
if(NULL == XZX_USBHIDControlLED) break;
XZX_USBHIDControlBeep = (Syn_USBHIDControlBeep)GetProcAddress(m_hSubModuleA, "Syn_USBHIDControlBeep");
if(NULL == XZX_USBHIDControlBeep) break;
XZX_USBHIDGetSecCardID = (Syn_USBHIDGetSecCardID)GetProcAddress(m_hSubModuleA, "Syn_USBHIDGetSecCardID");
if(NULL == XZX_USBHIDGetSecCardID) break;
XZX_USBHIDSIMpowerOn = (Syn_USBHIDSIMpowerOn)GetProcAddress(m_hSubModuleA, "Syn_USBHIDSIMpowerOn");
if(NULL == XZX_USBHIDSIMpowerOn) break;
XZX_USBHIDSIMpowerOff = (Syn_USBHIDSIMpowerOff)GetProcAddress(m_hSubModuleA, "Syn_USBHIDSIMpowerOff");
if(NULL == XZX_USBHIDSIMpowerOff) break;
XZX_USBHIDSIMAPDU = (Syn_USBHIDSIMAPDU)GetProcAddress(m_hSubModuleA, "Syn_USBHIDSIMAPDU");
if(NULL == XZX_USBHIDSIMAPDU) break;
//XZX_USBHIDReadUserMac = (Syn_USBHIDReadUserMac)GetProcAddress(m_hSubModuleA, "Syn_USBHIDReadUserMac");
//if(NULL == XZX_USBHIDReadUserMac) break;
XZX_USBHIDWriteUserMac = (Syn_USBHIDWriteUserMac)GetProcAddress(m_hSubModuleA, "Syn_USBHIDWriteUserMac");
if(NULL == XZX_USBHIDWriteUserMac) break;
//add new interface
//int _stdcall Syn_USBHIDSetTransportType(int iPort,int type);
XZX_USBHIDSetUserIDCode = (Syn_USBHIDSetUserIDCode)GetProcAddress(m_hSubModuleA, "Syn_USBHIDSetUserIDCode");
if(NULL == XZX_USBHIDSetUserIDCode) break;
XZX_USBHIDIsEncryptMode = (Syn_USBHIDIsEncryptMode)GetProcAddress(m_hSubModuleA, "Syn_USBHIDIsEncryptMode");
if(NULL == XZX_USBHIDIsEncryptMode) break;
XZX_USBHIDdoUpdate = (Syn_USBHIDdoUpdate)GetProcAddress(m_hSubModuleA, "Syn_USBHIDdoUpdate");
if(NULL == XZX_USBHIDdoUpdate) break;
//
// USBReade.dll USBHID函数
//
//
//XZX_USBOpenPort = (Syn_USBOpenPort)GetProcAddress(m_hSubModuleA, "Syn_USBOpenPort");
//if(NULL == XZX_USBOpenPort) break;
//XZX_USBClosePort = (Syn_USBClosePort)GetProcAddress(m_hSubModuleA, "Syn_USBClosePort");
//if(NULL == XZX_USBClosePort) break;
//XZX_USBSetMaxRFByte = (Syn_USBSetMaxRFByte)GetProcAddress(m_hSubModuleA, "Syn_USBSetMaxRFByte");
//if(NULL == XZX_USBSetMaxRFByte) break;
//XZX_USBStartFindIDCard = (Syn_USBStartFindIDCard)GetProcAddress(m_hSubModuleA, "Syn_USBStartFindIDCard");
//if(NULL == XZX_USBStartFindIDCard) break;
//XZX_USBSelectIDCard = (Syn_USBSelectIDCard)GetProcAddress(m_hSubModuleA, "Syn_USBSelectIDCard");
//if(NULL == XZX_USBSelectIDCard) break;
//XZX_USBReadBaseMsg = (Syn_USBReadBaseMsg)GetProcAddress(m_hSubModuleA, "Syn_USBReadBaseMsg");
//if(NULL == XZX_USBReadBaseMsg) break;
//XZX_USBReadBaseFPMsg = (Syn_USBReadBaseFPMsg)GetProcAddress(m_hSubModuleA, "Syn_USBReadBaseFPMsg");
//if(NULL == XZX_USBReadBaseFPMsg) break;
//XZX_USBReadNewAppMsg = (Syn_USBReadNewAppMsg)GetProcAddress(m_hSubModuleA, "Syn_USBReadNewAppMsg");
//if(NULL == XZX_USBReadNewAppMsg) break;
//XZX_USBGetSAMID = (Syn_USBGetSAMID)GetProcAddress(m_hSubModuleA, "Syn_USBGetSAMID");
//if(NULL == XZX_USBGetSAMID) break;
//XZX_USBGetSAMIDToStr = (Syn_USBGetSAMIDToStr)GetProcAddress(m_hSubModuleA, "Syn_USBGetSAMIDToStr");
//if(NULL == XZX_USBGetSAMIDToStr) break;
//XZX_USBM1Reset = (Syn_USBM1Reset)GetProcAddress(m_hSubModuleA, "Syn_USBM1Reset");
//if(NULL == XZX_USBM1Reset) break;
//XZX_USBM1AuthenKey = (Syn_USBM1AuthenKey)GetProcAddress(m_hSubModuleA, "Syn_USBM1AuthenKey");
//if(NULL == XZX_USBM1AuthenKey) break;
//XZX_USBM1ReadBlock = (Syn_USBM1ReadBlock)GetProcAddress(m_hSubModuleA, "Syn_USBM1ReadBlock");
//if(NULL == XZX_USBM1ReadBlock) break;
//XZX_USBM1WriteBlock = (Syn_USBM1WriteBlock)GetProcAddress(m_hSubModuleA, "Syn_USBM1WriteBlock");
//if(NULL == XZX_USBM1WriteBlock) break;
//XZX_USBM1Halt = (Syn_USBM1Halt)GetProcAddress(m_hSubModuleA, "Syn_USBM1Halt");
//if(NULL == XZX_USBM1Halt) break;
//XZX_USBReadFactoryInfo = (Syn_USBReadFactoryInfo)GetProcAddress(m_hSubModuleA, "Syn_USBReadFactoryInfo");
//if(NULL == XZX_USBReadFactoryInfo) break;
//XZX_USBWriteFactoryInfo = (Syn_USBWriteFactoryInfo)GetProcAddress(m_hSubModuleA, "Syn_USBWriteFactoryInfo");
//if(NULL == XZX_USBWriteFactoryInfo) break;
//XZX_USBReadUserInfo = (Syn_USBReadUserInfo)GetProcAddress(m_hSubModuleA, "Syn_USBReadUserInfo");
//if(NULL == XZX_USBReadUserInfo) break;
//XZX_USBWriteUserInfo = (Syn_USBWriteUserInfo)GetProcAddress(m_hSubModuleA, "Syn_USBWriteUserInfo");
//if(NULL == XZX_USBWriteUserInfo) break;
//XZX_USBGetMaxByte = (Syn_USBGetMaxByte)GetProcAddress(m_hSubModuleA, "Syn_USBGetMaxByte");
//if(NULL == XZX_USBGetMaxByte) break;
//XZX_USBSendSound = (Syn_USBSendSound)GetProcAddress(m_hSubModuleA, "Syn_USBSendSound");
//if(NULL == XZX_USBSendSound) break;
//XZX_USBControlLED = (Syn_USBControlLED)GetProcAddress(m_hSubModuleA, "Syn_USBControlLED");
//if(NULL == XZX_USBControlLED) break;
//XZX_USBControlBeep = (Syn_USBControlBeep)GetProcAddress(m_hSubModuleA, "Syn_USBControlBeep");
//if(NULL == XZX_USBControlBeep) break;
//XZX_USBGetSecCardID = (Syn_USBGetSecCardID)GetProcAddress(m_hSubModuleA, "Syn_USBGetSecCardID");
//if(NULL == XZX_USBGetSecCardID) break;
//XZX_USBSIMpowerOn = (Syn_USBSIMpowerOn)GetProcAddress(m_hSubModuleA, "Syn_USBSIMpowerOn");
//if(NULL == XZX_USBSIMpowerOn) break;
//XZX_USBSIMpowerOff = (Syn_USBSIMpowerOff)GetProcAddress(m_hSubModuleA, "Syn_USBSIMpowerOff");
//if(NULL == XZX_USBSIMpowerOff) break;
//XZX_USBSIMAPDU = (Syn_USBSIMAPDU)GetProcAddress(m_hSubModuleA, "Syn_USBSIMAPDU");
//if(NULL == XZX_USBSIMAPDU) break;
//XZX_USBReadUserMac = (Syn_USBReadUserMac)GetProcAddress(m_hSubModuleA, "Syn_USBReadUserMac");
//if(NULL == XZX_USBReadUserMac) break;
//XZX_USBWriteUserMac = (Syn_USBWriteUserMac)GetProcAddress(m_hSubModuleA, "Syn_USBWriteUserMac");
//if(NULL == XZX_USBWriteUserMac) break;
//XZX_USBPSAMpowerOn = (Syn_USBPSAMpowerOn)GetProcAddress(m_hSubModuleA, "Syn_USBPSAMpowerOn");
//if(NULL == XZX_USBPSAMpowerOn) break;
//XZX_USBPSAMpowerOff = (Syn_USBPSAMpowerOff)GetProcAddress(m_hSubModuleA, "Syn_USBPSAMpowerOff");
//if(NULL == XZX_USBPSAMpowerOff) break;
//XZX_USBPSAMAPDU = (Syn_USBPSAMAPDU)GetProcAddress(m_hSubModuleA, "Syn_USBPSAMAPDU");
//if(NULL == XZX_USBPSAMAPDU) break;
//XZX_USBControlFingerLed = (Syn_USBControlFingerLed)GetProcAddress(m_hSubModuleA, "Syn_USBControlFingerLed");
//if(NULL == XZX_USBControlFingerLed) break;
XZX_PSAMpowerOn = (Syn_PSAMpowerOn)GetProcAddress(m_hSubModuleA, "Syn_PSAMpowerOn");
if(NULL == XZX_PSAMpowerOn) break;
XZX_PSAMpowerOff = (Syn_PSAMpowerOff)GetProcAddress(m_hSubModuleA, "Syn_PSAMpowerOff");
if(NULL == XZX_PSAMpowerOff) break;
XZX_PSAMAPDU = (Syn_PSAMAPDU)GetProcAddress(m_hSubModuleA, "Syn_PSAMAPDU");
if(NULL == XZX_PSAMAPDU) break;
XZX_ControlFingerLed = (Syn_ControlFingerLed)GetProcAddress(m_hSubModuleA, "Syn_ControlFingerLed");
if(NULL == XZX_ControlFingerLed) break;
//add new interface
//int _stdcall Syn_USBSetTransportType(int iPort,int type);
//XZX_USBSetUserIDCode = (Syn_USBSetUserIDCode)GetProcAddress(m_hSubModuleA, "Syn_USBSetUserIDCode");
//if(NULL == XZX_USBSetUserIDCode) break;
//XZX_USBIsEncryptMode = (Syn_USBIsEncryptMode)GetProcAddress(m_hSubModuleA, "Syn_USBIsEncryptMode");
//if(NULL == XZX_USBIsEncryptMode) break;
//XZX_USBdoUpdate = (Syn_USBdoUpdate)GetProcAddress(m_hSubModuleA, "Syn_USBdoUpdate");
//if(NULL == XZX_USBdoUpdate) break;
//
// 串口操作M1卡函数
//
//
XZX_SerialFindReader = (Syn_SerialFindReader)GetProcAddress(m_hSubModuleA, "Syn_SerialFindReader");
if(NULL == XZX_SerialFindReader) break;
XZX_SerialOpen = (Syn_SerialOpen)GetProcAddress(m_hSubModuleA, "Syn_SerialOpen");
if(NULL == XZX_SerialOpen) break;
XZX_SerialClose = (Syn_SerialClose)GetProcAddress(m_hSubModuleA, "Syn_SerialClose");
if(NULL == XZX_SerialClose) break;
XZX_SerialM1Reset = (Syn_SerialM1Reset)GetProcAddress(m_hSubModuleA, "Syn_SerialM1Reset");
if(NULL == XZX_SerialM1Reset) break;
XZX_SerialM1AuthenKey = (Syn_SerialM1AuthenKey)GetProcAddress(m_hSubModuleA, "Syn_SerialM1AuthenKey");
if(NULL == XZX_SerialM1AuthenKey) break;
XZX_SerialM1WriteBlock = (Syn_SerialM1WriteBlock)GetProcAddress(m_hSubModuleA, "Syn_SerialM1WriteBlock");
if(NULL == XZX_SerialM1WriteBlock) break;
XZX_SerialM1Halt = (Syn_SerialM1Halt)GetProcAddress(m_hSubModuleA, "Syn_SerialM1Halt");
if(NULL == XZX_SerialM1Halt) break;
XZX_SerialStartFindCPUCard = (Syn_SerialStartFindCPUCard)GetProcAddress(m_hSubModuleA, "Syn_SerialStartFindCPUCard");
if(NULL == XZX_SerialStartFindCPUCard) break;
XZX_SerialStartRemoveCPUCard = (Syn_SerialStartRemoveCPUCard)GetProcAddress(m_hSubModuleA, "Syn_SerialStartRemoveCPUCard");
if(NULL == XZX_SerialStartRemoveCPUCard) break;
XZX_SerialPCTOCPUCard = (Syn_SerialPCTOCPUCard)GetProcAddress(m_hSubModuleA, "Syn_SerialPCTOCPUCard");
if(NULL == XZX_SerialPCTOCPUCard) break;
XZX_SerialSIMpowerOn = (Syn_SerialSIMpowerOn)GetProcAddress(m_hSubModuleA, "Syn_SerialSIMpowerOn");
if(NULL == XZX_SerialSIMpowerOn) break;
XZX_SerialSIMpowerOff = (Syn_SerialSIMpowerOff)GetProcAddress(m_hSubModuleA, "Syn_SerialSIMpowerOff");
if(NULL == XZX_SerialSIMpowerOff) break;
XZX_SerialSIMAPDU = (Syn_SerialSIMAPDU)GetProcAddress(m_hSubModuleA, "Syn_SerialSIMAPDU");
if(NULL == XZX_SerialSIMAPDU) break;
XZX_SerialControlBeep = (Syn_SerialControlBeep)GetProcAddress(m_hSubModuleA, "Syn_SerialControlBeep");
if(NULL == XZX_SerialControlBeep) break;
XZX_SerialGetSecCardID = (Syn_SerialGetSecCardID)GetProcAddress(m_hSubModuleA, "Syn_SerialGetSecCardID");
if(NULL == XZX_SerialGetSecCardID) break;
XZX_SerialPSAMpowerOn = (Syn_SerialPSAMpowerOn)GetProcAddress(m_hSubModuleA, "Syn_SerialPSAMpowerOn");
if(NULL == XZX_SerialPSAMpowerOn) break;
XZX_SerialPSAMpowerOff = (Syn_SerialPSAMpowerOff)GetProcAddress(m_hSubModuleA, "Syn_SerialPSAMpowerOff");
if(NULL == XZX_SerialPSAMpowerOff) break;
XZX_SerialPSAMAPDU = (Syn_SerialPSAMAPDU)GetProcAddress(m_hSubModuleA, "Syn_SerialPSAMAPDU");
if(NULL == XZX_SerialPSAMAPDU) break;
XZX_SerialControlFingerLed = (Syn_SerialControlFingerLed)GetProcAddress(m_hSubModuleA, "Syn_SerialControlFingerLed");
if(NULL == XZX_SerialControlFingerLed) break;
XZX_SerialReadUserInfo = (Syn_SerialReadUserInfo)GetProcAddress(m_hSubModuleA, "Syn_SerialReadUserInfo");
if(NULL == XZX_SerialReadUserInfo) break;
XZX_SerialWriteUserInfo = (Syn_SerialWriteUserInfo)GetProcAddress(m_hSubModuleA, "Syn_SerialWriteUserInfo");
if(NULL == XZX_SerialWriteUserInfo) break;
//XZX_USBStartFindCPUCard = (Syn_USBStartFindCPUCard)GetProcAddress(m_hSubModuleA, "Syn_USBStartFindCPUCard");
//if(NULL == XZX_USBStartFindCPUCard) break;
XZX_StartFindCPUCard = (Syn_StartFindCPUCard)GetProcAddress(m_hSubModuleA, "Syn_StartFindCPUCard");
if(NULL == XZX_StartFindCPUCard) break;
//XZX_USBStartRemoveCPUCard = (Syn_USBStartRemoveCPUCard)GetProcAddress(m_hSubModuleA, "Syn_USBStartRemoveCPUCard");
//if(NULL == XZX_USBStartRemoveCPUCard) break;
XZX_StartRemoveCPUCard = (Syn_StartRemoveCPUCard)GetProcAddress(m_hSubModuleA, "Syn_StartRemoveCPUCard");
if(NULL == XZX_StartRemoveCPUCard) break;
//XZX_USBPCTOCPUCard = (Syn_USBPCTOCPUCard)GetProcAddress(m_hSubModuleA, "Syn_USBPCTOCPUCard");
//if(NULL == XZX_USBPCTOCPUCard) break;
XZX_PCTOCPUCard = (Syn_PCTOCPUCard)GetProcAddress(m_hSubModuleA, "Syn_PCTOCPUCard");
if(NULL == XZX_PCTOCPUCard) break;
bRet = true;
} while (0);
if(!bRet)
{
FreeSubModule();
}
m_bSubModEnable = bRet;
//iType 0 = bmp ,1 = jpg , 2 = base64 , 3 = WLT ,4 = 不生成
XZX_SetPhotoType(4);
//iType 生成照片文件名 0=tmp 1=姓名 2=身份证号 3=姓名_身份证号 4=指定文件名
//扩展名按Syn_SetPhotoType(1)设置,base64写成.txt文件
XZX_SetPhotoName(0);
//设置照片路径 iOption 路径选项 0=C: 1=当前路径 2=指定路径
// cPhotoPath 绝对路径,仅在iOption=2时有效
// 返回值 0=成功 -1=指定的目录不存在
char ctmp[256] = { 0 };
XZX_SetPhotoPath(1, ctmp);
//iType 0=卡中存储的数据 1=解释之后的数据 2=解释之后加"族"
XZX_SetNationType(1);
//iType 0=卡中存储的数据 1=解释之后的数据,男、女、未知
XZX_SetSexType(1);
//iType 0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD
XZX_SetBornType(0);
//iType 0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD
XZX_SetUserLifeBType(3);
//iType 0=YYYYMMDD(不转换),1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD,
//iOption 0=长期 不转换, 1=长期转换为 有效期开始+50年
XZX_SetUserLifeEType(3, 0);
return bRet;
}
int IDCardXZX::FindUSBDriverDevice()
{
int nRet;
for (int i = 1001; i < 1017; i++)
{
nRet = XZX_OpenPort(i);
if (nRet == 0)
{
//nRet = Syn_GetSAMStatus(i, 0);
if (nRet == 0)
{
XZX_ClosePort(i);
return i;
}
XZX_ClosePort(i);
}
}
return 0;
}
// -1:动态库加载失败 -2:没有找到读卡器 -3:读卡器连接在串口 -4:打开端口错误 -5:获取最大通信字节数失败 -6:端口9999异常
int IDCardXZX::FindCard()
{
unsigned char nARMVol;
unsigned int uiCurrBaud;
int nRet,nRet2;
if(!LoadSubModule()) return -1;
nRet = FindUSBDriverDevice();
if (nRet == 0) return -2;
Sleep(100);
m_iPort = nRet;
if (nRet <= 1000)
{
Sleep(200);
nRet2 = XZX_GetCOMBaud( nRet ,&uiCurrBaud);
m_CurrBaud = uiCurrBaud;
return -3;
}
if (m_iPort == 9999)
{
int ret = -6;
do
{
nRet = XZX_OpenPort(m_iPort);
if(nRet!=0){
ret = -4;
break;
}
nRet = XZX_USBHIDGetMaxByte(m_iPort,&m_iMaxByte,&nARMVol);
if(nRet!=0){
ret = -5;
break;
}
} while (0);
nRet = XZX_ClosePort(m_iPort);
return ret;
}
return 0;
}
// -7:eRR1 -8:eRR2 -9:eRR3 -10:照片解码错误 -11:完整过程读取身份证信息错误 -12:找卡错误 -13:选卡错误
int IDCardXZX::ReadCardInfo()
{
CString sMsg,sMsg2;
int nRet;
unsigned int uiCurrBaud;
nRet = FindCard();
if (nRet == -2) {
if (link) {
link = false;
return 100;
}
}
else {
if (!link) {
link = true;
return 200;
}
}
if(nRet != 0) return nRet;
unsigned char pucIIN[4];
unsigned char pucSN[8];
try
{
nRet = XZX_OpenPort(m_iPort);
//Syn_USBSetTransportType(m_iPort,((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck());
if (nRet == 0)
{
nRet = XZX_StartFindIDCard(m_iPort,pucIIN,0);
if (nRet != 0) {
XZX_ClosePort(m_iPort);
return -12;
}
Sleep(50);
nRet = XZX_SelectIDCard(m_iPort,pucSN,0);
if(nRet != 0)
{
XZX_ClosePort(m_iPort);
return -13;
}
Sleep(50);
nRet = XZX_ReadMsg(m_iPort,0,&m_idcardData);
if (m_iReadStart==1)
{
m_iReadSum++;
}
if (nRet == 0 || nRet==1)// nRet==1时照片解码错误,可能是c盘根目录下没有License.dat文件
{
if (m_iReadStart == 1)
{
m_iReadOKSum++;
XZX_ClosePort(m_iPort);
return -10;
}
}
else
{
m_errNum = nRet;
XZX_ClosePort(m_iPort);
return -11;
}
}
else
{
return -4;
}
if (m_iPort>0)
{
XZX_ClosePort(m_iPort);
}
}
catch (CMemoryException* e)
{
e->Delete();
return -7;
}
catch (CFileException* e)
{
e->Delete();
return -8;
}
catch (CException* e)
{
e->Delete();
return -9;
}
return 0;
}
CString IDCardXZX::Age()
{
CString str(m_idcardData.Born);
if(str == "") return "";
CString strRes;
CTime m_time;
m_time = CTime::GetCurrentTime();
CString strYear = m_time.Format(_T("%Y"));
CString strMonth = m_time.Format(_T("%m"));
CString strDay = m_time.Format(_T("%d"));
CString birYear = str.Mid(0,4);
CString birMonth = str.Mid(4,2);
CString birDay = str.Mid(6,2);
int res = 0;
if( (atoi(strMonth) > atoi(birMonth)) ||
((atoi(strMonth) >= atoi(birMonth)) && (atoi(strDay) >= atoi(birDay)))){
res = atoi(strYear) - atoi(birYear);
}else{
res = atoi(strYear) - atoi(birYear) - 1;
}
strRes.Format("%d",res);
return strRes;
}
void IDCardXZX::ClearIdCardInfo()
{
memset(&m_idcardData.Name,0,sizeof(m_idcardData.Name));
memset(&m_idcardData.Sex,0,sizeof(m_idcardData.Sex));
memset(&m_idcardData.Nation,0,sizeof(m_idcardData.Nation));
memset(&m_idcardData.Born,0,sizeof(m_idcardData.Born));
memset(&m_idcardData.Address,0,sizeof(m_idcardData.Address));
memset(&m_idcardData.IDCardNo,0,sizeof(m_idcardData.IDCardNo));
memset(&m_idcardData.GrantDept,0,sizeof(m_idcardData.GrantDept));
memset(&m_idcardData.UserLifeBegin,0,sizeof(m_idcardData.UserLifeBegin));
memset(&m_idcardData.UserLifeEnd,0,sizeof(m_idcardData.UserLifeEnd));
memset(&m_idcardData.PassID,0,sizeof(m_idcardData.PassID));
memset(&m_idcardData.IssuesTimes,0,sizeof(m_idcardData.IssuesTimes));
memset(&m_idcardData.reserved,0,sizeof(m_idcardData.reserved));
memset(&m_idcardData.PhotoFileName,0,sizeof(m_idcardData.PhotoFileName));
memset(&m_idcardData.CardType,0,sizeof(m_idcardData.CardType));
memset(&m_idcardData.EngName,0,sizeof(m_idcardData.EngName));
memset(&m_idcardData.CertVol,0,sizeof(m_idcardData.CertVol));
}
3、调用实例
int res = IDCardHelper::Instance()->ReadCardInfo();
if (res == 0) {
CString m_ID = IDCardHelper::Instance()->IdNo();
CString m_Name = IDCardHelper::Instance()->Name();
CString m_Sex = IDCardHelper::Instance()->Sex();
CString m_Age = IDCardHelper::Instance()->Age();
}
else if (res == 100) {
AfxMessageBox("身份证阅读器连接异常,请重新插拔");
}
else if (res == 200) {
AfxMessageBox("身份证阅读器连接正常");
}
技术交流请加群:996775415