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