二代身份證讀取操作類

using System;
using System.Collections.Generic;

using System.Text;
using System.Runtime.InteropServices;
namespace 訪客通2010版
{
    public static class Read_ID_Card_JingLun
    {
        /// <summary>
        /// 本函數用於打開串口或USB並檢測讀卡設備是否就緒
        /// 注:如果讀卡機具連接的端口是確定的,可以直接使用相應端口號調用本函數。否則,可以採用循環查找的方式調用本函數。
        /// </summary>
        /// <param name="iPort">iPort:設置串口或USB(目前串口和USB都只支持16個,即串口1~16和USB1001-1016)</param>
        /// <returns></returns>
        [DllImport("Sdtapi.dll")]
        public static extern int InitComm(int iPort);

        /// <summary>
        /// 本函數用於發現身份證卡並選擇卡。
        /// 注:認證卡時,需要將身份證放置於讀卡機具上方並做稍許時間的停留。如果函數返回錯誤表示沒有發現卡或者卡停留時間太短。
        /// </summary>
        /// <returns></returns>
        [DllImport("Sdtapi.dll")]
        public static extern int Authenticate();
        /// <summary>
        /// 本函數用於讀取卡中基本信息,包括文字信息與圖像信息。文字信息以字符串格式輸出。圖象信息被解碼後存爲文件photo.bmp(在當前工作目錄下)。
        /// </summary>
        /// <param name="Name">Name [out] 字符型指針,指向姓名信息。需要在調用時分配內存,字節數不小31。</param>
        /// <param name="Gender">Gender [out] 字符型指針,指向性別信息(男或者女)。需要在調用時分配內存,字節數不小3。</param>
        /// <param name="Folk">Folk  [out] 字符型指針,指向民族信息。需要在調用時分配內存,字節數不小10。</param>
        /// <param name="BirthDay">BirthDay [out] 字符型指針,指向出生日期信息。需要在調用時分配內存,字節數不小9,前四位爲出生年,第5位到第6位是出生月,後兩位是出生日,格式爲:CCYYMMDD。</param>
        /// <param name="Code">Code [out] 字符型指針,指向身份證號碼信息。需要在調用時分配內存,字節數不小19。</param>
        /// <param name="Address">Address [out] 字符型指針,指向地址信息。需要在調用時分配內存,字節數不小71。</param>
        /// <param name="Agency">Agency [out] 字符型指針,指向簽證機關信息。需要在調用時分配內存,字節數不小31。</param>
        /// <param name="ExpireStart">ExpireStart [out] 字符型指針,指向有效期起始日期信息。需要在調用時分配內存,字節數不小9, 格式爲:CCYYMMDD。</param>
        /// <param name="ExpireEnd">ExpireEnd [out] 字符型指針,指向有效期截至日期信息。需要在調用時分配內存,字節數不小9,格式爲:CCYYMMDD,有效期爲長期的表示爲漢字“長期”。</param>
        /// <returns></returns>
        [DllImport("Sdtapi.dll")]
        public static extern int ReadBaseInfos(StringBuilder Name, StringBuilder Gender, StringBuilder Folk,
                                                    StringBuilder BirthDay, StringBuilder Code, StringBuilder Address,
                                                        StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd);
        /// <summary>
        /// 本函數用於關閉已打開的端口,一般在調用InitComm成功並完成讀卡任務後調用。
        /// 注意:如果不再使用已打開的端口,必須使用CloseComm函數關閉端口。
        /// </summary>
        /// <returns></returns>
        [DllImport("Sdtapi.dll")]
        public static extern int CloseComm();

        /// <summary>
        /// 本函數用於讀取卡中基本信息,包括文字信息與圖像信息。文字信息已經分段解析,輸出格式爲單字節,且每一字段信息已經被表示爲字符串。圖象信息被解碼後存爲文件photo.bmp(在當前工作目錄下)。
        /// </summary>
        /// <param name="pMsg">pMsg  [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小於192。函數調用成功後,各字段的文本信息已經轉換爲單字節形式,並表示爲字符串格式。字段意義及偏移值如下所示:</param>
        /// <param name="len">Len  [out] 整數, 返回總字符長度,可以給空值(NULL)。</param>
        /// <returns>1正確。0錯誤</returns>
        [DllImport("Sdtapi.dll")]
        public static extern int ReadBaseMsg(byte[] pMsg, ref int len);

        /// <summary>
        /// 本函數用於讀取卡中基本信息,包括文字信息與圖像信息。文字信息未解析,文字信息採用GB13000的UCS-2進行存儲,圖象信息被解碼後存爲文件photo.bmp(在當前工作目錄下)。
        /// </summary>
        /// <param name="pMsg">pMsg  [out] 無符號字符指針,指向讀到的文本信息。需要在調用時分配內存,字節數不小於256。偏移值如下所示:</param>
        /// <param name="len">Len  [out] 整數, 返回基本信息長度。</param>
        /// <returns></returns>
        [DllImport("Sdtapi.dll")]
        public static extern int ReadBaseMsgW(byte[] pMsg, ref int len);

        /// <summary>
        /// 讀取SAM模塊ID
        /// </summary>
        /// <param name="samid"></param>
        /// <returns></returns>
        [DllImport("Sdtapi.dll")]
        public static extern int GetSAMIDToStr(StringBuilder samid);
    }
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Read_ID_Card_JingLun.InitComm(Dal.Config.Read_ID_Card_ComPort);
            if (Read_ID_Card_JingLun.Authenticate() != 1)
            {
                MessageBox.Show("卡論證失敗,請移開卡並重新放入!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            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);
            byte[] pMsg = new byte[256];
            string[] baseinfo = new string[9];
            char[] param = { '/0' };
            int intReadBaseInfosRet = Read_ID_Card_JingLun.ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);
            if (intReadBaseInfosRet != 1)
            {
                MessageBox.Show("讀取卡數據失敗!請移開後重新放入再試!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

需要調用sdtapi.dll ,和wltrs.dll dll

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章