德卡T10读卡器 读取身份证号码和身份证UID

这个简单的测试项目,界面上有个timer控件,设计的是3秒执行一下读取身份证的动作,目前想到的是这种循环方式,德卡T10这个机子,身份证放上去,不会自动去执行读取的操作。

1.界面

2.界面的代码 Form1.cs 如下

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Text;
 7 using System.Windows.Forms;
 8 using System.IO;
 9 using System.Threading;
10 
11 namespace IDCard
12 {
13     public partial class Form1 : Form
14     {
15         public static string StrCardNo = "1";   //记录下的 上次有效的身份证号
16         public Form1()
17         {
18             InitializeComponent();
19         }
20 
21         private void timer1_Tick(object sender, EventArgs e)
22         {
23             textBox8.Focus();
24             PersonInfo person = new PersonInfo();
25             int result = IDCard.GetCardInfo.getCardInfo(ref person);
26             if (result < 0)//未读取到身份证
27             {
28                 return;
29             }
30             string strCardNoThis="";    //本次读取到的身份证号
31             if (person.IdNumber == null)
32             {
33                 strCardNoThis = "";
34             }
35             else
36             {
37                 strCardNoThis = person.IdNumber;
38                 //如果记录的上次的有效号和 本次的号 一样,处理掉 不用
39                 if (StrCardNo.Equals(strCardNoThis))
40                 {
41                     return;
42                 }
43                 else  //如果和之前的不一样,赋值为最新
44                 {
45                     StrCardNo = strCardNoThis;
46                     textBox8.Text = strCardNoThis;
47                 }
48             }
49 
50             //显示读取到的身份证UID
51             if (person.UID == null || person.UID.Equals(""))
52             {
53                 textBox1.Text = "未读取到身份证UID";
54             }
55             else
56             {
57                 textBox1.Text = person.UID;
58             }
59         }
60     }
61 }
View Code

3.读取身份证逻辑代码 GetCardInfo.cs 如下

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Drawing;

namespace IDCard
{
    public class GetCardInfo
    {
        #region 调用dll  dcrf32.dll放在bin/Debug文件夹下

        [DllImport("dcrf32.dll")]  
        private static extern int dc_init(Int16 port, int baud);  //初始化OK  
          
        [DllImport("dcrf32.dll")]  
        private static extern short dc_find_i_d(int icdev);// 查询身份证卡   
          
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_name(int idhandle);//身份证姓名 dc_i_d_query_sex  
  
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_sex(int idhandle);//性别  
          
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_nation(int idhandle);//民族  
          
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_birth(int idhandle);//出生年月  
          
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_address(int idhandle);//户籍地址  
          
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_id_number(int idhandle);//身份证号  


        [DllImport("dcrf32.dll")]
        private static extern short dc_get_idsnr_hex(int idhandle, [Out]byte[] data); //身份证的UID


        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_department(int idhandle);//签发机关       
          
        [DllImport("dcrf32.dll")]  
        private static extern IntPtr dc_i_d_query_expire_day(int idhandle);//有效期限  
          
        [DllImport("dcrf32.dll")]  
        private static extern short dc_i_d_query_photo_bmp_buffer(int idhandle,  byte[] BmpBuffer, ref ulong BmpLength);//照片  
                                                        //unsigned char *  BmpBuffer  

        [DllImport("dcrf32.dll")]  
        private static extern int dc_start_i_d(int icdev);//开始读身份证卡操作 如果=-1表示失败,否则为身份证卡信息标识符。   
          
        [DllImport("dcrf32.dll")]  
        private static extern void dc_end_i_d(int idhandle);//结束读取身份证  

        [DllImport("dcrf32.dll")]
        private static extern short dc_reset(int idhandle, short msec);//射频复位 

        [DllImport("dcrf32.dll")]
        private static extern short dc_beep(int icdev, short msec);//设备蜂鸣

        [DllImport("dcrf32.dll")]
        private static extern short dc_exit(int idhandle);//关闭设备的通讯和释放资源
        
        #endregion  

