public void Clear() { this.lbl_Address.Text = this.lbl_Agency.Text = this.lbl_Birthday.Text = this.lbl_Code.Text = this.lbl_ExpireEnd.Text = this.lbl_ExpireStart.Text = this.lbl_Folk.Text = this.lbl_Gender.Text = this.lbl_Names.Text = ""; this.lbl_msg.Text = ""; this.pictureBox1.Image = null; objEDZ = null; }
/// <summary> /// 读取卡信息 /// </summary> public void ReadCardInfo() { try { //打开端口 bool bUsbPort = false; int intOpenPortRtn = 0; int rtnTemp = 0; int pucIIN = 0; int pucSN = 0; int puiCHMsgLen = 0; int puiPHMsgLen = 0; if (EdziPortID == -1) { //检测usb口的机具连接,必须先检测usb for (int iPort = 1001; iPort <= 1016; iPort++) { intOpenPortRtn = SDT_OpenPort(iPort); if (intOpenPortRtn == 144) { EdziPortID = iPort; bUsbPort = true; break; } } //检测串口的机具连接 if (!bUsbPort) { for (int iPort = 1; iPort <= 2; iPort++) { intOpenPortRtn = SDT_OpenPort(iPort); if (intOpenPortRtn == 144) { EdziPortID = iPort; bUsbPort = false; break; } } } } else { intOpenPortRtn = SDT_OpenPort(EdziPortID); } if (intOpenPortRtn != 144) { EdziPortID = -1; SetText("端口打开失败,重新连接读卡器或者查看是否打开多个读卡器页面!", lbl_msg); return; } //else //{ // SetText("请将身份证放入读卡器中...", lbl_msg); //} //在这里,如果您想下一次不用再耗费检查端口的检查的过程,您可以把 EdziPortID 保存下来,可以保存在注册表中,也可以保存在配置文件中,我就不多写了,但是, //您要考虑机具连接端口被用户改变的情况哦 //卡认证 rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen); if (rtnTemp != 159) { rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen); //再找卡 if (rtnTemp != 159) { //未找到身份证 rtnTemp = SDT_ClosePort(EdziPortID); return; } } //读卡 rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen); if (rtnTemp != 144) { rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen); //再选卡 if (rtnTemp != 144) { rtnTemp = SDT_ClosePort(EdziPortID); SetText("读卡失败!", lbl_msg); return; } } FileInfo objFile = new FileInfo(wztxtPath); if (objFile.Exists) { objFile.Attributes = FileAttributes.Normal; objFile.Delete(); } objFile = new FileInfo(zpbmpPath); if (objFile.Exists) { objFile.Attributes = FileAttributes.Normal; objFile.Delete(); } objFile = new FileInfo(zpwltPath); if (objFile.Exists) { objFile.Attributes = FileAttributes.Normal; objFile.Delete(); } rtnTemp = SDT_ReadBaseMsgToFile(EdziPortID, wztxtPath, ref puiCHMsgLen, zpwltPath, ref puiPHMsgLen, EdziIfOpen); if (rtnTemp != 144) { rtnTemp = SDT_ClosePort(EdziPortID); SetText("读卡失败!", lbl_msg); return; } //下面解析照片,注意,如果在C盘根目录下没有机具厂商的授权文件Termb.Lic,照片解析将会失败 if (bUsbPort) { rtnTemp = GetBmp(zpwltPath, 2); } else { rtnTemp = GetBmp(zpwltPath, 1); } switch (rtnTemp) { case 0: SetText("调用sdtapi.dll错误!", lbl_msg); break; case 1: //正常 break; case -1: SetText("相片解码错误!", lbl_msg); break; case -2: SetText("wlt文件后缀错误!", lbl_msg); break; case -3: SetText("wlt文件打开错误!", lbl_msg); break; case -4: SetText("wlt文件格式错误!", lbl_msg); break; case -5: SetText("软件未授权!", lbl_msg); break; case -6: SetText("设备连接错误!", lbl_msg); break; } rtnTemp = SDT_ClosePort(EdziPortID); FileInfo f = new FileInfo(wztxtPath); FileStream fs = f.OpenRead(); byte[] bt = new byte[fs.Length]; fs.Read(bt, 0, (int)fs.Length); fs.Close(); File.Delete(wztxtPath); string str = System.Text.UnicodeEncoding.Unicode.GetString(bt); objEDZ = new EDZ(); objEDZ.Name = System.Text.UnicodeEncoding.Unicode.GetString(bt, 0, 30).Trim(); objEDZ.Sex_Code = System.Text.UnicodeEncoding.Unicode.GetString(bt, 30, 2).Trim(); objEDZ.NATION_Code = System.Text.UnicodeEncoding.Unicode.GetString(bt, 32, 4).Trim(); string strBird = System.Text.UnicodeEncoding.Unicode.GetString(bt, 36, 16).Trim(); objEDZ.BIRTH = Convert.ToDateTime(strBird.Substring(0, 4) + "年" + strBird.Substring(4, 2) + "月" + strBird.Substring(6) + "日"); objEDZ.ADDRESS = System.Text.UnicodeEncoding.Unicode.GetString(bt, 52, 70).Trim(); objEDZ.IDC = System.Text.UnicodeEncoding.Unicode.GetString(bt, 122, 36).Trim(); objEDZ.REGORG = System.Text.UnicodeEncoding.Unicode.GetString(bt, 158, 30).Trim(); string strTem = System.Text.UnicodeEncoding.Unicode.GetString(bt, 188, bt.GetLength(0) - 188).Trim(); objEDZ.STARTDATE = Convert.ToDateTime(strTem.Substring(0, 4) + "年" + strTem.Substring(4, 2) + "月" + strTem.Substring(6, 2) + "日"); strTem = strTem.Substring(8); if (strTem.Trim() != "长期") { objEDZ.ENDDATE = Convert.ToDateTime(strTem.Substring(0, 4) + "年" + strTem.Substring(4, 2) + "月" + strTem.Substring(6, 2) + "日"); } else { objEDZ.ENDDATE = DateTime.MaxValue; } objFile = new FileInfo(zpbmpPath); if (objFile.Exists) { FileStream fileStream = new FileStream(zpbmpPath, FileMode.Open, FileAccess.Read); int byteLength = (int)fileStream.Length; byte[] fileBytes = new byte[byteLength]; fileStream.Read(fileBytes, 0, byteLength); fileStream.Close(); objEDZ.PIC_Image = Image.FromStream(new MemoryStream(fileBytes)); objEDZ.PIC_Byte = fileBytes; File.Delete(zpbmpPath); } if (OnDataBind != null) { OnDataBind.BeginInvoke(objEDZ.Name.ToString(), objEDZ.Sex_CName.ToString(), objEDZ.NATION_CName.ToString(), objEDZ.BIRTH.ToString("yyyy年MM月dd日"), objEDZ.IDC.ToString(), objEDZ.ADDRESS.ToString(), objEDZ.REGORG.ToString(), objEDZ.STARTDATE.ToString("yyyy年MM月dd日"), objEDZ.ENDDATE == DateTime.MaxValue ? "长期" : objEDZ.ENDDATE.ToString("yyyy年MM月dd日"), Convert.ToBase64String(objEDZ.PIC_Byte), null, null); } if (owin != null && !string.IsNullOrEmpty(funcName)) { this.BeginInvoke(new MyInvoke(ShowData), objEDZ.Name.ToString(), objEDZ.Sex_CName.ToString(), objEDZ.NATION_CName.ToString(), objEDZ.BIRTH.ToString("yyyy年MM月dd日"), objEDZ.IDC.ToString(), objEDZ.ADDRESS.ToString(), objEDZ.REGORG.ToString(), objEDZ.STARTDATE.ToString("yyyy年MM月dd日"), objEDZ.ENDDATE == DateTime.MaxValue ? "长期" : objEDZ.ENDDATE.ToString("yyyy年MM月dd日"), Convert.ToBase64String(objEDZ.PIC_Byte)); } SetText("身份证读卡成功!" + DateTime.Now.ToString("(yyyy年MM月dd日 HH:mm:ss)"), this.lbl_msg); if (objEDZ.PIC_Image != null) { SetImage(objEDZ.PIC_Image, pictureBox1); } SetText(objEDZ.IDC.ToString().Trim(), this.lbl_Code); SetText(objEDZ.Name.ToString().Trim(), this.lbl_Names); SetText(objEDZ.Sex_CName.ToString().Trim(), this.lbl_Gender); SetText(objEDZ.NATION_CName.ToString().Trim(), this.lbl_Folk); SetText(objEDZ.BIRTH.ToString("yyyy年MM月dd日").Trim(), this.lbl_Birthday); SetText(objEDZ.ADDRESS.ToString().Trim(), this.lbl_Address); SetText(objEDZ.REGORG.ToString().Trim(), this.lbl_Agency); SetText(objEDZ.STARTDATE.ToString("yyyy年MM月dd日").Trim(), this.lbl_ExpireStart); SetText(objEDZ.ENDDATE == DateTime.MaxValue ? "长期" : objEDZ.ENDDATE.ToString("yyyy年MM月dd日"), this.lbl_ExpireEnd); //ShowData(objEDZ.Name.ToString() + "," + objEDZ.Sex_CName.ToString() + "," + objEDZ.NATION_CName.ToString() + "," + //objEDZ.BIRTH.ToString("yyyy年MM月dd日") + "," + objEDZ.IDC.ToString() + "," + objEDZ.ADDRESS.ToString() + "," + //objEDZ.REGORG.ToString() + "," + objEDZ.STARTDATE.ToString("yyyy年MM月dd日") + "," + //(objEDZ.ENDDATE == DateTime.MaxValue ? "长期" : objEDZ.ENDDATE.ToString("yyyy年MM月dd日")) + "," + //Convert.ToBase64String(objEDZ.PIC_Byte) //); } catch (Exception exc) { MessageBox.Show(exc.Message); } }