using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace HL_FristAidPlatform_ReadCard { public class ReadIdCardHelper { #region DllImport [DllImport("sdtapi.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)] private static extern int InitComm(int iPort);//初始化 [DllImport("sdtapi.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)] private static extern int CloseComm();//关闭端口 [DllImport("sdtapi.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)] private static extern int Authenticate();//卡认证 [DllImport("sdtapi.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)] private static extern int ReadBaseInfos([MarshalAs(UnmanagedType.LPStr)] StringBuilder Name, [MarshalAs(UnmanagedType.LPStr)] StringBuilder Gender, [MarshalAs(UnmanagedType.LPStr)] StringBuilder Folk, [MarshalAs(UnmanagedType.LPStr)] StringBuilder BirthDay, [MarshalAs(UnmanagedType.LPStr)] StringBuilder Code, [MarshalAs(UnmanagedType.LPStr)] StringBuilder Address, [MarshalAs(UnmanagedType.LPStr)] StringBuilder Agency, [MarshalAs(UnmanagedType.LPStr)] StringBuilder ExpireStart, [MarshalAs(UnmanagedType.LPStr)] StringBuilder ExpireEnd); [DllImport("sdtapi.dll")]//读取数据,推荐使用 private static extern int Routon_BeepLED(bool BeepON, bool LEDON, int duration); /// /// 获取当前电脑的系统盘符 /// private static string DiskCharacter = Environment.GetEnvironmentVariable("systemdrive"); /// /// 系统配置文件总路径 /// 在登录界面打开时判断是否存在,不存在则创建 /// private static string SystemProfilePath = DiskCharacter + @"\App\急危重症区域信息管理平台\"; /// /// 图片路径 /// private static string _imageDirPath = SystemProfilePath + "CardImg"; #endregion static public int readCard(ref IDCardData idCardMessage) { if (!Directory.Exists(_imageDirPath)) { Directory.CreateDirectory(_imageDirPath); } StringBuilder Name = new StringBuilder(31); // 姓名 StringBuilder Gender = new StringBuilder(3); // 性别 StringBuilder Folk = new StringBuilder(10); // 民族 StringBuilder BirthDay = new StringBuilder(9); // 生日 StringBuilder Code = new StringBuilder(19); // 证件号 StringBuilder Address = new StringBuilder(71); // 家庭地址 StringBuilder Agency = new StringBuilder(31); // 签发机关 StringBuilder ExpireStart = new StringBuilder(9); // 有效期起始日期 StringBuilder ExpireEnd = new StringBuilder(9); // 有效期截止日期 //打开端口 int intOpenRet = InitComm(1001); if (intOpenRet != 1) { Console.WriteLine("阅读机具未连接"); Routon_BeepLED(false, false, 2000); return 1; } //卡认证 int intReadRet = Authenticate(); if (intReadRet != 1) { Console.WriteLine("卡认证失败"); Routon_BeepLED(false, false, 2000); CloseComm(); return 2; } //读卡 int intReadBaseInfosRet = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd); if (intReadBaseInfosRet != 1) { Console.WriteLine("读卡失败"); Routon_BeepLED(false, false, 2000); CloseComm(); return 3; } idCardMessage = new IDCardData(); idCardMessage.IDCardNo = Code.ToString().Trim(); idCardMessage.Name = Name.ToString().Trim(); idCardMessage.Sex = Gender.ToString().Trim(); idCardMessage.Nation = Folk.ToString().Trim(); idCardMessage.Born = BirthDay.ToString().Substring(0, 4) + "/" + BirthDay.ToString().Substring(4, 2) + "/" + BirthDay.ToString().Substring(6, 2); idCardMessage.Address = Address.ToString().Trim(); idCardMessage.GrantDept = Agency.ToString().Trim(); idCardMessage.UserLifeBegin = ExpireStart.ToString().Trim(); idCardMessage.UserLifeEnd = ExpireEnd.ToString().Trim(); Image img = Image.FromFile(Directory.GetCurrentDirectory() + "\\photo.bmp"); Image bmp = new Bitmap(img); img.Dispose(); idCardMessage.image = bmp; File.Delete(Directory.GetCurrentDirectory() + "\\photo.bmp"); Routon_BeepLED(true, true, 2000); CloseComm(); return 0; } } }