瀏覽代碼

#IQRV #comment: 身份证模拟器实现规范化

陈纪林80310970 1 年之前
父節點
當前提交
864b64bbf4
共有 2 個文件被更改,包括 111 次插入68 次删除
  1. 110 63
      DevAdapter/simulator/idcer.1.1/idcer_impl.cpp
  2. 1 5
      DevAdapter/simulator/idcer.1.1/idcer_impl.h

+ 110 - 63
DevAdapter/simulator/idcer.1.1/idcer_impl.cpp

@@ -135,23 +135,29 @@ ErrorCodeEnum IDCerClassImpl::ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2)
             return Error_Unexpect;
         }
 
-        LOG4VTM(INFO, "Nationnality =" << idCerRet.nationality.data.c_str());
-
 #ifdef _MSC_VER
         ConvertGBKToUtf8(idCerRet.name.data);
-        ConvertGBKToUtf8(idCerRet.englishName.data);
         ConvertGBKToUtf8(idCerRet.sex.data);
+        ConvertGBKToUtf8(idCerRet.nation.data);
         ConvertGBKToUtf8(idCerRet.birthday.data);
         ConvertGBKToUtf8(idCerRet.address.data);
-        ConvertGBKToUtf8(idCerRet.department.data);
         ConvertGBKToUtf8(idCerRet.idno.data);
+        ConvertGBKToUtf8(idCerRet.department.data);
         ConvertGBKToUtf8(idCerRet.startDate.data);
         ConvertGBKToUtf8(idCerRet.endDate.data);
-        ConvertGBKToUtf8(idCerRet.nation.data);
+        ConvertGBKToUtf8(idCerRet.photoPath.data);
+        ConvertGBKToUtf8(idCerRet.newAddress.data);
+        ConvertGBKToUtf8(idCerRet.englishName.data);
         ConvertGBKToUtf8(idCerRet.nationality.data);
+        ConvertGBKToUtf8(idCerRet.idVersion.data);
         ConvertGBKToUtf8(idCerRet.idType.data);
         ConvertGBKToUtf8(idCerRet.reserved.data);
+        ConvertGBKToUtf8(idCerRet.txzCode.data);
+        ConvertGBKToUtf8(idCerRet.issuedSN.data);
         ConvertGBKToUtf8(idCerRet.reserved2.data);
+        ConvertGBKToUtf8(idCerRet.reserved3.data);
+        ConvertGBKToUtf8(idCerRet.reserved4.data);
+        ConvertGBKToUtf8(idCerRet.reserved5.data);
 #endif // _MSC_VER
 
         char name[1024]; memset(name, 0, 1024);
@@ -159,16 +165,16 @@ ErrorCodeEnum IDCerClassImpl::ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2)
         UTF8_to_UCS2((UINT8*)name, (UINT16*)idCerInfoEx2.name.data);
         idCerInfoEx2.name.dwSize = strlen(idCerInfoEx2.name.data);
 
-        char englishname[1024]; memset(englishname, 0, 1024);
-        std::strcpy(englishname, idCerRet.englishName.data.c_str());
-        UTF8_to_UCS2((UINT8*)englishname, (UINT16*)idCerInfoEx2.englishName.data);
-        idCerInfoEx2.englishName.dwSize = strlen(idCerInfoEx2.englishName.data);
-
         char sex[1024]; memset(sex, 0, 1024);
         std::strcpy(sex, idCerRet.sex.data.c_str());
         UTF8_to_UCS2((UINT8*)sex, (UINT16*)idCerInfoEx2.sex.data);
         idCerInfoEx2.sex.dwSize = strlen(idCerInfoEx2.sex.data);
 
+        char nation[1024]; memset(nation, 0, 1024);
+        std::strcpy(nation, idCerRet.nation.data.c_str());
+        UTF8_to_UCS2((UINT8*)nation, (UINT16*)idCerInfoEx2.nation.data);
+        idCerInfoEx2.nation.dwSize = strlen(idCerInfoEx2.nation.data);
+
         char birthday[1024]; memset(birthday, 0, 1024);
         std::strcpy(birthday, idCerRet.birthday.data.c_str());
         UTF8_to_UCS2((UINT8*)birthday, (UINT16*)idCerInfoEx2.birthday.data);
@@ -179,16 +185,16 @@ ErrorCodeEnum IDCerClassImpl::ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2)
         UTF8_to_UCS2((UINT8*)address, (UINT16*)idCerInfoEx2.address.data);
         idCerInfoEx2.address.dwSize = strlen(idCerInfoEx2.address.data);
 
