這個簡單的測試項目,界面上有個timer控件,設計的是3秒執行一下讀取身份證的動做,目前想到的是這種循環方式,德卡T10這個機子,身份證放上去,不會自動去執行讀取的操做。ide
1.界面測試
2.界面的代碼 Form1.cs 以下ui
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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 }
3.讀取身份證邏輯代碼 GetCardInfo.cs 以下spa
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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; } } }
4.身份證信息類 PersonInfo.cs 以下設計
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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 } }