public TravelAgency.Model.VisaInfo_Tmp RecogoInfo(string picPath, bool showDlgWhenSuccess = true) { //直接返回 if (!_kernelLoaded) { MessageBoxEx.Show("Please successful loading recognition engine"); return(null); } int nRet = 0; int nCardType = 13; if (nCardType <= 0) { MessageBoxEx.Show("Invalid CardSizeType,please re-enter a valid."); return(null); } int[] nSubID = new int[1]; nSubID[0] = 0; nRet = IDCardDll.SetIDCardID(nCardType, nSubID, 1); int ncardType = 0; nRet = IDCardDll.ClassifyIDCard(ref ncardType); //get param //int nDG = 2 + 4 + 8 + 16; //DG1234 //int nSaveImage = 1 + 2 + 4 + 8 + 16; //bool bVIZ = true; //ncardType = 1; if (ncardType == 1) { nRet = IDCardDll.RecogChipCard(nDG, bVIZ, nSaveImage); } if (ncardType == 2) { nRet = IDCardDll.RecogGeneralMRZCard(bVIZ, nSaveImage); } if (ncardType == 3) { nRet = IDCardDll.RecogCommonCard(nSaveImage); } StringBuilder sb = new StringBuilder(); if (nRet < 0) { sb.Append("Return value:"); sb.Append(nRet.ToString()); sb.Append("\r\n"); sb.Append("recognition failure"); MessageBoxEx.Show(sb.ToString()); return(null); } int MAX_CH_NUM = 128; char[] cArrFieldValue = new char[MAX_CH_NUM]; char[] cArrFieldName = new char[MAX_CH_NUM]; if (showDlgWhenSuccess) { MessageBoxEx.Show("recognition successful\r\n"); } //返回的model TravelAgency.Model.VisaInfo_Tmp visaInfo = new VisaInfo_Tmp(); sb.Clear(); //string info = ""; for (int i = 1; ; i++) { nRet = IDCardDll.GetRecogResult(i, cArrFieldValue, ref MAX_CH_NUM); if (nRet == 3) { break; } IDCardDll.GetFieldName(i, cArrFieldName, ref MAX_CH_NUM); //对返回的model进行修改 string strFiledValue = new string(cArrFieldValue); strFiledValue = strFiledValue.Substring(0, strFiledValue.IndexOf('\0')); string strFiledName = new string(cArrFieldName); strFiledName = strFiledName.Substring(0, strFiledName.IndexOf('\0')); sb.Append(strFiledName); sb.Append(":"); sb.Append(strFiledValue); sb.Append("\n"); } string[] infos = sb.ToString().Split('\n'); try { visaInfo.Name = infos[1].Split(':')[1]; visaInfo.EnglishName = infos[2].Split(':')[1]; visaInfo.Sex = infos[3].Split(':')[1]; visaInfo.Birthday = DateTime.Parse(infos[4].Split(':')[1]); visaInfo.PassportNo = infos[0].Split(':')[1]; visaInfo.LicenceTime = DateTime.Parse(infos[15].Split(':')[1]); visaInfo.Birthplace = infos[13].Split(':')[1]; visaInfo.IssuePlace = infos[14].Split(':')[1]; visaInfo.ExpiryDate = DateTime.Parse(infos[5].Split(':')[1]); } catch (Exception) { MessageBoxEx.Show("解析信息出现错误,请放好签证后重新进行识别!"); return(null); } //save Image String strImgPath = picPath + "\\" + visaInfo.PassportNo + ".jpg"; char[] carrImgPath = strImgPath.ToCharArray(); nRet = IDCardDll.SaveImageEx(carrImgPath, nSaveImage); if (nRet != 0) { MessageBoxEx.Show("SaveImage Failed!"); return(null); } return(visaInfo); }
public TravelAgency.Model.VisaInfo_Tmp AutoClassAndRecognize(string picPath, bool showDlgWhenSuccess = true) { if (!_kernelLoaded) { return(null); } int nRet = IDCardDll.GetGrabSignalType(); if (nRet == 1) { int[] nSubID = new int[1]; nSubID[0] = 0; IDCardDll.SetIDCardID(2, nSubID, 1); IDCardDll.AddIDCardID(3, nSubID, 1); IDCardDll.AddIDCardID(4, nSubID, 1); IDCardDll.AddIDCardID(5, nSubID, 1); IDCardDll.AddIDCardID(6, nSubID, 1); IDCardDll.AddIDCardID(7, nSubID, 1); IDCardDll.AddIDCardID(9, nSubID, 1); IDCardDll.AddIDCardID(10, nSubID, 1); IDCardDll.AddIDCardID(11, nSubID, 1); IDCardDll.AddIDCardID(12, nSubID, 1); IDCardDll.AddIDCardID(13, nSubID, 1); IDCardDll.AddIDCardID(14, nSubID, 1); IDCardDll.AddIDCardID(15, nSubID, 1); IDCardDll.AddIDCardID(16, nSubID, 1); IDCardDll.AddIDCardID(22, nSubID, 1); IDCardDll.AddIDCardID(25, nSubID, 1); IDCardDll.AddIDCardID(26, nSubID, 1); int nCardType = 0; nRet = IDCardDll.ClassifyIDCard(ref nCardType); StringBuilder sb = new StringBuilder(); if (nRet <= 0) { MessageBoxEx.Show("Return Value:" + nRet.ToString() + "\r\n" + "Classify failed"); return(null); } //get param int nDG = 0; if (nCardType == 1) { nRet = IDCardDll.RecogChipCard(nDG, bVIZ, nSaveImage); } if (nCardType == 2) { nRet = IDCardDll.RecogGeneralMRZCard(bVIZ, nSaveImage); } if (nCardType == 3) { nRet = IDCardDll.RecogCommonCard(nSaveImage); } if (nRet < 0) { MessageBoxEx.Show("Return Value:" + nRet.ToString() + "\r\n" + "recognition failure"); return(null); } int MAX_CH_NUM = 128; char[] cArrFieldValue = new char[MAX_CH_NUM]; char[] cArrFieldName = new char[MAX_CH_NUM]; if (showDlgWhenSuccess) { MessageBoxEx.Show("recognition Success\r\n"); } TravelAgency.Model.VisaInfo_Tmp visaInfo = new TravelAgency.Model.VisaInfo_Tmp(); sb.Clear(); for (int i = 1; ; i++) { nRet = IDCardDll.GetRecogResult(i, cArrFieldValue, ref MAX_CH_NUM); if (nRet == 3) { break; } IDCardDll.GetFieldName(i, cArrFieldName, ref MAX_CH_NUM); string strFiledValue = new string(cArrFieldValue); strFiledValue = strFiledValue.Substring(0, strFiledValue.IndexOf('\0')); string strFiledName = new string(cArrFieldName); strFiledName = strFiledName.Substring(0, strFiledName.IndexOf('\0')); sb.Append(strFiledName); sb.Append(":"); sb.Append(strFiledValue); sb.Append("\n"); } Console.WriteLine(sb.ToString()); string[] infos = sb.ToString().Split('\n'); try { visaInfo.Name = infos[1].Split(':')[1]; visaInfo.EnglishName = infos[2].Split(':')[1]; visaInfo.Sex = infos[3].Split(':')[1]; visaInfo.Birthday = DateTime.Parse(infos[4].Split(':')[1]); visaInfo.PassportNo = infos[0].Split(':')[1]; visaInfo.LicenceTime = DateTime.Parse(infos[15].Split(':')[1]); visaInfo.Birthplace = infos[13].Split(':')[1]; visaInfo.IssuePlace = infos[14].Split(':')[1]; visaInfo.ExpiryDate = DateTime.Parse(infos[5].Split(':')[1]); } catch (Exception) { MessageBoxEx.Show("解析信息出现错误,请放好签证后重新进行识别!"); return(null); } #region DGINFO //show DG info //int MAX_DG_NUM = 512; //Byte[] szDGBuffer = new Byte[MAX_DG_NUM]; //int nBuffLen = MAX_DG_NUM * sizeof(Byte); ////textBoxDG.Clear(); //ArrayList myArr = new ArrayList(); //if (nCardType == 1) //{ // int nIndex = 0; // foreach (Control c in groupBox4.Controls) // { // if (c is CheckBox) // { // CheckBox cb = (CheckBox)c; // if (cb.Checked) // { // nIndex = int.Parse(cb.Tag.ToString()); // if (nIndex >= 0 && nIndex <= 17) // { // myArr.Add(nIndex); // } // } // } // } // for (int i = myArr.Count; i > 0; i--) // { // int nResu = IDCardDll.GetDataGroupContent((int)myArr[i - 1], false, szDGBuffer, ref MAX_DG_NUM); // //MessageBoxEx.Show(nResu.ToString()); // textBoxDG.Text += "DG" + myArr[i - 1].ToString(); // textBoxDG.Text += ":"; // textBoxDG.Text += System.Text.Encoding.UTF8.GetString(szDGBuffer); // textBoxDG.Text += "\r\n"; // } //} //else //{ // textBoxDG.Text = "no any DG info"; //} #endregion //SaveImage String strImgPath = picPath + "\\" + visaInfo.PassportNo + ".jpg"; char[] carrImgPath = strImgPath.ToCharArray(); nRet = IDCardDll.SaveImageEx(carrImgPath, nSaveImage); if (nRet != 0) { MessageBoxEx.Show("SaveImage Failed!"); return(null); } return(visaInfo); } return(null); }