| 
						 | 
						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();                   }    }}
  |