| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686 |
- #include "idcertificate.h"
- #include <stdarg.h>
- #include "log4vendor.h"
- #include "stdafx.h"
- LOG_EXTERN()
- #define MAX_PICTURE_SIZE 3*1024*1024
- #define MAX_FILE_PATH 260
- CHAR CurrendPath[MAX_FILE_PATH] = {0};
- CHAR PhotoPath[MAX_FILE_PATH] = {0};
- char* strcpy_s(char* dest, const char* src)
- {
- return strcpy(dest, src);
- }
- char* strcpy_s(char* dest, size_t size, const char* src)
- {
- if ((dest == NULL) || (size < strlen(src) + 1))
- {
- return NULL;
- }
- return strcpy(dest, src);
- }
- char* strcat_s(char* dest, const char* src)
- {
- return strcat(dest, src);
- }
- char* strcat_s(char* dest, size_t size, const char* src)
- {
- if ((dest == NULL) || (size < strlen(dest) + strlen(src) + 1))
- {
- return NULL;
- }
- return strcat(dest, src);
- }
- unsigned long GetTickCount()
- {
- struct timespec ts;
- clock_gettime(CLOCK_MONOTONIC, &ts);
- return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
- }
- int GetDllPathLocal(std::string& dllPath)
- {
- Dl_info path_info;
- dladdr("load_so",&path_info);
- char str_FilePath[256]{0};
- memcpy(str_FilePath,path_info.dli_fname,strlen(path_info.dli_fname));
- printf("first_str_FilePath=%s\n",str_FilePath);
- char *pLastSlath=strrchr(str_FilePath,'/');
- *(pLastSlath + 1)=0;
- std::string a(str_FilePath);
- dllPath = a;
- return 0;
- }
- IDCerClassImpl::IDCerClassImpl():
- m_bDevOpen(false)
- ,m_bAuthed(false)
- ,m_iCardType(-1)
- {
- LOG_FUNCTION();
- SecDeviceNum = 0;
- m_wDevStatus = DEVICE_STATUS_NOT_READY;
- }
- IDCerClassImpl::~IDCerClassImpl()
- {
- LOG_FUNCTION();
- m_bDevOpen = false;
- DevClose();
- SecDeviceNum = 0;
- std::string tmpPath = "";
- m_wDevStatus = DEVICE_STATUS_NOT_READY;
- if( GetDllPathLocal(tmpPath) == Error_Succeed )
- {
- }
- else
- {
- tmpPath = "/";
- }
- std::string strFile = tmpPath + "zp.bmp";
- if(access(strFile.c_str(), 0) != -1)
- {
- LogM("file del:%s\n", strFile.c_str());
- remove(strFile.c_str());
- }
- else
- {
- LogM("file not found:%s\n", strFile.c_str());
- }
- strFile = tmpPath + "idback.bmp";
- if(access(strFile.c_str(), 0) != -1)
- {
- LogM("file del:%s\n", strFile.c_str());
- remove(strFile.c_str());
- }
- else
- {
- LogM("file not found:%s\n", strFile.c_str());
- }
- strFile = tmpPath + "idfront.bmp";
- if(access(strFile.c_str(), 0) != -1)
- {
- LogM("file del:%s\n", strFile.c_str());
- remove(strFile.c_str());
- }
- else
- {
- LogM("file not found:%s\n", strFile.c_str());
- }
- strFile = tmpPath + "ck.bmp";
- if(access(strFile.c_str(), 0) != -1)
- {
- LogM("file del:%s\n", strFile.c_str());
- remove(strFile.c_str());
- }
- else
- {
- LogM("file not found:%s\n", strFile.c_str());
- }
- }
- int getFileVer(char* sFile, short &ch1, short &ch2)
- {
- ch1 = 0;
- ch2 = 0;
- char* pFind = strstr(sFile, ".so");
- char* pTemp = pFind;
- while(pTemp)
- {
- pFind = pTemp;
- pTemp = strstr(pFind + 3, ".so");
- }
- if(pFind == nullptr) return 0;
- pTemp = pFind - 1;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if(*pTemp == '.')
- ch2 = atoi(pTemp + 1);
- pTemp--;
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
- if(*pTemp == '.')
- ch1 = atoi(pTemp + 1);
- return 1;
- }
- ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
- {
- LOG_FUNCTION();
- LogM("GetDevCategory() Entry.");
- memset(devCategory.szType, 0, MAX_DEV_TYPE_LEN);
- memset(devCategory.szModel, 0, MAX_DEV_MODEL_LEN);
- memset(devCategory.szVendor, 0, MAX_DEV_VENDOR_LEN);
- memcpy(devCategory.szType, "PVER=SNBC#MID=ID8101", strlen("PVER=SNBC#MID=ID8101"));
- memcpy(devCategory.szVendor, "keba", strlen("keba"));
- devCategory.eState = (DevStateEnum)m_wDevStatus;
- char sPath[256], sFile[128] = {0};
- GetCurModulePath(sPath, sFile);
- short v1,v2;
- getFileVer(sFile, v1, v2);
- devCategory.version.wMajor = v1;
- devCategory.version.wMinor = v2;
- devCategory.version.wRevision = 0xffff;
- devCategory.version.wBuild = 2;
- // char szFwVer[256] = {0};
- // char szSwVer[256] = {0};
- // int nRet = m_cBS_ID81IDCImpl.FWVersion(SecDeviceNum, szFwVer);
- // if (nRet == IDDIGITALCOPIER_NO_ERROR)
- // {
- // nRet = m_cBS_ID81IDCImpl.SWVersion(szSwVer);
- // if (nRet == IDDIGITALCOPIER_NO_ERROR)
- // {
- // sprintf(devCategory.szType, "PVER=SNBC#MID=ID8101.%s-%s", szFwVer, szSwVer);
- // }
- // else
- // {
- // sprintf(devCategory.szType, "PVER=SNBC#MID=ID8101.%s", szFwVer);
- // }
- // }
- // else
- // {
- // memcpy(devCategory.szType, "PVER=SNBC#MID=", strlen("PVER=SNBC#MID="));
- // }
- memcpy(devCategory.szModel, "STYLE=IG#FUNCTION=ITF", strlen("STYLE=IG#FUNCTION=ITF"));
- LogM("GetDevCategory() return:\n\
- devCategory.szType=%s,\n\
- devCategory.szVendor=%s,\n\
- devCategory.eState=%d,\n\
- devCategory.version.wMajor=%d,\n\
- devCategory.version.wMinor=%d,\n\
- devCategory.version.wRevision=%d,\n\
- devCategory.version.wBuild=%d,\n\
- devCategory..szModel=%s,\n",
- devCategory.szType,
- devCategory.szVendor,
- devCategory.eState,
- devCategory.version.wMajor,
- devCategory.version.wMinor,
- devCategory.version.wRevision,
- devCategory.version.wBuild,
- devCategory.szModel);
- DEVSTATUS m_DeviceStatus;
- memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
- int nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- sleep(1);
- DevOpen(SecDeviceNum);
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("DeviceStatus(), 通讯异常, nRet=%d,line=%d", nRet, __LINE__);
- m_wDevStatus = DEVICE_STATUS_FAULT;
- }
- }
- return Error_Succeed;
- }
- // Reset device.
- // Do the cleaning work and initialize device again in order to return to
- // the normal condition.
- ErrorCodeEnum IDCerClassImpl::Reset()
- {
- LOG_FUNCTION();
- LogM("Reset() Entry,line=%d", __LINE__);
- if (DevOpen(0) != Error_Succeed)
- {
- sleep(1);
- if (DevOpen(0) != Error_Succeed)
- {
- m_wDevStatus = DEVICE_STATUS_NOT_READY;
- SaveErrorInfo("设备未打开", Error_DevNotAvailable);
- LogM("Reset(), 设备未打开, nRet=%d,line=%d", Error_DevNotAvailable, __LINE__);
- return Error_DevNotAvailable;
- }
- }
- int nRet = m_cBS_ID81IDCImpl.ResetWithAction(SecDeviceNum, 0);//复位模式,0---退卡,1---吞卡,2---退卡并持卡,3---无动作。
- if (IDDIGITALCOPIER_NO_ERROR != nRet)
- {
- m_wDevStatus = DEVICE_STATUS_FAULT;
- SaveErrorInfo("设备通信异常", Error_DevConnFailed);
- LogM("Reset() 复位模式, 0-- 退卡 动作失败,line=%d", __LINE__);
- return Error_DevConnFailed;
- }
- m_wDevStatus = DEVICE_STATUS_NORMAL;
- m_bAuthed = false;
- m_iCardType = -1;
- LogM("Reset() 复位模式, 0-- 退卡 动作成功,line=%d", __LINE__);
- return Error_Succeed;
- }
- //
- // Close device and do the cleaning work.
- // ex. close connection,close port,release memery and so on
- ErrorCodeEnum IDCerClassImpl::DevClose()
- {
- LOG_FUNCTION();
- LogM("DevClose() Entry.");
- m_wDevStatus = DEVICE_STATUS_NOT_READY;
- int nRet = m_cBS_ID81IDCImpl.CloseDev(SecDeviceNum);
- m_bDevOpen = false;
- m_bAuthed = false;
- m_iCardType = -1;
- LogM("DevClose(SecDeviceNum = %d), nRet=%d,line=%d", SecDeviceNum, nRet, __LINE__);
- return Error_Succeed;
- }
- // Get last error the device issued.
- // Error message must include explanatory memorandum ,the original error
- // code and anything in favour of location problem.
- ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
- {
- LOG_FUNCTION();
- LogM("IDCerClassImpl::Entry->IDCerClassImpl GetLastErr()! line=%d", __LINE__);
- devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
- memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
- memcpy(devErrInfo.szErrMsg, m_szErrMsg, MIN(devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
- LogM("GetLastErr() return:\n\
- devErrInfo.szErrMsg = %s, \n\
- devErrInfo.dwErrMsgLen = %d,line=%d", devErrInfo.szErrMsg, devErrInfo.dwErrMsgLen, __LINE__);
- return Error_Succeed;
- }
- //
- // Open device.
- // if usb device,set dwPort=0
- //
- ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
- {
- LOG_FUNCTION();
- LogM("DevOpen(dwPort = %d) Entry,line=%d", dwPort, __LINE__);
- unsigned int DevNumber = 8; //统计当前设备数量
- ScannerInfoRec ScannerInfo[8] = {0}; //设备信息
- m_bAuthed = false;
- m_iCardType = -1;
- DevClose();
- int nRet = m_cBS_ID81IDCImpl.EnumScannerDev(ScannerInfo, &DevNumber);
- if (DevNumber <= 0)
- {
- m_bDevOpen = false;
- m_wDevStatus = DEVICE_STATUS_NOT_READY;
- SaveErrorInfo("未找到设备", Error_DevNotAvailable);
- SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
- SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
- SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
- return Error_DevNotAvailable;
- }
- for (unsigned int i = 0; i < DevNumber; i++)
- {
- SecDeviceNum = ScannerInfo[i].DeviceID;
- printf(" SecDeviceNum=%d", SecDeviceNum);
- nRet = m_cBS_ID81IDCImpl.OpenDev(SecDeviceNum);
- if (IDDIGITALCOPIER_NO_ERROR == nRet)
- {
- m_bDevOpen = true;
- m_wDevStatus = DEVICE_STATUS_NORMAL;
- SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
- SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
- SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
- LogM("DevOpen(), SecDeviceNum = %d, nRet=%d,line=%d", SecDeviceNum, nRet, __LINE__);
- return Error_Succeed;
- }
- }
- m_bDevOpen = false;
- m_wDevStatus = DEVICE_STATUS_NOT_READY;
- SaveErrorInfo("设备通信异常", Error_DevConnFailed);
- SH_DeleteFileOrDirectory("LogModuleErrMsg.log");
- SH_DeleteFileOrDirectory("bin\\LogModuleErrMsg.log");
- SH_DeleteFileOrDirectory("..\\bin\\LogModuleErrMsg.log");
- LogE("DevOpen, 设备通信异常, nRet = %d,line=%d ", nRet, __LINE__);
- return Error_DevConnFailed;
- }
- //
- // Optional.
- // Open or close RF.
- // Arguments:
- // - bControl:true:open RF,false close RF
- //
- ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
- {
- LOG_FUNCTION();
- LogM("IDCerRFControl(), bControl = %d", bControl);
- if (bControl)
- {
- /*
- //------------2019-07-19--------根据DevTestTool连续测试的指令流程,应在此处检测入卡;
- //IDCerAuthenticate();
- DWORD dwStart = GetTickCount();
- DWORD dwNow = dwStart;
- DEVSTATUS m_DeviceStatus;
- int pos = -1;
- int nRet;
- bool bCard = false;
- while ((dwNow - dwStart) <= 1000)
- {
- pos = -1;
- memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet != IDDIGITALCOPIER_NO_ERROR)
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "通讯异常%d", nRet);
- SaveErrorInfo(err, Error_DevCommFailed);
- //m_cBS_ID81IDCImpl.ResetDev(SecDeviceNum);
- return Error_DevCommFailed;
- //SaveErrorInfo("通讯异常", Error_DevCommFailed);
- //return Error_DevCommFailed;
- }
- if ((m_DeviceStatus.iStatusInputSensorHaveCard == 1) &&
- (m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
- (m_DeviceStatus.iStatusScanSensorHaveCard ==0))
- {
- pos = 2;
- }
- else if ((m_DeviceStatus.iStatusMiddleSensorHaveCard == 1) ||
- (m_DeviceStatus.iStatusScanSensorHaveCard ==1))
- {
- pos = 1;
- }
- else
- {
- pos = 0;
- }
- if (pos <= 0)
- {
- Sleep(100);
- dwNow = GetTickCount();
- }
- else
- {
- bCard = true;
- break;
- }
- }
- if (!bCard)
- {
- SaveErrorInfo("未检测到卡", Error_Unexpect);
- return Error_Unexpect;
- }
- nRet = m_cBS_ID81IDCImpl.CheckIdCard(SecDeviceNum, 100);
- if ((IDDIGITALCOPIER_TIMEOUT_ERROR == nRet) ||
- (IDDIGITALCOPIER_NO_CARD == nRet))
- {
- //2019-02-28 《可视化柜台设备厂商适配器开发说明文档V1.3.doc》 P12关于身份证读卡器改造说明
- //1. 检测到有卡片插入/放置,但不是身份证时,IDCerAuthenticate返回Error_DevMedia;
- //2. 未检测到卡片插入/放置,IDCerAuthenticate返回Error_Unexpect;
- //3. 检测到身份证且认证成功(注意:部分厂商不做卡认证直接返回成功,需要根据实际情况按照步骤1和2返回对应值),IDCerAuthenticate返回Error_Succeed。
- //SaveErrorInfo("未检测到卡", Error_DevMedia);
- //printf(" SecDeviceNum=%d",SecDeviceNum);
- //return Error_DevMedia;
- SaveErrorInfo("未检测到卡", Error_Unexpect);
- return Error_Unexpect;
- }
- else if (IDDIGITALCOPIER_NO_ERROR != nRet)
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "通讯失败%d", nRet);
- SaveErrorInfo(err, Error_DevConnFailed);
- //m_cBS_ID81IDCImpl.ResetDev(SecDeviceNum);
- return Error_DevConnFailed;
- }
- */
- }
- else
- {
- ForceIDEject();
- }
- LogM("IDCerRFControl(), nRet = %d,line=%d", Error_Succeed, __LINE__);
- return Error_Succeed;
- }
- //
- // Optional.
- // Certificate authentication.
- //
- ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
- {
- LOG_FUNCTION();
- LogM("IDCerAuthenticate() Entry.");
- int nRet = 0;
- ErrorCodeEnum nRetErr =OnCheckCard();
- if (nRetErr != Error_Succeed)
- {
- return nRetErr;
- }
- LogM("IDCerAuthenticate():CheckIdCard检测到卡并已吸入, nRet=%d,line=%d", nRetErr, __LINE__);
- int iCardType = -1;
- memset(&m_IDInfoEx, 0x00, sizeof(IDInfoEx));
- memset(&m_IDForeignInfo, 0x00, sizeof(IDInfoForeign));
- memset(&m_IDInfoGAT, 0x00, sizeof(IDInfoGAT));
- memset(PhotoPath, 0, MAX_FILE_PATH);
- std::string dllPath = "";
- int bRet = GetDllPathLocal(dllPath);
- memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
- dllPath += "zp.bmp";
- char FileName0[256]={0};
- memcpy(FileName0, dllPath.c_str(), dllPath.length());
- std::string strLog = "IDCerAuthenticate(),PhotoPath=[" + dllPath + "]";
- LogM("%s,line=%d",strLog.c_str(), __LINE__);
- nRet = m_cBS_ID81IDCImpl.GetMyIDCardType(SecDeviceNum, &iCardType);
- if(nRet == IDDIGITALCOPIER_NO_ERROR)
- {
- }
- else if (nRet == IDDIGITALCOPIER_IDDATA_PROCESS_ERROR)
- {
- SaveErrorInfo("无效卡", Error_DevMedia);
- LogE("IDCerAuthenticate(),无效卡, nRet=%d,line=%d", Error_DevMedia, __LINE__);
- return Error_DevMedia;
- }
- else if (IDDIGITALCOPIER_STATUS_PASSAGE_JAM == nRet)
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "塞卡%d", nRet);
- SaveErrorInfo(err, Error_Unexpect);
- LogE("IDCerAuthenticate(),塞卡,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
- return Error_Unexpect;
- }
- else
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogE("IDCerAuthenticate(),通讯异常%d,nRet=%d,line=%d", nRet, Error_DevCommFailed, __LINE__);
- m_wDevStatus = DEVICE_STATUS_FAULT;
- return Error_DevCommFailed;
- }
- void *AllTypeInfo = NULL;
- if (iCardType == 0) // 0-身份证
- {
- AllTypeInfo = &m_IDInfoEx;
- }
- else if (iCardType == 1) //1-外国人居住证
- {
- AllTypeInfo = &m_IDForeignInfo;
- }
- else if (iCardType == 2) //2-港澳台
- {
- AllTypeInfo = &m_IDInfoGAT;
- }
- else
- {
- }
- if (iCardType == 2)
- {
- nRet = m_cBS_ID81IDCImpl.GetMyGATIDInfo(SecDeviceNum, &m_IDInfoGAT, FileName0);
- }
- else
- {
- nRet = m_cBS_ID81IDCImpl.GetAllTypeCardInfo(SecDeviceNum, iCardType, AllTypeInfo, FileName0);
- }
- if(nRet == IDDIGITALCOPIER_NO_ERROR)
- {
- LogM("IDCerAuthenticate(),认证成功,line=%d", __LINE__);
- }
- else if ((nRet == IDDIGITALCOPIER_NO_ERROR) ||
- (nRet == IDDIGITALCOPIER_IDDATA_PROCESS_ERROR)) //身份证电子信息处理错误
- {
- SaveErrorInfo("无效卡", Error_DevMedia);
- LogE("IDCerAuthenticate(),无效卡, nRet=%d,line=%d", Error_DevMedia, __LINE__);
- return Error_DevMedia;
- }
- else if (IDDIGITALCOPIER_STATUS_PASSAGE_JAM == nRet)
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "塞卡%d", nRet);
- SaveErrorInfo(err, Error_Unexpect);
- LogE("IDCerAuthenticate(),塞卡,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
- return Error_Unexpect;
- }
- else
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "通讯失败%d", nRet);
- SaveErrorInfo(err, Error_DevConnFailed);
- LogE("IDCerAuthenticate()通讯失败, nRet=%d,line=%d", Error_DevCommFailed, __LINE__);
- m_wDevStatus = DEVICE_STATUS_FAULT;
- return Error_DevConnFailed;
- }
- m_bAuthed = true; // true:认证成功;
- m_iCardType = iCardType; // 认证成功后,卡的类型;
- LogM("IDCerAuthenticate(), nRet=%d,line=%d", Error_Succeed, __LINE__);
- return Error_Succeed;
- }
- // 获取证件信息,包括二代身份证、外国人永久居留证
- // Get Identity Card info.
- //
- ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
- {
- LOG_FUNCTION();
- LogM("IDCerGetData() Entry,line=%d", __LINE__);
- if (!m_bAuthed)
- {
- SaveErrorInfo("未认证成功。", Error_DevMedia);
- LogE("IDCerGetData(),未认证成功, nRet=%d,line=%d", Error_DevMedia, __LINE__);
- return Error_DevMedia;
- }
- m_bAuthed = false; //认证成功只能读一次,下次必须重新认证;
- std::string dllPath = "";
- int bRet = GetDllPathLocal(dllPath);
- std::string ckStr = dllPath + "ck.bmp";
- std::string zpStr = dllPath + "zp.bmp";
- std::string commond="mv"+std::string(" ")+ckStr+std::string(" ")+zpStr;
- system(commond.c_str());
- std::string strLog = "IDCerGetData(),ckStr=[" + ckStr + "],zpStr=[" + zpStr + "]";
- LogM("%s",strLog.c_str());
- memset(PhotoPath, 0, MAX_FILE_PATH);
- memcpy(PhotoPath, zpStr.c_str(), zpStr.length());
- memset(&idCerInfo, 0, sizeof(IDCerInfo));
- //--------在IDCerAuthenticate里,对有效卡读出数据,在IDCerGetData和IDCerGetDataEx不再去读数据,否则应用会崩溃(未知原因,参考E1000的处理);
- if (m_iCardType == 0) //0-身份证
- {
- //身份证
- //1姓名
- std::string dataStr = m_IDInfoEx.name;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.name.data, dataStr.c_str());
- idCerInfo.name.dwSize = dataStr.size();
- //2性别
- dataStr = m_IDInfoEx.sex;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.sex.data, dataStr.c_str());
- idCerInfo.sex.dwSize = dataStr.size();
- //3国籍(民族)
- dataStr = m_IDInfoEx.nation;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.nation.data, dataStr.c_str());
- idCerInfo.nation.dwSize = dataStr.size();
- //4出生日期
- dataStr = m_IDInfoEx.birthday;
- dataStr = trim(dataStr);
- std::string year = dataStr.substr(0, 4);
- std::string month = dataStr.substr(4, 2);
- std::string day = dataStr.substr(6, 2);
- std::string date = year + "年" + month + "月" + day + "日";
- strcpy_s(idCerInfo.birthday.data, date.c_str());
- idCerInfo.birthday.dwSize = dataStr.size();
- //5地址
- dataStr = m_IDInfoEx.address;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.address.data, dataStr.c_str());
- idCerInfo.address.dwSize = dataStr.size();
- //6身份证号
- dataStr = m_IDInfoEx.number;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.idno.data, dataStr.c_str());
- idCerInfo.idno.dwSize = dataStr.size();
- //7发证机关
- dataStr = m_IDInfoEx.department;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.department.data, dataStr.c_str());
- idCerInfo.department.dwSize = dataStr.size();
- //8有效期起始时间
- char starttime[9];
- memset(starttime, 0, 9);
- for (int i=0; i<8; i++)
- {
- starttime[i] = m_IDInfoEx.timeLimit[i];
- }
- starttime[8]='\0';
- dataStr = starttime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- strcpy_s(idCerInfo.startDate.data, dataStr.c_str());
- idCerInfo.startDate.dwSize = dataStr.size();
- //9有效期终止时间
- int len = strlen(m_IDInfoEx.timeLimit);
- if (len > 15)
- {
- char endtime[9]={0};
- for (int i=0; i<8; i++)
- {
- if( m_IDInfoEx.timeLimit[i] != '.' )
- {
- endtime[i] = m_IDInfoEx.timeLimit[i + 9];
- }
- }
- endtime[8] = '\0';
- dataStr = endtime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- strcpy_s(idCerInfo.endDate.data, dataStr.c_str());
- idCerInfo.endDate.dwSize = dataStr.size();
- }
- else
- {
- dataStr = m_IDInfoEx.timeLimit;
- dataStr = dataStr.substr(9, len-9);
- strcpy_s(idCerInfo.endDate.data, dataStr.c_str());
- idCerInfo.endDate.dwSize = dataStr.size();
- }
- //10附加地址
- memset(idCerInfo.newAddress.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfo.newAddress.dwSize = 0;
- //11头像图片保存地址
- dataStr = PhotoPath;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.photoPath.data, dataStr.c_str());
- idCerInfo.photoPath.dwSize = dataStr.size();
- LogM("IDCerGetData(), 身份证");
- }
- else if (m_iCardType == 1) //1-外国人居住证
- {
- //外国人
- //1姓名
- std::string dataStr = m_IDForeignInfo.NameCHN;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.name.data, dataStr.c_str());
- idCerInfo.name.dwSize = dataStr.size();
- //2性别
- dataStr = m_IDForeignInfo.Sex;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.sex.data, dataStr.c_str());
- idCerInfo.sex.dwSize = dataStr.size();
- //2019-06-11
- //3国籍 ID81开发包没有中文国籍,先用英文代码;
- //2019-09-06 V1.0.0.9---------此项为民族,只是二代证专用,见IDCerInfoEx解释;
- //dataStr = m_IDForeignInfo.Nation;
- //dataStr = trim(dataStr);
- //strcpy_s(idCerInfo.nation.data, m_IDForeignInfo.Nation);
- //idCerInfo.nation.dwSize = dataStr.size();
- memset(idCerInfo.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfo.nation.dwSize = 0;
- //4出生日期
- dataStr = m_IDForeignInfo.Born;
- dataStr = trim(dataStr);
- std::string year = dataStr.substr(0, 4);
- std::string month = dataStr.substr(4, 2);
- std::string day = dataStr.substr(6, 2);
- std::string date = year + "年" + month + "月" + day + "日";
- strcpy_s(idCerInfo.birthday.data, date.c_str());
- idCerInfo.birthday.dwSize = dataStr.size();
- //5地址
- memset(idCerInfo.address.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfo.address.dwSize = 0;
- //6证件号码
- dataStr = m_IDForeignInfo.IDCardNO;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.idno.data, dataStr.c_str());
- idCerInfo.idno.dwSize = dataStr.size();
- //7发证机关
- dataStr = m_IDForeignInfo.Department;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.department.data, dataStr.c_str());
- idCerInfo.department.dwSize = dataStr.size();
- //8有效期起始时间
- dataStr = m_IDForeignInfo.TimeLimitBegin;
- dataStr = trim(dataStr);
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- strcpy_s(idCerInfo.startDate.data, dataStr.c_str());
- idCerInfo.startDate.dwSize = dataStr.size();
- //9有效期终止时间
- dataStr = m_IDForeignInfo.TimeLimitEnd;
- dataStr = trim(dataStr);
- //2019-06-11 修改,注释下面语句,拷贝到endDate(原来拷贝到startDate,错);
- //if (strlen(m_IDForeignInfo.TimeLimitEnd) == 8)
- {
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- }
- strcpy_s(idCerInfo.endDate.data, dataStr.c_str());
- idCerInfo.endDate.dwSize = dataStr.size();
- //10附加地址
- memset(idCerInfo.newAddress.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfo.newAddress.dwSize = 0;
- //11头像图片文件保存地址
- dataStr = PhotoPath;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.photoPath.data, dataStr.c_str());
- idCerInfo.photoPath.dwSize = dataStr.size();
- LogM("IDCerGetData(), 外国人");
- }
- else if (m_iCardType == 2) //2-港澳台
- {
- //港澳台
- //1姓名
- std::string dataStr = m_IDInfoGAT.name;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.name.data, dataStr.c_str());
- idCerInfo.name.dwSize = dataStr.size();
- //2性别
- dataStr = m_IDInfoGAT.sex;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.sex.data, dataStr.c_str());
- idCerInfo.sex.dwSize = dataStr.size();
- //3民族
- memset(idCerInfo.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfo.nation.dwSize = 0;
- //4出生日期
- dataStr = m_IDInfoGAT.birthday;
- dataStr = trim(dataStr);
- std::string year = dataStr.substr(0, 4);
- std::string month = dataStr.substr(4, 2);
- std::string day = dataStr.substr(6, 2);
- std::string date = year + "年" + month + "月" + day + "日";
- strcpy_s(idCerInfo.birthday.data, date.c_str());
- idCerInfo.birthday.dwSize = dataStr.size();
- //5地址
- dataStr = m_IDInfoGAT.address;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.address.data, dataStr.c_str());
- idCerInfo.address.dwSize = dataStr.size();
- //6身份证号
- dataStr = m_IDInfoGAT.number;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.idno.data, dataStr.c_str());
- idCerInfo.idno.dwSize = dataStr.size();
- //7发证机关
- dataStr = m_IDInfoGAT.department;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.department.data, dataStr.c_str());
- idCerInfo.department.dwSize = dataStr.size();
- //8有效期起始时间
- char starttime[9];
- memset(starttime, 0, 9);
- for (int i=0; i<8; i++)
- {
- starttime[i] = m_IDInfoGAT.timeLimit[i];
- }
- starttime[8]='\0';
- dataStr = starttime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- strcpy_s(idCerInfo.startDate.data, dataStr.c_str());
- idCerInfo.startDate.dwSize = dataStr.size();
- //9有效期终止时间
- int len = strlen(m_IDInfoGAT.timeLimit);
- if (len > 15)
- {
- char endtime[9]={0};
- for (int i=0; i<8; i++)
- {
- if( m_IDInfoGAT.timeLimit[i] != '.' )
- {
- endtime[i] = m_IDInfoGAT.timeLimit[i + 9];
- }
- }
- endtime[8] = '\0';
- dataStr = endtime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- strcpy_s(idCerInfo.endDate.data, dataStr.c_str());
- idCerInfo.endDate.dwSize = dataStr.size();
- }
- else
- {
- dataStr = m_IDInfoGAT.timeLimit;
- dataStr = dataStr.substr(9, len-9);
- strcpy_s(idCerInfo.endDate.data, dataStr.c_str());
- idCerInfo.endDate.dwSize = dataStr.size();
- }
- //10最新地址
- memset(idCerInfo.newAddress.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfo.newAddress.dwSize = 0;
- //11头像保存路径和文件名
- dataStr = PhotoPath;
- dataStr = trim(dataStr);
- strcpy_s(idCerInfo.photoPath.data, dataStr.c_str());
- idCerInfo.photoPath.dwSize = dataStr.size();
- LogM("IDCerGetData(), 港澳台");
- }
- else
- {
- //无效卡(这里包括港澳台居住证,因为未接到招行提出改造此接口要求;)
- SaveErrorInfo("无效卡", Error_DevMedia);
- LogE("IDCerGetData(), 无效卡, nRet=%d", Error_DevMedia);
- return Error_DevMedia;
- }
- LogM("IDCerGetData(), nRet=%d", Error_Succeed);
- LogM("IDCerGetData() return:\
- \nName:%s\nSex:%s\nNation:%s\nBirth:%s\nAddress:%s\nIDCode:%s\
- \nDepart:%s\nStartDate:%s\nEndDate:%s\nNewAddress:%s\nPhotoPath:%s\n",
- idCerInfo.name.data, idCerInfo.sex.data, idCerInfo.nation.data,
- idCerInfo.birthday.data, idCerInfo.address.data, idCerInfo.idno.data,
- idCerInfo.department.data, idCerInfo.startDate.data, idCerInfo.endDate.data,
- idCerInfo.newAddress.data, idCerInfo.photoPath.data);
- return Error_Succeed;
- }
- //2017-06-19 增加外国人永久居留证接口
- // 获取证件信息,包括二代身份证、外国人永久居留证
- // Get Identity Card info.
- //
- ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
- {
- LOG_FUNCTION();
- if (!m_bAuthed)
- {
- SaveErrorInfo("未认证成功。", Error_DevMedia);
- LogE("IDCerGetDataEx(),未认证成功, nRet=%d", Error_DevMedia);
- return Error_DevMedia;
- }
- m_bAuthed = false; //认证成功只能读一次,下次必须重新认证;
- std::string dllPath = "";
- int bRet = GetDllPathLocal(dllPath);
- std::string ckStr = dllPath + "ck.bmp";
- std::string zpStr = dllPath + "zp.bmp";
- std::string commond="mv"+std::string(" ")+ckStr+std::string(" ")+zpStr;
- system(commond.c_str());
- std::string strLog = "IDCerGetData(),ckStr=[" + ckStr + "],zpStr=[" + zpStr + "]";
- LogM("%s",strLog.c_str());
- memset(PhotoPath, 0, MAX_FILE_PATH);
- memcpy(PhotoPath, zpStr.c_str(), zpStr.length());
- memset(&idCerInfoEx, 0, sizeof(IDCerInfoEx));
- if (m_iCardType == 0) //0-身份证
- {
- //身份证
- //1姓名
- std::string dataStr = m_IDInfoEx.name;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.name.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.name.data, dataStr.c_str());
- idCerInfoEx.name.dwSize = dataStr.size();
- //2性别
- dataStr = m_IDInfoEx.sex;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.sex.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.sex.data, dataStr.c_str());
- idCerInfoEx.sex.dwSize = dataStr.size();
- //3民族
- dataStr = m_IDInfoEx.nation;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.nation.data, dataStr.c_str());
- idCerInfoEx.nation.dwSize = dataStr.size();
- //4出生日期
- dataStr = m_IDInfoEx.birthday;
- dataStr = trim(dataStr);
- std::string year = dataStr.substr(0, 4);
- std::string month = dataStr.substr(4, 2);
- std::string day = dataStr.substr(6, 2);
- std::string date = year + "年" + month + "月" + day + "日";
- memset(idCerInfoEx.birthday.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.birthday.data, date.c_str());
- idCerInfoEx.birthday.dwSize = dataStr.size();
- //5地址
- dataStr = m_IDInfoEx.address;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.address.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.address.data, dataStr.c_str());
- idCerInfoEx.address.dwSize = dataStr.size();
- //6身份证号
- dataStr = m_IDInfoEx.number;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.idno.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.idno.data, dataStr.c_str());
- idCerInfoEx.idno.dwSize = dataStr.size();
- //7发证机关
- dataStr = m_IDInfoEx.department;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.department.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.department.data, dataStr.c_str());
- idCerInfoEx.department.dwSize = dataStr.size();
- //8有效期起始时间
- char starttime[9];
- memset(starttime, 0, 9);
- for (int i=0; i<8; i++)
- {
- starttime[i] = m_IDInfoEx.timeLimit[i];
- }
- starttime[8]='\0';
- dataStr = starttime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- memset(idCerInfoEx.startDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.startDate.data, dataStr.c_str());
- idCerInfoEx.startDate.dwSize = dataStr.size();
- //9有效期终止时间
- int len = strlen(m_IDInfoEx.timeLimit);
- if (len > 15)
- {
- char endtime[9]={0};
- for (int i=0; i<8; i++)
- {
- if( m_IDInfoEx.timeLimit[i] != '.' )
- {
- endtime[i] = m_IDInfoEx.timeLimit[i + 9];
- }
- }
- endtime[8] = '\0';
- dataStr = endtime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- memset(idCerInfoEx.endDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.endDate.data, dataStr.c_str());
- idCerInfoEx.endDate.dwSize = dataStr.size();
- }
- else
- {
- dataStr = m_IDInfoEx.timeLimit;
- dataStr = dataStr.substr(9, len-9);
- memset(idCerInfoEx.endDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.endDate.data, dataStr.c_str());
- idCerInfoEx.endDate.dwSize = dataStr.size();
- }
- //10最新地址
- memset(idCerInfoEx.newAddress.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfoEx.newAddress.dwSize = 0;
- //11头像保存路径和文件名
- dataStr = PhotoPath;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.photoPath.data, 0, MAX_IDCER_PHOTO_PATH);
- strcpy_s(idCerInfoEx.photoPath.data, dataStr.c_str());
- idCerInfoEx.photoPath.dwSize = dataStr.size();
- //12英文姓名
- memset(idCerInfoEx.englishName.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfoEx.englishName.dwSize = 0;
- //13民族代码
- memset(idCerInfoEx.nationality.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.nationality.dwSize = 0;
- //14证件版本号
- memset(idCerInfoEx.idVersion.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.idVersion.dwSize = 0;
- //15证件类型标识,空(二代证),'I'(外国人),'J'(港澳台)
- memset(idCerInfoEx.idType.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.idType.dwSize = 0;
- //16保留字段
- memset(idCerInfoEx.reserved.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.reserved.dwSize = 0;
- //港澳台扩展
- /* 先注释这部分,因为测试工具DevTestTool.exe暂不支持;
- */
- //17通行证号码
- memset(idCerInfoEx.txzCode.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.txzCode.dwSize = 0;
- //18签发次数
- memset(idCerInfoEx.issuedSN.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.issuedSN.dwSize = 0;
- //19备用2
- memset(idCerInfoEx.reserved2.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved2.dwSize = 0;
- //20备用3
- memset(idCerInfoEx.reserved3.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved3.dwSize = 0;
- //21备用4
- memset(idCerInfoEx.reserved4.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved4.dwSize = 0;
- //22备用5
- memset(idCerInfoEx.reserved5.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved5.dwSize = 0;
- LogM("IDCerGetDataEx(), 身份证");
- }
- else if (m_iCardType == 1) //1-外国人居住证
- {
- //外国人
- //1姓名
- std::string dataStr = m_IDForeignInfo.NameCHN;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.name.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.name.data, dataStr.c_str());
- idCerInfoEx.name.dwSize = dataStr.size();
- //2性别
- dataStr = m_IDForeignInfo.Sex;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.sex.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.sex.data, dataStr.c_str());
- idCerInfoEx.sex.dwSize = dataStr.size();
- //2019-06-11
- //3国籍 ID81开发包没有中文国籍,先用英文代码;
- memset(idCerInfoEx.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.nation.dwSize = 0;
- //4出生日期
- dataStr = m_IDForeignInfo.Born;
- dataStr = trim(dataStr);
- std::string year = dataStr.substr(0, 4);
- std::string month = dataStr.substr(4, 2);
- std::string day = dataStr.substr(6, 2);
- std::string date = year + "年" + month + "月" + day + "日";
- memset(idCerInfoEx.birthday.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.birthday.data, date.c_str());
- idCerInfoEx.birthday.dwSize = dataStr.size();
- //5地址
- memset(idCerInfoEx.address.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfoEx.address.dwSize = 0;
- //6证件号码
- dataStr = m_IDForeignInfo.IDCardNO;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.idno.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.idno.data, dataStr.c_str());
- idCerInfoEx.idno.dwSize = dataStr.size();
- //7发证机关
- dataStr = m_IDForeignInfo.Department;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.department.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.department.data, dataStr.c_str());
- idCerInfoEx.department.dwSize = dataStr.size();
- //8有效期起始时间
- dataStr = m_IDForeignInfo.TimeLimitBegin;
- dataStr = trim(dataStr);
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- memset(idCerInfoEx.startDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.startDate.data, dataStr.c_str());
- idCerInfoEx.startDate.dwSize = dataStr.size();
- //9有效期终止时间
- dataStr = m_IDForeignInfo.TimeLimitEnd;
- dataStr = trim(dataStr);
- //2019-06-11 修改,注释下面语句,拷贝到endDate(原来拷贝到startDate,错);
- //if (strlen(m_IDForeignInfo.TimeLimitEnd) == 8)
- {
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- }
- memset(idCerInfoEx.endDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.endDate.data, dataStr.c_str());
- idCerInfoEx.endDate.dwSize = dataStr.size();
- //----------------------------------------------
- //10最新地址
- memset(idCerInfoEx.newAddress.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfoEx.newAddress.dwSize = 0;
- //11头像保存路径和文件名
- dataStr = PhotoPath;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.photoPath.data, 0, MAX_IDCER_PHOTO_PATH);
- strcpy_s(idCerInfoEx.photoPath.data, dataStr.c_str());
- idCerInfoEx.photoPath.dwSize = dataStr.size();
- //12英文姓名,外国人专用
- dataStr = m_IDForeignInfo.NameENG;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.englishName.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.englishName.data, dataStr.c_str());
- idCerInfoEx.englishName.dwSize = dataStr.size();
- //13国籍或地区代码,外国人专用
- dataStr = m_IDForeignInfo.Nation;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.nationality.data, 0, IDCER_EIGHT_BYTE_SIZE);
- strcpy_s(idCerInfoEx.nationality.data, dataStr.c_str());
- idCerInfoEx.nationality.dwSize = dataStr.size();
- //14证件版本号,外国人专用
- dataStr = m_IDForeignInfo.IDVersion;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.idVersion.data, 0, IDCER_EIGHT_BYTE_SIZE);
- strcpy_s(idCerInfoEx.idVersion.data, dataStr.c_str());
- idCerInfoEx.idVersion.dwSize = dataStr.size();
- //15证件类型标识,外国人取值'I',二代证为空,'J'(港澳台)
- memset(idCerInfoEx.idType.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.idType.dwSize = 1;
- idCerInfoEx.idType.data[0] = 'I';
- //16保留字段,外国人专用
- memset(idCerInfoEx.reserved.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.reserved.dwSize = 0;
- //港澳台扩展
- /* 先注释这部分,因为测试工具DevTestTool.exe暂不支持;
- */
- //17通行证号码
- memset(idCerInfoEx.txzCode.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.txzCode.dwSize = 0;
- //18签发次数
- memset(idCerInfoEx.issuedSN.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.issuedSN.dwSize = 0;
- //19备用2
- memset(idCerInfoEx.reserved2.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved2.dwSize = 0;
- //20备用3
- memset(idCerInfoEx.reserved3.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved3.dwSize = 0;
- //21备用4
- memset(idCerInfoEx.reserved4.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved4.dwSize = 0;
- //22备用5
- memset(idCerInfoEx.reserved5.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved5.dwSize = 0;
- LogM("IDCerGetDataEx(), 外国人");
- }
- else if (m_iCardType == 2) //2-港澳台
- {
- //港澳台
- //1姓名
- std::string dataStr = m_IDInfoGAT.name;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.name.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.name.data, dataStr.c_str());
- idCerInfoEx.name.dwSize = dataStr.size();
- //2性别
- dataStr = m_IDInfoGAT.sex;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.sex.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.sex.data, dataStr.c_str());
- idCerInfoEx.sex.dwSize = dataStr.size();
- //3民族
- memset(idCerInfoEx.nation.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.nation.dwSize = 0;
- //4出生日期
- dataStr = m_IDInfoGAT.birthday;
- dataStr = trim(dataStr);
- std::string year = dataStr.substr(0, 4);
- std::string month = dataStr.substr(4, 2);
- std::string day = dataStr.substr(6, 2);
- std::string date = year + "年" + month + "月" + day + "日";
- memset(idCerInfoEx.birthday.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.birthday.data, date.c_str());
- idCerInfoEx.birthday.dwSize = dataStr.size();
- //5地址
- dataStr = m_IDInfoGAT.address;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.address.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.address.data, dataStr.c_str());
- idCerInfoEx.address.dwSize = dataStr.size();
- //6身份证号
- dataStr = m_IDInfoGAT.number;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.idno.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.idno.data, dataStr.c_str());
- idCerInfoEx.idno.dwSize = dataStr.size();
- //7发证机关
- dataStr = m_IDInfoGAT.department;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.department.data, 0, MAX_IDCER_INFO_SIZE);
- strcpy_s(idCerInfoEx.department.data, dataStr.c_str());
- idCerInfoEx.department.dwSize = dataStr.size();
- //8有效期起始时间
- char starttime[9];
- memset(starttime, 0, 9);
- for (int i=0; i<8; i++)
- {
- starttime[i] = m_IDInfoGAT.timeLimit[i];
- }
- starttime[8]='\0';
- dataStr = starttime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- memset(idCerInfoEx.startDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.startDate.data, dataStr.c_str());
- idCerInfoEx.startDate.dwSize = dataStr.size();
- //9有效期终止时间
- int len = strlen(m_IDInfoGAT.timeLimit);
- if (len > 15)
- {
- char endtime[9]={0};
- for (int i=0; i<8; i++)
- {
- if( m_IDInfoGAT.timeLimit[i] != '.' )
- {
- endtime[i] = m_IDInfoGAT.timeLimit[i + 9];
- }
- }
- endtime[8] = '\0';
- dataStr = endtime;
- dataStr = dataStr.insert(4,1,'.');
- dataStr = dataStr.insert(7,1,'.');
- memset(idCerInfoEx.endDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.endDate.data, dataStr.c_str());
- idCerInfoEx.endDate.dwSize = dataStr.size();
- }
- else
- {
- dataStr = m_IDInfoGAT.timeLimit;
- dataStr = dataStr.substr(9, len-9);
- memset(idCerInfoEx.endDate.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.endDate.data, dataStr.c_str());
- idCerInfoEx.endDate.dwSize = dataStr.size();
- }
- //10最新地址
- memset(idCerInfoEx.newAddress.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfoEx.newAddress.dwSize = 0;
- //11头像保存路径和文件名
- dataStr = PhotoPath;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.photoPath.data, 0, MAX_IDCER_PHOTO_PATH);
- strcpy_s(idCerInfoEx.photoPath.data, dataStr.c_str());
- idCerInfoEx.photoPath.dwSize = dataStr.size();
- //12英文姓名
- memset(idCerInfoEx.englishName.data, 0, MAX_IDCER_INFO_SIZE);
- idCerInfoEx.englishName.dwSize = 0;
- //13民族代码
- memset(idCerInfoEx.nationality.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.nationality.dwSize = 0;
- //14证件版本号
- memset(idCerInfoEx.idVersion.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.idVersion.dwSize = 0;
- //15证件类型标识,空(二代证),'I'(外国人),'J'(港澳台)
- memset(idCerInfoEx.idType.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.idType.dwSize = 1;
- idCerInfoEx.idType.data[0] = 'J';
- //16保留字段
- memset(idCerInfoEx.reserved.data, 0, IDCER_EIGHT_BYTE_SIZE);
- idCerInfoEx.reserved.dwSize = 0;
- //港澳台扩展
- /* 先注释这部分,因为测试工具DevTestTool.exe暂不支持;
- */
- //17通行证号码
- dataStr = m_IDInfoGAT.passport;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.txzCode.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- strcpy_s(idCerInfoEx.txzCode.data, dataStr.c_str());
- idCerInfoEx.txzCode.dwSize = dataStr.size();
- //18签发次数
- dataStr = m_IDInfoGAT.issue;
- dataStr = trim(dataStr);
- memset(idCerInfoEx.issuedSN.data, 0, IDCER_EIGHT_BYTE_SIZE);
- strcpy_s(idCerInfoEx.issuedSN.data, dataStr.c_str());
- idCerInfoEx.issuedSN.dwSize = dataStr.size();
- //19备用2
- memset(idCerInfoEx.reserved2.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved2.dwSize = 0;
- //20备用3
- memset(idCerInfoEx.reserved3.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved3.dwSize = 0;
- //21备用4
- memset(idCerInfoEx.reserved4.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved4.dwSize = 0;
- //22备用5
- memset(idCerInfoEx.reserved5.data, 0, MAX_IDCER_SIMPLE_INFO_SIZE);
- idCerInfoEx.reserved5.dwSize = 0;
- //g_pLog->Print("IDCerGetDataEx(), 港澳台");
- LogM("IDCerGetDataEx(), 港澳台");
- }
- else
- {
- //无效卡(这里包括港澳台居住证,因为未接到招行提出改造此接口要求;)
- SaveErrorInfo("无效卡", Error_DevMedia);
- //g_pLog->Print("IDCerGetDataEx(), 无效卡, nRet=%d", Error_DevMedia);
- return Error_DevMedia;
- }
- LogM("IDCerGetDataEx(), nRet=%d", Error_Succeed);
- LogM("IDCerGetDataEx() return:\
- \nName:%s\nSex:%s\nNation:%s\nBirth:%s\nAddress:%s\nIDCode:%s\nDepart:%s\nStartDate:%s\nEndDate:%s\
- \nNewAddress:%s\nphotoPath:%s\nEnglishName:%s\nNationality:%s\nIdVersin:%s\nIdType:%s\nreserved:%s\nissuedSN:%s\
- \nzCotxde:%s\nreserved2:%s\nreserved3:%s\nreserved4:%s\nreserved5:%s",
- idCerInfoEx.name.data, idCerInfoEx.sex.data, idCerInfoEx.nation.data,
- idCerInfoEx.birthday.data, idCerInfoEx.address.data, idCerInfoEx.idno.data,
- idCerInfoEx.department.data, idCerInfoEx.startDate.data, idCerInfoEx.endDate.data,
- idCerInfoEx.newAddress.data, idCerInfoEx.photoPath.data, idCerInfoEx.englishName.data,
- idCerInfoEx.nationality.data, idCerInfoEx.idVersion.data, idCerInfoEx.idType.data,
- idCerInfoEx.reserved.data, idCerInfoEx.issuedSN.data, idCerInfoEx.txzCode.data,
- idCerInfoEx.reserved2.data, idCerInfoEx.reserved3.data, idCerInfoEx.reserved4.data, idCerInfoEx.reserved5.data);
- return Error_Succeed;
- }
- ErrorCodeEnum IDCerClassImpl::ForceIDEject()
- {
- LOG_FUNCTION();
- LogM("ForceIDEject() Entry,line=%d", __LINE__);
- int pos = -1;
- ErrorCodeEnum nRet = QueryCardPos(pos);
- if ((nRet == Error_Succeed) && pos == 0)
- {
- SaveErrorInfo("未检测到卡", Error_DevMedia);
- LogM("ForceIDEject(), 未检测到卡, nRet=%d,line=%d", Error_DevMedia, __LINE__);
- //return Error_DevMedia;
- }
- int bRet = m_cBS_ID81IDCImpl.EjectIdCard(SecDeviceNum);
- if (bRet != IDDIGITALCOPIER_NO_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("ForceIDEject(), 通讯异常, nRet=%d, SecDeviceNum = %d,line=%d", bRet, SecDeviceNum, __LINE__);
- return Error_DevCommFailed;
- }
- LogM("ForceIDEject(), nRet=%d, SecDeviceNum = %d,line=%d", bRet, SecDeviceNum, __LINE__);
- return Error_Succeed;
- }
- ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
- {
- LOG_FUNCTION();
- memset(PhotoPath, 0, MAX_FILE_PATH);
- std::string dllPath = "";
- GetDllPathLocal(dllPath);
- memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
- char FileNamefront[256] = {0};
- char FileNameback[256] = {0};
- strcpy_s(FileNamefront, PhotoPath);
- strcat_s(FileNamefront, "idfront.bmp");
- strcpy_s(FileNameback, PhotoPath);
- strcat_s(FileNameback, "idback.bmp");
- DEVSTATUS m_DeviceStatus;
- memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
- int nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- sleep(1);
- DevOpen(SecDeviceNum);
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("DeviceStatus(), 通讯异常, nRet=%d,line=%d", nRet, __LINE__);
- m_wDevStatus = DEVICE_STATUS_FAULT;
- return Error_DevCommFailed;
- }
- }
- LogM("DeviceStatus()正常, nRet=%d, line=%d", nRet, __LINE__);
- nRet = m_cBS_ID81IDCImpl.StartScan(SecDeviceNum);
- if (nRet != IDDIGITALCOPIER_NO_ERROR)
- {
- m_wDevStatus = DEVICE_STATUS_FAULT;
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("StartScan(), 通讯异常, nRet=%d, line=%d", nRet, __LINE__);
- return Error_DevCommFailed;
- }
- LogM("StartScan()正常, nRet=%d, line=%d", nRet, __LINE__);
- int iFrontLen;
- int iRearLen;
- //--------------改为与厂家DEMO相似,采用NEW方式申请数组空间;
- char* cFrontImgBuf = new char[MAX_PICTURE_SIZE];
- char* cRearImgBuf = new char[MAX_PICTURE_SIZE];
- nRet=m_cBS_ID81IDCImpl.ReadCard(SecDeviceNum, cFrontImgBuf, cRearImgBuf, &iFrontLen, &iRearLen);
- if (iFrontLen > 0)
- {
- nRet = m_cBS_ID81IDCImpl.SaveToFile(SecDeviceNum, cFrontImgBuf, iFrontLen, FileNamefront, 1);
- if (nRet != IDDIGITALCOPIER_NO_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("SaveToFile(), 通讯异常, nRet=%d,line=%d", Error_DevCommFailed, __LINE__);
- delete []cFrontImgBuf;
- delete []cRearImgBuf;
- return Error_DevCommFailed;
- }
- LogM("SaveToFile()正常, nRet=%d, iFrontLen=%d, line=%d", nRet, iFrontLen, __LINE__);
- }
- LogM("ReadCard()正常, nRet=%d, iFrontLen = %d, line=%d", nRet, iFrontLen, __LINE__);
- if (iRearLen>0)
- {
- nRet = m_cBS_ID81IDCImpl.SaveToFile(SecDeviceNum,cRearImgBuf,iRearLen,FileNameback,1);
- if (nRet != IDDIGITALCOPIER_NO_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("SaveToFile(), 通讯异常, nRet=%d, iRearLen = %d, line=%d", Error_DevCommFailed, iRearLen, __LINE__);
- delete []cFrontImgBuf;
- delete []cRearImgBuf;
- return Error_DevCommFailed;
- }
- LogM("SaveToFile()正常, nRet=%d, iRearLen = %d, line=%d", nRet, iRearLen, __LINE__);
- }
- LogM("ScanIDAndSaveImage(), nRet=%d", Error_Succeed);
- delete []cFrontImgBuf;
- delete []cRearImgBuf;
- return Error_Succeed;
- }
- ErrorCodeEnum IDCerClassImpl::QueryCardPos(int &pos)
- {
- LOG_FUNCTION();
- LogM("QueryCardPos() Entry,line=%d", __LINE__);
- DEVSTATUS m_DeviceStatus;
- memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
- int nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- sleep(1);
- DevOpen(SecDeviceNum);
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("DeviceStatus(), 通讯异常, nRet=%d,line=%d", nRet, __LINE__);
- m_wDevStatus = DEVICE_STATUS_FAULT;
- return Error_DevCommFailed;
- }
- }
- if ((m_DeviceStatus.iStatusInputSensorHaveCard == 1) &&
- (m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
- (m_DeviceStatus.iStatusScanSensorHaveCard ==0))
- {
- pos = 2;
- LogM("QueryCardPos(), pos=2, 证件在进卡口,line=%d", __LINE__);
- }
- if ((m_DeviceStatus.iStatusMiddleSensorHaveCard == 1) ||
- (m_DeviceStatus.iStatusScanSensorHaveCard ==1))
- {
- pos = 1;
- LogM("QueryCardPos(), pos=1, 证件在读卡器内部,line=%d", __LINE__);
- }
- if ((m_DeviceStatus.iStatusInputSensorHaveCard == 0) &&
- (m_DeviceStatus.iStatusMiddleSensorHaveCard == 0) &&
- (m_DeviceStatus.iStatusScanSensorHaveCard ==0))
- {
- pos = 0;
- LogM("QueryCardPos(), pos=0, 未检测到任何证件,line=%d", __LINE__);
- }
- LogM("QueryCardPos(), nRet=%d,line=%d", Error_Succeed, __LINE__);
- return Error_Succeed;
- }
- //Private
- void IDCerClassImpl::SaveErrorInfo(CHAR* errMsg, int errCode)
- {
- LOG_FUNCTION();
- memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
- sprintf(m_szErrMsg, "%s[%d]", errMsg, errCode);
- }
- int IDCerClassImpl::string_format(std::string &str, const std::string fmt, ...)
- {
- char *buf;
- va_list ap;
- va_start(ap, fmt);
- int len = vprintf (fmt.c_str(), ap) + 1;
- buf = (char *) malloc (len * sizeof (char));
- if (!buf)
- {
- return -1;
- }
- memset(buf, 0, len);
- int nRet = vsnprintf (buf, len, fmt.c_str(), ap);
- va_end(ap);
- str = std::string(buf);
- free(buf);
- return nRet;
- }
- //删除某目录下的文件,不删除子目录文件,不放回回收站,支持通配符*、?,例如:SH_DeleteFileOrDirectory("c:\\data\\1??.*");
- //删除所有文件夹及文件,不放回回收站,例如:SH_DeleteFileOrDirectory("c:\\data");
- bool IDCerClassImpl::SH_DeleteFileOrDirectory(char *strFileName)
- {
- int nLength = strlen(strFileName);
- char *strSrc = new char[nLength+2];
- memset(strSrc, 0, nLength+2);
- //strcpy(strSrc, strFileName);
- strcpy_s(strSrc, nLength+1, strFileName);
- strSrc[nLength+1] = '\0';
- std::string trash_path="/root/.local/share/Trash/";
- trash_path=trash_path+std::string(strSrc);
- std::string commond="cp"+std::string(" ")+std::string(strSrc)+std::string(" ")+trash_path;
- bool ret=system(commond.c_str());
- if (ret == false)
- {
- return ret;
- }
- //ret = file.remove(); //删除文件
- ret=remove(strSrc);
- delete []strSrc;
- return ret;
- }
- std::string& IDCerClassImpl::trim(std::string &sStr, std::string sPatten)
- {
- if (sStr.empty())
- {
- return sStr;
- }
- sStr.erase(0, sStr.find_first_not_of(sPatten));
- sStr.erase(sStr.find_last_not_of(sPatten) + 1);
- return sStr;
- }
- ErrorCodeEnum IDCerClassImpl::OnCheckCard()
- {
- int nRet = IDDIGITALCOPIER_NO_ERROR;
- DEVSTATUS m_DeviceStatus;
- memset(&m_DeviceStatus, 0x00, sizeof(DEVSTATUS));
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- sleep(1);
- DevOpen(SecDeviceNum);
- nRet = m_cBS_ID81IDCImpl.DeviceStatus(SecDeviceNum, &m_DeviceStatus);
- if (nRet == IDDIGITALCOPIER_PORT_ERROR)
- {
- SaveErrorInfo("通讯异常", Error_DevCommFailed);
- LogM("DeviceStatus(), 通讯异常, nRet=%d", nRet);
- m_wDevStatus = DEVICE_STATUS_FAULT;
- return Error_DevCommFailed;
- }
- }
- nRet = m_cBS_ID81IDCImpl.CheckIdCard(SecDeviceNum, 3000);
- if ((IDDIGITALCOPIER_TIMEOUT_ERROR == nRet) ||
- (IDDIGITALCOPIER_NO_CARD == nRet))
- {
- SaveErrorInfo("未检测到卡", Error_Unexpect);
- LogE("IDCerAuthenticate(),未检测到卡, nRet=%d, SecDeviceNum=%d", nRet, SecDeviceNum);
- return Error_Unexpect;
- }
- else if (IDDIGITALCOPIER_STATUS_PASSAGE_JAM == nRet)
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "塞卡%d", nRet);
- SaveErrorInfo(err, Error_Unexpect);
- m_cBS_ID81IDCImpl.ResetWithAction(SecDeviceNum, 3);
- LogE("IDCerAuthenticate(),塞卡后软复位,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
- return Error_Unexpect;
- }
- else if (IDDIGITALCOPIER_NO_ERROR != nRet)
- {
- char err[MAX_DEV_ERROR_MSG_LEN] = {0};
- sprintf(err, "通讯失败%d", nRet);
- SaveErrorInfo(err, Error_DevConnFailed);
- LogE("IDCerAuthenticate(),通讯失败,nRet=%d, SecDeviceNum=%d,line=%d", nRet, SecDeviceNum, __LINE__);
- return Error_DevConnFailed;
- }
- return Error_Succeed;
- }
|