二代身份证读取操作类
来源:互联网 发布:大数据时代英文翻译 编辑:程序博客网 时间:2024/06/10 14:49
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
- 二代身份证读取操作类
- C#读取二代身份证
- C#读取二代身份证
- .net读取二代身份证
- 读取二代身份证
- asp.net读取二代身份证
- delphi 国腾GTICR100 二代身份证的读取
- 黑莓9900能否读取二代身份证啊? (求证中)
- 分享下.NET程序读取二代身份证(附源码
- TRF7970 读取二代身份证 ID号 程序 TRF7960A TRF7960 TRF7970A
- 验证二代身份证真假
- PHP验证二代身份证
- Js 二代身份证验证
- 简易二代身份证校验
- 读取二代身份证上的相片,函数GetBmp(char * Wlt_File,int intf) 怎么用?
- IE浏览器使用js调用阅读插件调用二代证阅读器读取身份证信息
- delphi 二代身份证阅读器 SDT_ReadBaseMsg()读取到的照片数据进行处理问题
- 怎么读取二代身份证UUID----在STM32+CLRC663平台试验成功
- 分享优化网页加载速度的七个技巧
- linux IDE:magic c++
- 程序员的路,我能走多久
- SElinux:安全增强linux详解
- 重磅新星再现《天下贰》 与你共创3D大场面
- 二代身份证读取操作类
- 数据集DataSet 转入Excel
- 数据集DataSet 转入Excel
- 数据集DataSet 转入Excel
- Win32API笔记一
- 数据集DataSet 转入Excel
- 二版模拟器设置程序关闭显示错误代码
- 从 cygwin.com 安装 GNU gcc 编译器、g++ 编译器
- 快毕业了~找不到工作、、、