-        char department[1024]; memset(department, 0, 1024);
-        std::strcpy(department, idCerRet.department.data.c_str());
-        UTF8_to_UCS2((UINT8*)department, (UINT16*)idCerInfoEx2.department.data);
-        idCerInfoEx2.department.dwSize = strlen(idCerInfoEx2.department.data);
-
         char idno[1024]; memset(idno, 0, 1024);
         std::strcpy(idno, idCerRet.idno.data.c_str());
         UTF8_to_UCS2((UINT8*)idno, (UINT16*)idCerInfoEx2.idno.data);
         idCerInfoEx2.idno.dwSize = strlen(idCerInfoEx2.idno.data);
 
+        char department[1024]; memset(department, 0, 1024);
+        std::strcpy(department, idCerRet.department.data.c_str());
+        UTF8_to_UCS2((UINT8*)department, (UINT16*)idCerInfoEx2.department.data);
+        idCerInfoEx2.department.dwSize = strlen(idCerInfoEx2.department.data);
+
         char startDate[1024]; memset(startDate, 0, 1024);
         std::strcpy(startDate, idCerRet.startDate.data.c_str());
         UTF8_to_UCS2((UINT8*)startDate, (UINT16*)idCerInfoEx2.startDate.data);
@@ -199,43 +205,77 @@ ErrorCodeEnum IDCerClassImpl::ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2)
         UTF8_to_UCS2((UINT8*)endDate, (UINT16*)idCerInfoEx2.endDate.data);
         idCerInfoEx2.endDate.dwSize = strlen(idCerInfoEx2.endDate.data);
 
-        char nation[1024]; memset(nation, 0, 1024);
-        std::strcpy(nation, idCerRet.nation.data.c_str());
-        UTF8_to_UCS2((UINT8*)nation, (UINT16*)idCerInfoEx2.nation.data);
-        idCerInfoEx2.nation.dwSize = strlen(idCerInfoEx2.nation.data);
+        char photoPath[1024]; memset(photoPath, 0, 1024);
+        std::strcpy(photoPath, idCerRet.photoPath.data.c_str());
+        UTF8_to_UCS2((UINT8*)photoPath, (UINT16*)idCerInfoEx2.photoPath.data);
+        idCerInfoEx2.photoPath.dwSize = strlen(idCerInfoEx2.photoPath.data);
+
+        char newAddress[1024]; memset(newAddress, 0, 1024);
+        std::strcpy(newAddress, idCerRet.newAddress.data.c_str());
+        UTF8_to_UCS2((UINT8*)newAddress, (UINT16*)idCerInfoEx2.newAddress.data);
+        idCerInfoEx2.newAddress.dwSize = strlen(idCerInfoEx2.newAddress.data);
+
+        char englishname[1024]; memset(englishname, 0, 1024);
+        std::strcpy(englishname, idCerRet.englishName.data.c_str());
+        UTF8_to_UCS2((UINT8*)englishname, (UINT16*)idCerInfoEx2.englishName.data);
+        idCerInfoEx2.englishName.dwSize = strlen(idCerInfoEx2.englishName.data);
 
         char nationality[1024]; memset(nationality, 0, 1024);
         std::strcpy(nationality, idCerRet.nationality.data.c_str());
         UTF8_to_UCS2((UINT8*)nationality, (UINT16*)idCerInfoEx2.nationality.data);
         idCerInfoEx2.nationality.dwSize = strlen(idCerInfoEx2.nationality.data);
 
+        char idVersion[1024]; memset(idVersion, 0, 1024);
+        std::strcpy(idVersion, idCerRet.idVersion.data.c_str());
+        UTF8_to_UCS2((UINT8*)idVersion, (UINT16*)idCerInfoEx2.idVersion.data);
+        idCerInfoEx2.idVersion.dwSize = strlen(idCerInfoEx2.idVersion.data);
+
         char idType[1024]; memset(idType, 0, 1024);
         std::strcpy(idType, idCerRet.idType.data.c_str());
         UTF8_to_UCS2((UINT8*)idType, (UINT16*)idCerInfoEx2.idType.data);
         idCerInfoEx2.idType.dwSize = strlen(idCerInfoEx2.idType.data);
 
-        char othercode[1024]; memset(othercode, 0, 1024);
-        std::strcpy(othercode, idCerRet.reserved2.data.c_str());
-        UTF8_to_UCS2((UINT8*)othercode, (UINT16*)idCerInfoEx2.reserved2.data);
-        idCerInfoEx2.reserved2.dwSize = strlen(idCerInfoEx2.reserved2.data);
-
         char reserved[1024]; memset(reserved, 0, 1024);
         std::strcpy(reserved, idCerRet.reserved.data.c_str());
         UTF8_to_UCS2((UINT8*)reserved, (UINT16*)idCerInfoEx2.reserved.data);
         idCerInfoEx2.reserved.dwSize = strlen(idCerInfoEx2.reserved.data);
-    }
-    else
-    {
-        LOG4VTM(INFO, "ret = 0, 请求失败");
-    }
 
