二代身份证读卡器二次开发说明

更新时间:2023-10-31 08:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

二代身份证读卡器二次开发说明

编写目的

为了在自行开发的项目中使用“新中新二代身份证读卡器”(以下简称读卡器)获得的二代身份证信息,需要对现有读卡器程序进行二次开发。

准备

SDK: 新中新二代证SDK开发包.rar

示例代码: “新中新二代证SDK开发包.rar\\DLL\\测试程序\\C#” 读卡器型号: DKQ-116D 版本号:DU

使用方法

由于开发包中已提供了相对完整的示例代码,因此本文直接以示例代码中的例子进行讲解。

一、 开发前先运行开发包中”\\DLL\\DLLTestSDK.exe”或者 “新中新二代身份证验证系统”

以保证读卡器硬件连接及驱动都已正确安装. 或者单独安装驱动程序 (一)、“新中新二代身份证验证系统” 1. 运行程序 2. 在读卡器上扫描二代身份证,在界面上查看是否显示身份证信息 (二)、 “DLLTestSDK.exe” 1. 运行程序

2. 点击“自动寻找读卡器”,查看列表框提示信息及”端口号”内容是否被改变

3. 点击”使用结构体返回信息”,查看列表框中是否已输出身份证信息.

二、 将” sdtapi.dll”、” SynIDCardAPI.dll”、” WltRS.dll” 3个文件复制到与程序运行相同目

三、 参考示例代码,在自己开发的类中定义结构体” IDCardData”,并声明\

的方法.

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct IDCardData { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Name; //姓名 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)] public string Sex; //性别 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string Nation; //名族

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string Born; //出生日期

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)] public string Address; //住址

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] public string IDCardNo; //身份证号

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string GrantDept; //发证机关

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string UserLifeBegin; // 有效开始日期

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string UserLifeEnd; // 有效截止日期

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] public string reserved; // 保留

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] public string PhotoFileName; // 照片路径 }

/************************端口类API *************************/

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_SetMaxRFByte(int iPort, byte ucByte, int iIfOpen); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_GetCOMBaud(int iPort, ref uint puiBaudRate);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_SetCOMBaud(int iPort, uint uiCurrBaud, uint uiSetBaud); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_OpenPort(int iPort);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_ClosePort(int iPort);

/**************************SAM类函数 **************************/

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_ResetSAM(int iPort, int iIfOpen);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_GetSAMStatus(int iPort, int iIfOpen);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_GetSAMID(int iPort, ref byte pucSAMID, int iIfOpen); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_GetSAMIDToStr(int iPort, ref byte pcSAMID, int iIfOpen);

/*************************身份证卡类函数 ***************************/ [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_StartFindIDCard(int iPort, ref byte pucIIN, int iIfOpen); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_SelectIDCard(int iPort, ref byte pucSN, int iIfOpen); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_ReadBaseMsg(int iPort, ref byte pucCHMsg, ref uint puiCHMsgLen, ref byte pucPHMsg, ref uint puiPHMsgLen, int iIfOpen);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_ReadIINSNDN(int iPort, ref byte pucIINSNDN, int iIfOpen); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_ReadBaseMsgToFile(int iPort, ref byte pcCHMsgFileName, ref uint puiCHMsgFileLen, ref byte pcPHMsgFileName, ref uint puiPHMsgFileLen, int iIfOpen); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_ReadIINSNDNToASCII(int iPort, ref byte pucIINSNDN, int iIfOpen);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_ReadNewAppMsg(int iPort, ref byte pucAppMsg ,ref uint puiAppMsgLen , int iIfOpen);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_GetBmp(int iPort, ref byte Wlt_File);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_FindReader();

/***********************设置附加功能函数 ************************/ [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_SetPhotoPath(int iOption, ref byte cPhotoPath); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_SetPhotoType(int iType);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)]

public static extern int Syn_SetPhotoName(int iType);

[DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_SetSexType(int iType);

[DllImport(\, EntryPoint = \, CharSet =

CharSet.Ansi)] public static extern int Syn_SetNationType(int iType); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_SetBornType(int iType); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_SetUserLifeBType(int iType); [DllImport(\, EntryPoint = \, CharSet = CharSet.Ansi)] public static extern int Syn_SetUserLifeEType(int iType,int iOption);

四、 调用” Syn_FindReader()” 获得读卡器端口号

五、 如需保存照片 调用” Syn_SetPhotoPath” 设置照片保存位置,调用” Syn_SetPhotoType()”

设置保存格式,调用” Syn_SetPhotoName()”设置文件名规范. 六、 读取信息:

步骤: 打开端口->设置通讯字节数->读取卡信息->指向读到的第一张卡信息->将卡信息填入结构体-> 读取结构体信息 参考示例代码:

private void button17_Click(object sender, EventArgs e) {

IDCardData CardMsg = new IDCardData(); int nRet,nPort; string stmp;

byte[] pucIIN = new byte[4]; byte[] pucSN = new byte[8];

nPort = Convert.ToInt32(textBox1.Text); if (Syn_OpenPort(nPort) == 0) {

if (Syn_SetMaxRFByte(nPort,80,0)==0) {

nRet = Syn_StartFindIDCard(nPort, ref pucIIN[0], 0); nRet = Syn_SelectIDCard(nPort,ref pucSN[0], 0); nRet = Syn_ReadMsg(nPort, 0, ref CardMsg); if (nRet == 0) {

stmp = Convert.ToString(System.DateTime.Now) + \姓名:\ + CardMsg.Name;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \性别:\ + CardMsg.Sex;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \民族:\ + CardMsg.Nation;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \出生日期:\ + CardMsg.Born;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \地址:\ + CardMsg.Address;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \身份证号:\ + CardMsg.IDCardNo;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \发证机关:\ + CardMsg.GrantDept;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \有效期开始:\ + CardMsg.UserLifeBegin;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \有效期结束:\ + CardMsg.UserLifeEnd;

listBox1.Items.Add(stmp);

stmp = Convert.ToString(System.DateTime.Now) + \照片文件名:\ + CardMsg.PhotoFileName;

listBox1.Items.Add(stmp); } else {

stmp = Convert.ToString(System.DateTime.Now) + \读取身份证信息错误\;

listBox1.Items.Add(stmp); } } } else {

stmp = Convert.ToString(System.DateTime.Now) + \打开端口失败\; listBox1.Items.Add(stmp); } }

本文来源:https://www.bwwdw.com/article/x6h2.html

Top