using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Ports; namespace ShenTun.IcCard.Test { public partial class Form2 : Form { [DllImport("termb.dll")] static extern int InitComm(int port);//连接身份证阅读器 [DllImport("termb.dll")] static extern int InitCommExt();//自动搜索身份证阅读器并连接身份证阅读器 [DllImport("termb.dll")] static extern int CloseComm();//断开与身份证阅读器连接 [DllImport("termb.dll")] static extern int Authenticate();//判断是否有放卡,且是否身份证 [DllImport("termb.dll")] public static extern int Read_Content(int index);//读卡操作,信息文件存储在dll所在下 [DllImport("termb.dll")] public static extern int ReadContent(int index);//读卡操作,信息文件存储在dll所在下 [DllImport("termb.dll")] static extern int GetSAMID(StringBuilder SAMID);//获取SAM模块编号 [DllImport("termb.dll")] static extern int GetSAMIDEx(StringBuilder SAMID);//获取SAM模块编号(10位编号) [DllImport("termb.dll")] static extern int GetBmpPhoto(string PhotoPath);//解析身份证照片 [DllImport("termb.dll")] static extern int GetBmpPhotoToMem(byte[] imageData, int cbImageData);//解析身份证照片 [DllImport("termb.dll")] static extern int GetBmpPhotoExt();//解析身份证照片 [DllImport("termb.dll")] static extern int Reset_SAM();//重置Sam模块 [DllImport("termb.dll")] static extern int GetSAMStatus();//获取SAM模块状态 [DllImport("termb.dll")] static extern int GetCardInfo(int index, StringBuilder value);//解析身份证信息 [DllImport("termb.dll")] static extern int ExportCardImageV();//生成竖版身份证正反两面图片(输出目录:dll所在目录的cardv.jpg和SetCardJPGPathNameV指定路径) [DllImport("termb.dll")] static extern int ExportCardImageH();//生成横版身份证正反两面图片(输出目录:dll所在目录的cardh.jpg和SetCardJPGPathNameH指定路径) [DllImport("termb.dll")] static extern int SetTempDir(string DirPath);//设置生成文件临时目录 [DllImport("termb.dll")] static extern int GetTempDir(StringBuilder path, int cbPath);//获取文件生成临时目录 [DllImport("termb.dll")] static extern void GetPhotoJPGPathName(StringBuilder path, int cbPath);//获取jpg头像全路径名 [DllImport("termb.dll")] static extern int SetPhotoJPGPathName(string path);//设置jpg头像全路径名 [DllImport("termb.dll")] static extern int SetCardJPGPathNameV(string path);//设置竖版身份证正反两面图片全路径 [DllImport("termb.dll")] static extern int GetCardJPGPathNameV(StringBuilder path, int cbPath);//获取竖版身份证正反两面图片全路径 [DllImport("termb.dll")] static extern int SetCardJPGPathNameH(string path);//设置横版身份证正反两面图片全路径 [DllImport("termb.dll")] static extern int GetCardJPGPathNameH(StringBuilder path, int cbPath);//获取横版身份证正反两面图片全路径 [DllImport("termb.dll")] static extern int GetPeopleName(StringBuilder data, int cbData);//获取姓名 [DllImport("termb.dll")] static extern int GetPeopleSex(StringBuilder data, int cbData);//获取性别 [DllImport("termb.dll")] static extern int GetPeopleNation(StringBuilder data, int cbData);//获取民族 [DllImport("termb.dll")] static extern int GetPeopleBirthday(StringBuilder data, int cbData);//获取生日(YYYYMMDD) [DllImport("termb.dll")] static extern int GetPeopleAddress(StringBuilder data, int cbData);//获取地址 [DllImport("termb.dll")] static extern int GetPeopleIDCode(StringBuilder data, int cbData);//获取身份证号 [DllImport("termb.dll")] static extern int GetDepartment(StringBuilder data, int cbData);//获取签发机关 [DllImport("termb.dll")] static extern int GetStartDate(StringBuilder data, int cbData);//获取有效期起始日期(YYYYMMDD) [DllImport("termb.dll")] static extern int GetEndDate(StringBuilder data, int cbData);//获取有效期截止日期(YYYYMMDD) [DllImport("termb.dll")] static extern int getBMPPhotoBase64(StringBuilder data, int cbData);//获取BMP头像Base64编码 [DllImport("termb.dll")] static extern int getJPGPhotoBase64(StringBuilder data, int cbData);//获取JPG头像Base64编码 [DllImport("termb.dll")] static extern int getJPGCardBase64V(StringBuilder data, int cbData);//获取竖版身份证正反两面JPG图像base64编码字符串 [DllImport("termb.dll")] static extern int getJPGCardBase64H(StringBuilder data, int cbData);//获取横版身份证正反两面JPG图像base64编码字符串 [DllImport("termb.dll")] static extern int HIDVoice(int nVoice);//语音提示。。仅适用于与带HID语音设备的身份证阅读器(如ID200) [DllImport("termb.dll")] static extern int IC_SetDevNum(int iPort, StringBuilder data, int cbdata);//设置发卡器序列号 [DllImport("termb.dll")] static extern int IC_GetDevNum(int iPort, StringBuilder data, int cbdata);//获取发卡器序列号 [DllImport("termb.dll")] static extern int IC_GetDevVersion(int iPort, StringBuilder data, int cbdata);//设置发卡器序列号 [DllImport("termb.dll")] static extern int IC_WriteData(int iPort, int keyMode, int sector, int idx, StringBuilder key, StringBuilder data, int cbdata, ref uint snr);//写数据 [DllImport("termb.dll")] static extern int IC_ReadData(int iPort, int keyMode, int sector, int idx, StringBuilder key, StringBuilder data, int cbdata, ref uint snr);//du数据 [DllImport("termb.dll")] static extern int IC_GetICSnr(int iPort, ref uint snr);//读IC卡物理卡号 [DllImport("termb.dll")] static extern int IC_GetIDSnr(int iPort, StringBuilder data, int cbdata);//读身份证物理卡号 [DllImport("termb.dll")] static extern int getEnName(StringBuilder data, int cbdata);//获取英文名 [DllImport("termb.dll")] static extern int getCnName(StringBuilder data, int cbdata);//获取中文名 [DllImport("termb.dll")] static extern int getPassNum(StringBuilder data, int cbdata);//获取港澳台居通行证号码 [DllImport("termb.dll")] static extern int getVisaTimes();//获取签发次数 [DllImport("termb.dll")] static extern int IC_ChangeSectorKey(int iPort, int keyMode, int nSector, StringBuilder oldKey, StringBuilder newKey); [DllImport("termb.DLL", CallingConvention = CallingConvention.StdCall)] public static extern int GetPhotoBMP(StringBuilder data, int iLen); private int cbDataSize = 100; public Form2() { InitializeComponent(); for (int i = 0; i < 16; i++) { comboBox_Key.Items.Add("" + i); } for (int i = 0; i < 3; i++) { comboBox_Clock.Items.Add("" + i); } string[] sAllPort = null; try { sAllPort = SerialPort.GetPortNames(); int nPortNu = sAllPort.Length; for (int i = 0; i < nPortNu; i++) { int nPort = Convert.ToInt32(sAllPort[i].Substring(sAllPort[i].Length - 1, 1)); StringBuilder sb = new StringBuilder(cbDataSize); if (1 == IC_GetDevVersion(nPort, sb, cbDataSize)) { comboBox_Port.Items.Add(sAllPort[i]); } } } catch (Exception ex) { throw new Exception("获取计算机COM口列表失败!\r\n错误信息:" + ex.Message); } } private void Form2_Load(object sender, EventArgs e) { } int Port = 0; bool IsConnected = false; private void button1_Click(object sender, EventArgs e) { int AutoSearchReader = InitComm(1001); if (AutoSearchReader > 0) { Port = AutoSearchReader; IsConnected = true; textBox_Name.Text = AutoSearchReader.ToString(); StringBuilder sb = new StringBuilder(cbDataSize); //GetSAMID(sb); MessageBox.Show("连接身份证阅读器成功,SAM模块编号:" + sb); //button_Connect.Enabled = false; //button_ReadCard.Enabled = true; //button_DisConnect.Enabled = true; return; } else { MessageBox.Show("检查是否正确连接设备"); } } private void button2_Click(object sender, EventArgs e) { int FindCard = Authenticate();//FindCard>0 表示成功 /* if (FindCard != 1) { //ClearData(); return; } * */ //读卡 int rs = Read_Content(1); if (rs != 1 && rs != 2 && rs != 3) { //ClearData(); return; } StringBuilder sb = new StringBuilder(cbDataSize); GetPeopleName(sb, cbDataSize); textBox_Name.Text = sb.ToString(); //民族/国家 GetPeopleNation(sb, cbDataSize); textBox_NationOrCountry.Text = sb.ToString(); //性别 GetPeopleSex(sb, cbDataSize); textBox_Sex.Text = sb.ToString(); //出生 GetPeopleBirthday(sb, cbDataSize); textBox_BornDate.Text = sb.ToString(); // sb.ToString().Substring(0, 4) - sb.ToString().Substring(4, 2) - sb.ToString().Substring(6, 2); //地址 GetPeopleAddress(sb, cbDataSize); string ad = sb.ToString(); textBox_Address.Text = ad; //号码 GetPeopleIDCode(sb, cbDataSize); textBox_IDCardNum.Text = sb.ToString(); //机关 GetDepartment(sb, cbDataSize); textBox_Issue.Text = sb.ToString(); //有效期 GetStartDate(sb, cbDataSize); string aa = sb.ToString(); GetEndDate(sb, cbDataSize); textBox_ExpiredDate.Text = aa + sb.ToString(); /* //通行证号 getPassNum(sb, cbDataSize); textBox_PassNum.Text = sb.ToString(); //签证次数 textBox_VisaTimes.Text = "" + getVisaTimes(); //英文名 getEnName(sb, cbDataSize); textBox_EnName.Text = sb.ToString(); //中文名 getCnName(sb, cbDataSize); textBox_CnName.Text = sb.ToString(); * //证件类型 GetCardInfo(105, sb); if ("1" == sb.ToString()) { textBox_CardType.Text = "居民身份证"; } else if ("3" == sb.ToString()) { textBox_CardType.Text = "港澳台居住证"; } else { textBox_CardType.Text = "外国人居住证"; } * */ StringBuilder sb1 = new StringBuilder(cbDataSize); int cbPhoto = 256 * 1024; int nRet = GetPhotoBMP(sb1, cbPhoto); string photo = sb1.ToString(); } } }