+        char txzCode[1024]; memset(txzCode, 0, 1024);
+        std::strcpy(txzCode, idCerRet.txzCode.data.c_str());
+        UTF8_to_UCS2((UINT8*)txzCode, (UINT16*)idCerInfoEx2.txzCode.data);
+        idCerInfoEx2.txzCode.dwSize = strlen(idCerInfoEx2.txzCode.data);
+
+        char issuedSN[1024]; memset(issuedSN, 0, 1024);
+        std::strcpy(issuedSN, idCerRet.issuedSN.data.c_str());
+        UTF8_to_UCS2((UINT8*)issuedSN, (UINT16*)idCerInfoEx2.issuedSN.data);
+        idCerInfoEx2.issuedSN.dwSize = strlen(idCerInfoEx2.issuedSN.data);
+
+        char reserved2[1024]; memset(reserved2, 0, 1024);
+        std::strcpy(reserved2, idCerRet.reserved2.data.c_str());
+        UTF8_to_UCS2((UINT8*)reserved2, (UINT16*)idCerInfoEx2.reserved2.data);
+        idCerInfoEx2.reserved2.dwSize = strlen(idCerInfoEx2.reserved2.data);
+
+        char reserved3[1024]; memset(reserved3, 0, 1024);
+        std::strcpy(reserved3, idCerRet.reserved3.data.c_str());
+        UTF8_to_UCS2((UINT8*)reserved3, (UINT16*)idCerInfoEx2.reserved3.data);
+        idCerInfoEx2.reserved3.dwSize = strlen(idCerInfoEx2.reserved3.data);
+
+        char reserved4[1024]; memset(reserved4, 0, 1024);
+        std::strcpy(reserved4, idCerRet.reserved4.data.c_str());
+        UTF8_to_UCS2((UINT8*)reserved4, (UINT16*)idCerInfoEx2.reserved4.data);
+        idCerInfoEx2.reserved4.dwSize = strlen(idCerInfoEx2.reserved4.data);
+
+        char reserved5[1024]; memset(reserved5, 0, 1024);
+        std::strcpy(reserved5, idCerRet.reserved5.data.c_str());
+        UTF8_to_UCS2((UINT8*)reserved5, (UINT16*)idCerInfoEx2.reserved5.data);
+        idCerInfoEx2.reserved5.dwSize = strlen(idCerInfoEx2.reserved5.data);
+    }
     return resFlag;
 }
 
 IDCerClassImpl::IDCerClassImpl()
-    :m_mode(0)
 {
-    lastErrMsg = "";
+
 }
 
 IDCerClassImpl::~IDCerClassImpl()
@@ -248,7 +288,10 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
 
     ErrorCodeEnum err = Error_Succeed;
     SimulatorDevCategoryAns ans;
+
     err = SimulatorHttpFunction("IDCertificate", "GetDevCategory", ans);
+    LOG4VTM(INFO, "GetDevCategory err = " << err);
+
     strcpy(devCategory.szType, ans.szType.c_str());
     strcpy(devCategory.szModel, ans.szModel.c_str());
     strcpy(devCategory.szVendor, ans.szVendor.c_str());
@@ -264,7 +307,11 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
 ErrorCodeEnum IDCerClassImpl::Reset()
 {
     ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
+    SimulatorCommonAns ans;
+
+    err = SimulatorHttpFunction("IDCertificate", "Reset", ans);
+    LOG4VTM(INFO, "Reset err = " << err);
+
     return err;
 }
 
@@ -272,7 +319,9 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
 {
     ErrorCodeEnum err = Error_Succeed;
     SimulatorCommonAns ans;
+
     err = SimulatorHttpFunction("IDCertificate", "IDCerAuthenticate", ans);
+    LOG4VTM(INFO, "IDCerAuthenticate err = " << err);
 
     return err;
 }