        /// <summary>读取身份信息</summary>  
        /// <param name="person"></param>  
        /// <param name="ImgPath">图片存储路径</param>  
        /// <returns></returns>  
        public static int getCardInfo(ref PersonInfo person)  
        {  
            try  
            {  
                int IcDev;//HANDLE icdev:通讯设备标识符  
                IntPtr Mydev;  
                int m_hId;//HANDLE idhandle:身份证卡信息标识符  
                IcDev = dc_init(100, 9600);//①打开设备dc_init   
                if (IcDev < 0)
                {
                    return -1;
                }
                dc_reset(IcDev, 10);//射频复位 dayu 0 
                int st = dc_find_i_d(IcDev);//②寻身份证 dc_find_i_d  若成功则为0;  
                m_hId = dc_start_i_d(IcDev);//③读身份证 dc_start_i_d
                if ((long)m_hId < 0)  
                {
                    dc_exit(180);     //⑦关闭设备dc_exit
                    return -1;
                }
                #region 获取身份证信息
                //Mydev = dc_i_d_query_name(m_hId);//姓名  
                //person.Name = Marshal.PtrToStringAnsi(Mydev);  
  
                //Mydev = dc_i_d_query_sex(m_hId);//性别  
                //person.Sex = Marshal.PtrToStringAnsi(Mydev);  
  
                //Mydev = dc_i_d_query_nation(m_hId);//民族  
                //person.Nation = Marshal.PtrToStringAnsi(Mydev);  
  
                //Mydev = dc_i_d_query_birth(m_hId);//出生日期  
                //person.Birth = Marshal.PtrToStringAnsi(Mydev);  
  
                //Mydev = dc_i_d_query_address(m_hId);//户籍地址  
                //person.Address = Marshal.PtrToStringAnsi(Mydev);  


                //Mydev = dc_i_d_query_department(m_hId);//签发机关  
                //person.IdDepartment = Marshal.PtrToStringAnsi(Mydev);

                //Mydev = dc_i_d_query_expire_day(m_hId);//有效期限  
                //person.ExpireDay = Marshal.PtrToStringAnsi(Mydev);  

                #endregion

                byte[] rbuff = new byte[16];
                short sT = dc_get_idsnr_hex(m_hId, rbuff);    //获取身份证UID
                person.UID = System.Text.Encoding.Default.GetString(rbuff);


                Mydev = dc_i_d_query_id_number(m_hId);//④获取身份证相应的信息 身份证号  
                person.IdNumber = Marshal.PtrToStringAnsi(Mydev);


                dc_beep(IcDev,10);  //蜂鸣声 提示声音
                dc_end_i_d(m_hId);  //⑥关闭身份证标识 dc_end_i_d
                dc_exit(IcDev);     //⑦关闭设备dc_exit
            }  
            catch (Exception ex)  
            {  
                //throw ex;  
                return -1;   
            }  
            return 1;  
        }

    }
}
View Code

4.身份证信息类 PersonInfo.cs 如下

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Drawing;

namespace IDCard
{
    public class PersonInfo
    {
        private string idNumber;
        /// <summary>身份证号</summary>  
        public string IdNumber
        {
            get { return idNumber; }
            set { idNumber = value; }
        }

        private string uid;
        //身份证UID
        public string UID 
        {
            get { return uid; }
            set { uid = value; }
        }


        #region 身份证其他信息
        //private string name;
        ///// <summary>姓名</summary>  
        //public string Name
        //{
        //    get { return name; }
        //    set { name = value; }
        //}
        //private string sex;
        ///// <summary>性别</summary>  
        //public string Sex
        //{
        //    get { return sex; }
        //    set { sex = value; }
        //}
        //private string nation;
        ///// <summary>民族</summary>  
        //public string Nation
        //{
        //    get { return nation; }
        //    set { nation = value; }
        //}
        //private string birth;
        ///// <summary>出生年月日</summary>  
        //public string Birth
        //{
        //    get { return birth; }
        //    set { birth = value; }
        //}
        //private string address;
        ///// <summary>户籍地址</summary>  
        //public string Address
        //{
        //    get { return address; }
        //    set { address = value; }
        //}
      
        //private string idDepartment;
        ///// <summary>签发机关</summary>  
        //public string IdDepartment
        //{
        //    get { return idDepartment; }
        //    set { idDepartment = value; }
        //}
        //private string expireDay;
        ///// <summary>有效期限</summary>  
        //public string ExpireDay
        //{
        //    get { return expireDay; }
        //    set { expireDay = value; }
        //}
        //private Image photo;
        ///// <summary>照片</summary>  
        //public Image Photo
        //{
        //    get { return photo; }
        //    set { photo = value; }
        //}  
        #endregion

    }
}
View Code

猜你喜欢

转载自www.cnblogs.com/surfacebook007/p/9316575.html