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