using PTMedicalInsurance.CardReaders; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace PTMedicalInsurance.CardReaders { class SFZReader { private int iPort; private int currBaud = 0; public SFZReader() { } public int ReadSFZ(out string msg) { msg = ""; int iRes = 0; do { if (Find(out msg) != 0) { iRes = -1; break; } if (Read(out msg) != 0) { iRes = -1; break; } } while (false); return iRes; } private int Find(out string msg) { msg = ""; int nRet = ReadCardAPI.Syn_FindReader(); if (nRet == 0) { msg = "没有找到读卡器"; return -1; } else { iPort = nRet; if (iPort > 1000) { msg = "读卡器连接在USB端口 " + nRet + "," ; } else { Thread.Sleep(200); int nRet2 = ReadCardAPI.Syn_GetCOMBaud(nRet, ref currBaud); } return 0; } } private int Open(out string msg) { msg = ""; return 0; } private int Read(out string msg) { msg = ""; IDCardData idcardData = new IDCardData(); string path = Global.curEvt.path + "\\Photos"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } byte[] ctmp = System.Text.Encoding.Default.GetBytes(path); Global.writeLog(Global.curEvt.path + "\\Photos"); int nRet = ReadCardAPI.Syn_SetPhotoPath(2, ctmp); setupDataFormate(1); nRet = ReadCardAPI.Syn_OpenPort(iPort); if (nRet == 0) { DateTime startTime = DateTime.Now; nRet = ReadCardAPI.Syn_ReadMsg(iPort, 0, ref idcardData); int dTime = (int)(DateTime.Now - startTime).TotalMilliseconds; if (nRet == 0 || nRet == 1) //0读取身份证信息成功,1读取身份证信息成功,解码照片不成功,其他.读取身份证信息失败 { msg = idcardData.ToString(); } else { msg = "读取身份证信息错误," + dTime + "ms"; return -1; } } else { msg = "打开端口错误"; return -1; } if (iPort > 0) { ReadCardAPI.Syn_ClosePort(iPort); } return 0; } /// /// 设置读取到数据的格式 /// /// 具体参见API说明 static void setupDataFormate(int translateType) { ReadCardAPI.Syn_SetPhotoName(2); ReadCardAPI.Syn_SetNationType(translateType); ReadCardAPI.Syn_SetSexType(translateType); ReadCardAPI.Syn_SetBornType(translateType); ReadCardAPI.Syn_SetUserLifeBType(translateType); ReadCardAPI.Syn_SetUserLifeEType(translateType, 0); } } }