#ifndef __READ_CARD_INFO_H
#define __READ_CARD_INFO_H
#include <string>
class CardInfo
{
public:
std::wstring name;
std::wstring sex;
std::wstring national;
std::wstring birthData;
std::wstring residenceAddress;
std::wstring identityCardNo;
std::wstring organIssue;
std::wstring validStartDay;
std::wstring validEndDay;
};
class ReadCardInfo
{
public:
ReadCardInfo();
~ReadCardInfo();
std::wstring GetNationName(int number);
bool ReadCard(CardInfo &info);
private:
void InitNationName();
void GetCardInfo(unsigned char *Msg, int MsgLen);
void WltChangeToBmpFile(unsigned char* pphotoMsg, int len);
public:
bool m_bExit;
bool m_bReadCardSucc;
CardInfo m_cardInfo;
private:
int m_commPort;
bool m_bClosePort;
std::wstring m_nationNameVec[100];
};
#endif
#include "stdafx.h"
#include "ReadCardInfo.h"
#include "log.h"
#include "sdtapi.h"
#include "WltRS.h"
ReadCardInfo::ReadCardInfo()
{
m_bExit = false;
m_bClosePort = true;
m_commPort = 1001; // usb口1001
InitNationName();
}
ReadCardInfo::~ReadCardInfo()
{
m_bExit = true;
}
bool ReadCardInfo::ReadCard(CardInfo &info)
{
int ret = -1;
if (m_bClosePort)
{
ret = SDT_OpenPort(m_commPort);
if (ret == 0x90) //打开成功
{
m_bClosePort = false;
}
}
int iIfOpen = 0; //是否需要打开端口
unsigned char pucManaInfo[4] = { 0 }; //证件芯片管理号
ret = SDT_StartFindIDCard(m_commPort, pucManaInfo, iIfOpen);
if (ret != 0x9f)
{
m_bReadCardSucc = false;
return false;
}
unsigned char pucManaMsg[8] =