usingSystem;usingSystem.Collections.Generic;//using System.Linq;
usingSystem.Text;usingSystem.Runtime.InteropServices;usingSystem.IO;usingSystem.Drawing;namespaceIDCard
{public classGetCardInfo
{#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
/// 读取身份信息
///
/// 图片存储路径
///
public static int getCardInfo(refPersonInfo 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;
}
}
}



