StableVersion4.3/HL_FristAidPlatform_ReadCard/ReadIdCardHelper.cs

118 lines
5.3 KiB
C#
Raw Normal View History

2024-03-11 09:47:34 +08:00
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);
/// <summary>
/// 获取当前电脑的系统盘符
/// </summary>
private static string DiskCharacter = Environment.GetEnvironmentVariable("systemdrive");
/// <summary>
/// 系统配置文件总路径
/// 在登录界面打开时判断是否存在,不存在则创建
/// </summary>
private static string SystemProfilePath = DiskCharacter + @"\App\急危重症区域信息管理平台\";
/// <summary>
/// 图片路径
/// </summary>
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;
}
}
}