@@ -280,16 +329,22 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
 ErrorCodeEnum IDCerClassImpl::ForceIDEject()
 {
     ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
+    SimulatorCommonAns ans;
+    
+    err = SimulatorHttpFunction("IDCertificate", "ForceIDEject", ans);
+    LOG4VTM(INFO, "ForceIDEject err = " << err);
+
     return err;
 }
 
 ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
 {
     ErrorCodeEnum err = Error_NotImpl;
-    m_mode = 0;
     SimulatorCommonAns ans;
+
     err = SimulatorHttpFunction("IDCertificate", "ScanIDAndSaveImage", ans);
+    LOG4VTM(INFO, "ScanIDAndSaveImage err = " << err);
+
     if (err == Error_Succeed)
     {
         bool flag1 = GenerateBmpFile("idfront.bmp");
@@ -306,10 +361,10 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
 ErrorCodeEnum IDCerClassImpl::QueryCardPos(int& pos)
 {
     ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
-
     SimulatorCommonAns ans;
+
     err = SimulatorHttpFunction("IDCertificate", "QueryCardPos", ans);
+    LOG4VTM(INFO, "QueryCardPos err = " << err);
 
     return err;
 }
@@ -317,29 +372,21 @@ ErrorCodeEnum IDCerClassImpl::QueryCardPos(int& pos)
 ErrorCodeEnum IDCerClassImpl::IDCerRFControl(bool bControl)
 {
     ErrorCodeEnum err = Error_Succeed;
-    m_mode = 0;
-
     SimulatorCommonAns ans;
+
     err = SimulatorHttpFunction("IDCertificate", "IDCerRFControl", ans);
+    LOG4VTM(INFO, "IDCerRFControl err = " << err);
 
     return err;
 }
 
 ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
 {
-    depCfgPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "cmbsz.ini";
-    LOG4VTM(INFO, "GetCurPath =" << depCfgPath);
-
-    bool ret = iniRead.ReadConfig(depCfgPath);
-    if (ret == false)
-    {
-        LOG4VTM(INFO, "dep ReadConfig is Error,cfg=" << depCfgPath);
-    }
-
     ErrorCodeEnum err = Error_Succeed;
-
     SimulatorCommonAns ans;
+
     err = SimulatorHttpFunction("IDCertificate", "DevOpen", ans);
+    LOG4VTM(INFO, "DevOpen err = " << err);
 
     return err;
 }
@@ -347,6 +394,11 @@ ErrorCodeEnum IDCerClassImpl::DevOpen(DWORD dwPort)
 ErrorCodeEnum IDCerClassImpl::DevClose()
 {
     ErrorCodeEnum err = Error_Succeed;
+    SimulatorCommonAns ans;
+
+    err = SimulatorHttpFunction("IDCertificate", "DevClose", ans);
+    LOG4VTM(INFO, "DevClose err = " << err);
+    
     return err;
 }
 
@@ -355,7 +407,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo& idCerInfo)
     ErrorCodeEnum err = Error_Succeed;
     memset(&idCerInfo, 0, sizeof(IDCerInfo));
 
-
     strcpy(idCerInfo.startDate.data, "2009.03.25");
     idCerInfo.startDate.dwSize = strlen("2009.03.25");
 
@@ -370,7 +421,6 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx& idCerInfoEx)
     ErrorCodeEnum err = Error_Succeed;
     memset(&idCerInfoEx, 0, sizeof(IDCerInfo));
 
-
     strcpy(idCerInfoEx.startDate.data, "2009.03.25");
     idCerInfoEx.startDate.dwSize = strlen("2009.03.25");
 
@@ -384,33 +434,30 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx2(IDCerInfoEx2& idCerInfoEx2)
 {
     ErrorCodeEnum err = Error_Succeed;
     memset(&idCerInfoEx2, 0, sizeof(IDCerInfoEx2));
-
     err = ex2HttpFunction(idCerInfoEx2);
-    if (err != Error_Succeed)
-    {
-        lastErrMsg = "{\"Description\": \"获取身份证芯片数据失败\"}";
-        return err;
-    }
-
     bool flag = GenerateBmpFile("zp.bmp");
     if (!flag)
     {
         err = Error_Bug;
     }
 
+    LOG4VTM(INFO, "IDCerGetDataEx2 err = " << err);
     return err;
 }
 
 
 ErrorCodeEnum IDCerClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
 {
-    static int times = 0;
-    char szMessage[128];
-    sprintf(szMessage, "这是第 %d 条错误信息", ++times);
+    ErrorCodeEnum err = Error_Succeed;
+    SimulatorDevErrInfoAns ans;
 
-    strcpy(devErrInfo.szErrMsg, szMessage);
-    devErrInfo.dwErrMsgLen = strlen(szMessage);
-    return Error_Succeed;
+    err = SimulatorHttpFunction("IDCertificate", "GetLastErr", ans);
+    LOG4VTM(INFO, "GetLastErr err = " << err);
+
+    devErrInfo.dwErrMsgLen = ans.dwErrMsgLen;
+    strcpy(devErrInfo.szErrMsg, ans.szErrMsg.c_str());
+
+    return err;
 }
 
 #ifdef _MSC_VER

+ 1 - 5
DevAdapter/simulator/idcer.1.1/idcer_impl.h

@@ -31,12 +31,8 @@ public:
     ErrorCodeEnum ScanIDAndSaveImage();
     ErrorCodeEnum QueryCardPos(int &pos);
 
-    int m_mode;
+    ///////身份证数据格式转换函数////////
     ErrorCodeEnum ex2HttpFunction(IDCerInfoEx2& idCerInfoEx2);
-
-    string depCfgPath;
-    iniReader iniRead;
-    string lastErrMsg;
 };