二代证Dll使用说明
神思二代身份证验证机具接口控件说明
神思第二代身份证验证机具ActiveX控件使用说明版本:V1.3.0.0山东神思电子技术有限公司2010年11月修订记录版本号日期章节号简单描述修订者审核者1.0 2007.6.12 初始创建谭雪欣1.0.55.0 2008.7.25 增加部分函数谭雪欣1.0.57.0 2008.9.8 修改了同时打开多个页面,关闭出错问题。
谭雪欣1.0.58.0 2008-09-12 增加了wlt图片的buffer属性等。
谭雪欣1.0.72.0 2008-11-12 增加手动读卡时读卡失败则清空卡面信息,打开界面自动开始读卡,身份证反正面为横版。
谭雪欣1.0.77.0 2008-11-13 增加保存身份证反正面图片函数等谭雪欣1.0.81.0 2008-11-25 增加安全模块号的读取谭雪欣1.0.82.0 2009-3-3 修改身份证图片生成temp文件夹下谭雪欣1.0.83.0 2009-3-10 增加清空属性的函数谭雪欣1.0.85.0 2009-5-31 用户自定义图片存放路径。
谭雪欣1.0.87.0 2009-08-27 增加身份证正反面的单独保存陈金华1.0.97 2009-09-09 增加临时文件自定义保存目录、配置文件ini存放在c盘根目录低下陈金华1.1.0.0 2010-11-19 Win7,IE8下界面显示黑框,修改源码,并去掉界面对于按钮,只显示身份证正面和签发机关、有效期限、最新住址。
谭雪欣1.2.0.0 2010-11-23 增加属性szCardInfo,方法readrfcard 谭雪欣1.3.0.0 2010-11-30 整理界面,更换最新rdcard2.0 谭雪欣目录1、说明 (5)2、控件方法 (5)2.1 打开端口连接设备 (5)2.2 关闭端口断开设备 (5)2.3 检测连接方法 (5)2.4 读取证件信息 (5)2.5 自动读取信息 (6)2.6 结束自动读卡 (6)2.7 删除读卡过程中生成的单个图片和文本文件 (6)2.8 删除读卡过程中在temp文件夹下生成的全部jpg图片 (6)2.9 删除读卡过程中生成的任意文件 (6)2.10获得读卡过程中生成文件的Base64编码 (6)2.11清空所有属性 (7)2.12打印身份证反正面图片 (7)2.13 readrfcard读卡 (7)2.14 错误代码表 (7)3、控件属性 (8)3.1 姓名 (8)3.2 性别 (8)3.3 民族 (8)3.4 出生日期 (9)3.5 住址 (9)3.6 公民身份号码 (9)3.7 签发机关 (9)3.8 有效期限 (9)3.9 有效期限起始日期 (10)3.10 有效期限截止日期 (10)3.11 JPG照片存放路径 (10)3.12 BMP照片存放路径 (10)3.13 WLT照片存放路径 (10)3.14JPG照片的Base64编码字符串 (11)3.15 BMP照片的Base64编码字符串 (11)3.16 WLT照片的Base64编码字符串 (11)3.17 身份证文本信息存放路径 (11)3.18 有数据标志 (11)3.19 控件状态标志 (11)3.20端口号码 (12)3.21 获得读卡过程中生成的jpg图片路径 (12)3.22 生成身份证反正面图片 (12)3.23 控件下载后是否处于自动读卡状态 (12)3.24读取设备安全模块号 (12)3.25设备安全模块号 (13)3.26 最新地址 (13)3.27 用户指定身份证图片存放位置和名称 (13)3.28 身份证正面JPG照片的Base64编码字符串 (13)3.29 身份证反面JPG照片的Base64编码字符串 (13)3.30 身份证临时文件保存目录 (14)3.31 szCardInfo卡信息 (14)4、示例网页使用说明 (14)1、说明本文档是针对神思联机型第二代居民身份证验证阅读机具通讯控件的使用说明文档,供用户使用ActiveX控件进行接入时参考。
(新中新)二代证SDK开发包开发说明
(新中新)二代证SDK开发包开发说明一、系统的基本要求a)Windows 98,Windows 2000 Pro,Windows 2000 Server,WinXP,Windows Vista,Windows7b)至少32兆内存(32M RAM or Larger)c)至少10兆空闲硬盘空间(10M Free Hard Disk Space or Larger)d)至少一个空闲普通串口或USB口(视用户需求而定)。
二、SDK函数说明(一)端口类API:Syn_SetMaxRFByte 设置射频适配器最大通信字节数int Syn_SetMaxRFByte (int iPort,unsigned char ucByte,int bIfOpen);参数说明:iPort[in] 整数,表示端口号。
串口0001至0016,USB1001至1016 ucByte[in] 无符号字符,24-255,表示射频适配器最大通信字节数。
iIfOpen[in] 整数,非0表示在API函数内部包含了打开端口和关闭端口函数,0表示在API函数内部不包含了打开端口和关闭端口函数返回值:0 成功其他失败(具体含义参见返回码表)Syn_GetCOMBaud查看串口当前波特率(该函数只用于SAM采用RS232串口的情形,如果采用USB接口则不支持该API)。
int Syn_GetCOMBaud (int iPort,unsigned int * puiBaudRate);参数说明:iPort[in] 整数,表示端口号。
此处端口号必须为1-16,表示串口puiBaudRate[out] 无符号整数指针,指向普通串口当前波特率, 默认情况下为115200。
返回值:0 成功0X01 端口打开失败/端口号不合法0X05 无法获得该SAM的波特率,该SAM串口不可用。
Syn_GetCOMBaudEx查看串口当前波特率(该函数只用于SAM采用RS232串口的情形,如果采用USB接口则不支持该API)。
神盾二代身份证读卡器智能接口使用手册
ICR-100M智能接口身份证阅读器使用手册北京中盾安全技术开发公司2010年06月14001环境管理体系、OHSMS职业安全卫生管理体系认证覆盖的产品。
目录版本 (4)出版日期 (4)声明 (4)商标 (4)联系方式 .......................................... 错误!未定义书签。
1. 产品概述 (5)2. 工作原理 (6)3. 主要技术指标 (6)4. 连接与安装 (6)4.1. 连接线结构说明 (7)4.1.1. 专用通讯电缆(标配) (7)4.1.2. 专用USB供电电缆(标配) (7)4.1.3. 专用PS/2供电电缆(选配) (7)4.2. 阅读器与PC机的连接 (7)4.2.1. 采用RS-232C串口通讯方式与PC机的连接 (7)4.2.2. 采用USB通讯方式与PC机的连接 (8)4.3. ICR阅读演示软件安装 (8)4.3.1. 正常安装 (8)4.3.2. 安装阅读程序可能出现的问题及故障排除 (9)4.4. USB驱动程序的安装 (10)5. USB设备配置工具 (10)6. 第二代居民身份证核验软件操作 (11)7. 注意事项 (11)ICR-100M智能接口身份证阅读器使用手册版本1.3.0出版日期2010年6月声明本书版权为北京中盾安全技术开发公司和其设计开发单位公安部第一研究所共同所有。
未经北京中盾安全技术开发公司和公安部第一研究所书面同意,任何公司、单位或个人,不得用任何手段复制本手册的部分或全部内容。
对印刷错误的更正,所述信息谬误的勘误,以及产品的改进,均由北京中盾安全技术开发公司和公安部第一研究所随时作出解释,恕不预先通知,修正内容将编入再版说明书中。
商标所有在本手册使用的商标为该商标所有人的资产。
1.产品概述1.1产品概述ICR-100M智能接口身份证阅读器是联机使用的身份证专用阅读设备,采用拥有国家专利(实用新型专利号ZL 200620000992.9,发明专利号ZL 200610001034.8)的智能识别技术,能自动识别计算机通讯端口、自动设置通讯参数、自动读卡。
关于二代身份证读卡器地二次开发
关于二代身份证读卡器地二次开发关于二代身份证读卡器地二次开发客户提供一台读卡器、sdtapi.dll、WltRS.dll,以及相应的头文件,我是通过java的jni 与所写c++代码进行交互,但是java这边接收到的身份证基本信息一直是乱码。
先说明c++向java传其他中文不会出现乱码,是在c++读出的身份证信息就是乱码。
c++的代码如下:#include "windows.h"#include "CardReader.h"#include "sdtapi.h"#include "String.h"#include "WltRS.h"JNIEXPORT jbyteArray JNICALL Java_CardReader_getMessage(JNIEnv * env, jobject jobj){ char* szStr="mei zhao dao xin xi";char cInput;int iRet; //返回码int iPort; //端口号int iIfOpen=0; //是否需要打开串口unsigned char pucIIN[8];unsigned char pucSN[8];unsigned char pucCHMsg[512]; //文字信息unsigned char pucPHMsg[1024]; //照片信息unsigned char pucFPMsg[1024]; //指纹信息unsigned int uiCHMsgLen,uiPHMsgLen;memset(pucCHMsg,0,sizeof(pucCHMsg));int length;jbyteArray RtnArr = NULL;jsize arrsize;if(iIfOpen==0){for (iPort = 1001; iPort <= 1016; iPort++){iRet=SDT_OpenPort(iPort);printf("SDT_OpenPort usb error, error code is: %02x\n", iRet);printf("SDT_OpenPort usb error, error code is: %02d\n", iPort);if(iRet==0x90) break;}if(iRet!=0x90){printf("SDT_OpenPort error, error code is: %02x\n", iRet);SDT_ClosePort(iPort);szStr="SDT_OpenPort error";printf(szStr);length = strlen(szStr);arrsize =(jsize)length;RtnArr=env->NewByteArray(arrsize);env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);return RtnArr;}iRet=SDT_StartFindIDCard(iPort,pucIIN, iIfOpen);printf("SDT_StartFindIDCard error, error code is: %02x\n", iRet);if (iRet != 0x9f){iRet=SDT_StartFindIDCard(iPort,pucIIN, iIfOpen); //再找卡if (iRet != 0x9f){iRet = SDT_ClosePort(iPort);printf("SDT_StartFindIDCard error, error code is: %02x\n", iRet);szStr="SDT_StartFindIDCard error";length = strlen(szStr);arrsize =(jsize)length;RtnArr=env->NewByteArray(arrsize);env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);return RtnArr;}}iRet=SDT_SelectIDCard (iPort,pucSN, iIfOpen);printf("SDT_SelectIDCard error, error code is: %02x\n", iRet);if (iRet != 0x90){iRet=SDT_SelectIDCard (iPort,pucSN, iIfOpen); //再选卡if (iRet != 0x90){iRet = SDT_ClosePort(iPort);printf("SDT_SelectIDCard error, error code is: %02x\n", iRet);szStr="SDT_SelectIDCard error";length = strlen(szStr);arrsize =(jsize)length;RtnArr=env->NewByteArray(arrsize);env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);return RtnArr;}}iRet=SDT_ReadBaseMsg(iPort,pucCHMsg,&uiCHMsgLen, pucPHMsg,&uiPHMsgLen, iIfOpen); printf("SDT_ReadBaseMsg error, error code is: %02x\n", iRet);if(iRet!=0x90){printf("SDT_ReadBaseMsg error, error code is: %02x\n", iRet);if(iIfOpen==0)SDT_ClosePort(iPort);printf("ssaaaasasasaas\n");szStr="SDT_ReadBaseMsg error";length = strlen(szStr);arrsize =(jsize)length;RtnArr=env->NewByteArray(arrsize);printf("123345453\n");env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr);printf("12sssssssss33454534ssaaaasasasaas");return RtnArr;}printf("SDT_ReadBaseMsg OK\n");if(iIfOpen==0)SDT_ClosePort(iPort);RtnArr=env->NewByteArray(uiCHMsgLen);printf("pucCHMsg=%s\n",pucCHMsg);env->SetByteArrayRegion(RtnArr, 0,uiCHMsgLen, (jbyte*)pucCHMsg);return RtnArr;}length = strlen(szStr);arrsize =(jsize)length;RtnArr=env->NewByteArray(arrsize);env->SetByteArrayRegion(RtnArr, 0,length, (jbyte*)szStr); return RtnArr;}。
精伦iDR210二代身份证读卡器二次开发
类(ReadIDCardService.cs):class ReadIDCardService{public IDCard ReadIDCard(int Port){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);//初始化端口//int intOpenRet = InitComm(1001);//if (intOpenRet != 1)//{// throw new Exception("");//}//设定当前操作的HID接口iDR210if (HIDSelect(Port)){//卡认证int intReadRet = Authenticate();if (intReadRet != 1){//CloseComm();throw new Exception("");}//读身份证信息int intReadBaseInfosRet = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);if (intReadBaseInfosRet != -3){//CloseComm();throw new Exception("");}//HID_BeepLED(true,true, 200);IDCard CardData = new IDCard();CardData.CardNo = Code.ToString().Trim(); = Name.ToString().Trim();CardData.Sex = Gender.ToString().Trim();CardData.Nationality = Folk.ToString().Trim();CardData.Birthday = BirthDay.ToString().Trim();CardData.Address = Address.ToString().Trim();CardData.Institution = Agency.ToString().Trim();CardData.Begin_validity = ExpireStart.ToString().Trim();CardData.End_validity = ExpireEnd.ToString().Trim();CardData.PhotoDirectory = System.IO.Directory.GetCurrentDirectory() + "//photo.bmp";//CloseComm();return CardData;}else{//CloseComm();throw new Exception("");}}[DllImport("sdtapi.dll")]private static extern int InitComm(int Port);//初始化[DllImport("Sdtapi.dll")]private static extern int Authenticate();//卡认证[DllImport("sdtapi.dll")]private static extern void CloseComm(); //关闭端口[DllImport("sdtapi.dll")]private static extern int ReadBaseInfos(StringBuilder Name,StringBuilder Gender, StringBuilder Folk, StringBuilder BirthDay, StringBuilder Code, StringBuilder Address,StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd);//读取数据[DllImport("sdtapi.dll")]private static extern int HID_BeepLED(bool BeepON, bool LEDON, int duration); //蜂鸣器[DllImport("sdtapi.dll")]private static extern bool HIDSelect(int index); //设定当前操作的HID接口iDR210[DllImport("sdtapi.dll")]private static extern int CardOn(); //判断身份证是否在设备上}类(IDCard.cs):class IDCard{public string Name;//姓名public string Sex;//性别public string CardNo; //身份证号public string Nationality; //民族public string Birthday; //生日public string Address;//家庭住址public string Institution;//发证机关public string Begin_validity;// 有效期开始public string End_validity;//有效期结束public string PhotoDirectory;//照片路径;}程序调用://初始化端口int intOpenRet = InitComm(1001);if (intOpenRet != 1){MessageBox.Show("读卡器初始化失败!");this.Close();}try{ReadIDCardService ReadIDCardService = new ReadIDCardService();IDCard CardData = ReadIDCardService.ReadIDCard(1);lb_Title.Text = "姓名:" + ;}catch (Exception ex){if (ex.Message != "")MessageBox.Show(ex.Message);}[DllImport("sdtapi.dll")]private static extern int InitComm(int Port);//初始化。
二代身份证验证设备CM008RU二次开发控件ID2Control使用说明书
⼆代⾝份证验证设备CM008RU⼆次开发控件ID2Control使⽤说明书⼆代⾝份证验证设备CM008R/U⼆次开发控件ID2Control 使⽤说明书⽬录1. 控件描述 (4)1.1. 基本描述 (4)1.2. 控件组成⽂件 (4)1.3. 控件安装 (4)1.3.1. 安装⽂件安装 (4)1.3.2. ⼿动安装 (5)2. 属性⽅法列表 (5)2.1. 属性列表 (5)2.2. ⽅法列表 (5)3. 调⽤流程 (6)3.1. 顺序读卡调⽤流程 (7)3.1.1. 设臵设备连接端⼝号 (7)3.1.2. 端⼝打开及关闭 (7)3.1.3. 设臵RF缓冲区⼤⼩ (7)3.1.4. 基本读卡调⽤流程 (8)3.2. ⾃动读卡调⽤流程 (9)3.2.1. 设臵设备连接端⼝号 (9)3.2.2. 开启⾃动读卡功能 (9)3.2.3. 获取⾝份证相关信息 (9)3.2.4. 停⽌⾃动读卡功能 (9)4. 属性⽅法详细说明 (10)4.1. 属性 (10)Port—通讯端⼝号 (10)Baudrate—串⾏通讯波特率 (10)AutoOpenPort—是否⾃动打开/关闭端⼝ (10)4.2. ⽅法 (10)SetMaxRFByte—设臵RF缓冲区⼤⼩ (10)OpenPort—打开端⼝ (11)ClosePort—关闭端⼝ (11)ResetSAM—复位安全模块 (11)GetSAMStatus—对安全模块运⾏状态检测 (12)GetSAMID—取得安全模块编号HEX码 (12)GetSAMIDToStr—取得安全模块编号字符串 (12)StartFindIDCard—开始寻卡 (13)SelectIDCard—选取卡⽚ (13)ReadBaseMsg—读取基本信息 (13)ReadNewAppMsg—读取追加信息 (14)ReadMngInfo—读取卡体管理号 (14)DecodeToBMP—把WLT⽂件解码到BMP中 (15)GetJPG—把BMP转换成JPG图像 (15)GetBaseInfo—获取⾝份证卡上基本信息 (16)GetAllInfo—获取⾝份证卡上所有信息 (16)SearchDevice—查找设备 (17)StartAutoReadCard—开启⾃动读卡功能 (17)StopAutoReadCard—关闭⾃动读卡功能 (17)GetErrorMsg—获取错误代码对应的信息 (18)GetNation—获取民族编号对应的民族信息 (18)GetSex—获取性别代码对应的性别信息 (18)GetComBaudrate—获取安全模块通讯波特率 (18)SetCOMBaud—设臵安全模块通讯波特率 (19)5. 错误代码表 (19)6. 使⽤⽰例 (20)6.1. VC调⽤⽰例 (20)6.2. VB调⽤⽰例 (23)6.3. Delphi调⽤⽰例 (25)1.控件描述1.1.基本描述⼆代⾝份证验证设备CM008R/U的⼆次开发控件ID2Control是基于公安部安全模块接⼝API函数的基础上开发的,继承了公安部安全模块接⼝所有API函数功能,并增加了相应的转换函数,使得⼆次开发⽤户更易于开发。
C#读取二代身份证信息源码
C#读取二代身份证信息源码using System;using System.Drawing;using System.Collections;using ponentModel;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection ;using System.IO;namespace ICCard{public class clsICCard{//首先,声明通用接口[DllImport(‘sdtapi.dll‘)]public static extern int SDT_OpenPort(int iPortID);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ClosePort(int iPortID);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_PowerManagerBegin(int iPortID, int iIfOpen); [DllImport(‘sdtapi.dll‘)]public static extern int SDT_AddSAMUser(int iPortID, string pcUserName, int iIfOpen); [DllImport(‘sdtapi.dll‘)]public static extern int SDT_SAMLogin(int iPortID, string pcUserName, string pcPasswd, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_SAMLogout(int iPortID, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_UserManagerOK(int iPortID, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ChangeOwnPwd(int iPortID, string pcOldPasswd, string pcNewPasswd, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ChangeOtherPwd(int iPortID, string pcUserName, string pcNewPasswd, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_DeleteSAMUser(int iPortID, string pcUserName, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_StartFindIDCard(int iPortID, ref int pucIIN, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_SelectIDCard(int iPortID, ref int pucSN, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ReadBaseMsg(int iPortID, string pucCHMsg, ref int puiCHMsgLen, string pucPHMsg, ref int puiPHMsgLen, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ReadBaseMsgToFile(int iPortID, string fileName1, ref int puiCHMsgLen, string fileName2, ref int puiPHMsgLen, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_WriteAppMsg(int iPortID, ref byte pucSendData, int uiSendLen, ref byte pucRecvData, ref int puiRecvLen, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_WriteAppMsgOK(int iPortID, ref byte pucData, int uiLen, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_CancelWriteAppMsg(int iPortID, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ReadNewAppMsg(int iPortID, ref byte pucAppMsg, ref int puiAppMsgLen, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ReadAllAppMsg(int iPortID, ref byte pucAppMsg, ref int puiAppMsgLen, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_UsableAppMsg(int iPortID, ref byte ucByte, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_GetUnlockMsg(int iPortID, ref byte strMsg, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_GetSAMID(int iPortID, ref byte StrSAMID, int iIfOpen);[Dl lImport(‘sdtapi.dll‘)]public static extern int SDT_SetMaxRFByte(int iPortID, byte ucByte, int iIfOpen);[DllImport(‘sdtapi.dll‘)]public static extern int SDT_ResetSAM(int iPortID, int iIfOpen);<A href="/">PDA</A>[DllImp ort(‘WltRS.dll‘)]public static extern int GetBmp(string file_name, int intf);public delegate void De_ReadICCardComplete(clsEDZ objEDZ); public event De_ReadICCardComplete ReadICCardComplete; private clsEDZ objEDZ = new clsEDZ();private int EdziIfOpen = 1; //自动开关串口int EdziPortID;public clsICCard(){}public bool ReadICCard(){bool bUsbPort = false;int intOpenPortRtn = 0;int rtnTemp = 0;int pucIIN = 0;int pucSN = 0;int puiCHMsgLen = 0;int puiPHMsgLen = 0;objEDZ = new clsEDZ();//检测usb口的机具连接,必须先检测usbfor (int iPort = 1001; iPort <= 1016; iPort++){intOpenPortRtn = SDT_OpenPort(iPort);if (intOpenPortRtn == 144){EdziPortID = iPort;bUsbPort = true;break;}}//检测串口的机具连接if (!bUsbPort){for (int iPort = 1; iPort <= 2; iPort++){intOpenPortRtn = SDT_OpenPort(iPort);if (intOpenPortRtn == 144){EdziPortID = iPort;bUsbPort = false;break;}}}if (intOpenPortRtn != 144){MessageBox.Show(‘端口打开失败,请检测相应的端口或者重新连接读卡器!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error);return false;}//在这里,如果您想下一次不用再耗费检查端口的检查的过程,您可以把EdziPortID 保存下来,可以保存在注册表中,也可以保存在配置文件中,我就不多写了,但是,//您要考虑机具连接端口被用户改变的情况哦//下面找卡rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen);if (rtnTemp != 159){rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen); //再找卡if (rtnTemp != 159){rtnTemp = SDT_ClosePort(EdziPortID);MessageBox.Show(‘未放卡或者卡未放好,请重新放卡!‘, ‘提示‘, MessageBoxButt ons.OK, MessageBoxIcon.Error);return false;}}//选卡rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen);if (rtnTemp != 144){rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen); //再选卡if (rtnTemp != 144){rtnTemp = SDT_ClosePort(EdziPortID);MessageBox.Show(‘读卡失败!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error); return false;}}//注意,在这里,用户必须有应用程序当前目录的读写权限//检测串口的机具连接if (!bUsbPort){for (int iPort = 1; iPort <= 2; iPort++){intOpenPortRtn = SDT_OpenPort(iPort);if (intOpenPortRtn == 144){EdziPortID = iPort;bUsbPort = false;break;}}}if (intOpenPortRtn != 144){MessageBox.Show(‘端口打开失败,请检测相应的端口或者重新连接读卡器!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error);return false;}//在这里,如果您想下一次不用再耗费检查端口的检查的过程,您可以把EdziPortID 保存下来,可以保存在注册表中,也可以保存在配置文件中,我就不多写了,但是,//您要考虑机具连接端口被用户改变的情况哦//下面找卡rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen);<A href="/">身份证读卡器</A>if (rtnTemp != 159){rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen); //再找卡if (rtnTemp != 159){rtnTemp = SDT_ClosePort(EdziPortID);MessageBox.Show(‘未放卡或者卡未放好,请重新放卡!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error);return false;}}//选卡rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen);if (rtnTemp != 144){rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen); //再选卡if (rtnTemp != 144){rtnTemp = SDT_ClosePort(EdziPortID);MessageBox.Show(‘读卡失败!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error);return false;}}//注意,在这里,用户必须有应用程序当前目录的读写权限FileInfo objFile = new FileI nfo(‘wz.txt‘);if (objFile.Exists){objFile.Attributes = FileAttributes.Normal;objFile.Delete();}objFile = new FileInfo(‘zp.bmp‘);if (objFile.Exists){objFile.Attributes = FileAttributes.Normal;objFile.Delete();}objFile = new FileInfo(‘zp.wlt‘);if (objFile.Exists){objFile.Attributes = FileAttributes.Normal;objFile.Delete();}rtnTemp = SDT_ReadBaseMsgToFile(EdziPortID, ‘wz.txt‘, ref puiCHMsgLen, ‘zp.wlt‘, ref puiPHMsgLen, EdziIfOpen);if (rtnTemp != 144){rtnTemp = SDT_ClosePort(EdziPortID);MessageBox.Show(‘读卡失败!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error);return false;}//下面解析照片,注意,如果在C盘根目录下没有机具厂商的授权文件Termb.Lic,照片解析将会失败if (bUsbPort)rtnTemp = GetBmp(‘zp.wlt‘, 2);elsertnTemp = GetBmp(‘zp.wlt‘, 1);switch (rtnTemp){case 0:MessageBox.Show(‘调用sdtapi.dll错误!‘, ‘提示‘, MessageBoxButtons.OK, MessageBox Icon.Error); break;case 1: //正常break;case -1:MessageBox.Show(‘相片解码错误!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error); break;case -2:MessageBox.Show(‘wlt文件后缀错误!‘, ‘提示‘, MessageBoxButtons.OK, Me ssageBoxIcon.Error); break;case -3:MessageBox.Show(‘wlt文件打开错误!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error); break;case -4:MessageBox.Show(‘wlt文件格式错误!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error); break;case -5:MessageBox.Show(‘软件未授权!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error); break;case -6:MessageBox.Show(‘设备连接错误!‘, ‘提示‘, MessageBoxButtons.OK, MessageBoxIcon.Error);break;}rtnTemp = SDT_ClosePort(EdziPortID);FileInfo f = new FileInfo(‘wz.txt‘);FileStream fs = f.OpenRead();byte[] bt = new byte[fs.Length];fs.Read(bt, 0, (int)fs.Length);fs.Close();string str = System.Text.UnicodeEncoding.Unicode.GetString(bt); = System.Text.UnicodeEncoding.Unicode.GetString(bt, 0, 30).Trim();objEDZ.Sex_Code = System.Text.UnicodeEncoding.Unicode.GetString(bt, 30, 2).Trim();objEDZ.NATION_Code = System.Text.UnicodeEncoding.Unicode.GetString(bt, 32, 4).Trim();string strBird = System.Text.UnicodeEncoding.Unicode.GetString(bt, 36, 16).Trim();objEDZ.BIRTH = Convert.ToDateTime(strBird.Substring(0, 4) + ‘年‘ + strBird.Substring(4, 2) + ‘月‘ + strBird.Substring(6) + ‘日‘);objEDZ.ADDRESS = System.Text.UnicodeEncoding.Unicode.GetString(bt, 52, 70).Trim();objEDZ.IDC = System.Text.UnicodeEncoding.Unicode.GetString(bt, 122, 36).Trim();objEDZ.REGORG = System.Text.UnicodeEncoding.Unicode.GetString(bt, 158, 30).Trim();string strTem = System.Text.UnicodeEncoding.Unicode.GetString(bt, 188, bt.GetLength(0) - 188).Trim();objEDZ.STARTDATE = Convert.ToDateTime(strTem.Substring(0, 4) + ‘年‘ + strTem.Substring(4, 2) + ‘月‘ + strTem.Substring(6, 2) + ‘日‘);strTem = strTem.Substring(8);if (strTem.Trim() != ‘长期‘){objEDZ.ENDDATE = Convert.ToDateTime(strTem.Substring(0, 4) + ‘年‘ + strTem.Substring(4, 2) + ‘月‘ + strTem.Substring(6, 2) + ‘日‘);}else{objEDZ.ENDDATE = DateTime.MaxValue;}objFile = new FileInfo(‘zp.bmp‘);if (objFile.Exists){Image img = Image.FromFile(‘zp.bmp‘);objEDZ.PIC_Image=(Image)img.Clone();System.IO.MemoryStream m = new MemoryStream();img.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);objEDZ.PIC_Byte = m.ToArray();img.Dispose();img = null;}ReadICCardComplete(objEDZ);return true;}public class clsEDZ{private System.Collections.SortedList lstMZ = new SortedList();private string _Name; //姓名private string _Sex_Code; //性别代码private string _Sex_CName; //性别private string _IDC; //身份证号码private string _NATION_Code; //民族代码private string _NATION_CName; //民族private DateTime _BIRTH; //出生日期private string _ADDRESS; //住址private string _REGORG; //签发机关private DateTime _STARTDATE; //身份证有效起始日期private DateTime _ENDDATE; //身份证有效截至日期private string _Period_Of_Validity_Code; //有效期限代码,许多原来系统上面为了一代证考虑,常常存在这样的字段,二代证中已经没有了private string _Period_Of_Validity_CName; //有效期限private byte[] _PIC_Byte; //照片二进制private Image _PIC_Image; //照片public clsEDZ(){lstMZ.Add(‘02‘, ‘蒙古族‘); lstMZ.Add(‘03‘, ‘回族‘);l stMZ.Add(‘04‘, ‘藏族‘); lstMZ.Add(‘05‘, ‘维吾尔族‘); lstMZ.Add(‘06‘, ‘苗族‘); lstMZ.Add(‘07‘, ‘彝族‘); lstMZ.Add(‘08‘, ‘壮族‘); lstMZ.Add(‘09‘, ‘布依族‘); lstMZ.Add(‘10‘, ‘朝鲜族‘); lstMZ.Add(‘11‘, ‘满族‘); lstMZ.Add(‘12‘, ‘侗族‘);l stMZ.Add(‘13‘, ‘瑶族‘); lstMZ.Add(‘14‘, ‘白族‘); lstMZ.Add(‘15‘, ‘土家族‘); lstMZ.Add(‘16‘, ‘哈尼族‘); lstMZ.Add(‘17‘, ‘哈萨克族‘); lstMZ.Add(‘18‘, ‘傣族‘); lstMZ.Add(‘19‘, ‘黎族‘); lstMZ.Add(‘20‘, ‘傈僳族‘); lstMZ.Add(‘21‘, ‘佤族‘); lstMZ.Add(‘22‘, ‘畲族‘);lstMZ.Add(‘24‘, ‘拉祜族‘); lstMZ.Add(‘25‘, ‘水族‘); lstMZ.Add(‘26‘, ‘东乡族‘); lstMZ.Add(‘27‘, ‘纳西族‘); lstMZ.Add(‘28‘, ‘景颇族‘); lstMZ.Add(‘29‘, ‘柯尔克孜族‘); lstMZ.Add(‘30‘, ‘土族‘); lstMZ.Add(‘31‘, ‘达翰尔族‘); lstMZ.Add(‘32‘, ‘仫佬族‘); lstMZ.Add(‘33‘, ‘羌族‘); lstMZ.Add(‘34‘, ‘布朗族‘); lstMZ.Add(‘35‘, ‘撒拉族‘); lstMZ.Add(‘36‘, ‘毛南族‘); lstMZ.Add(‘37‘, ‘仡佬族‘); lstMZ.Add(‘38‘, ‘锡伯族‘); lstMZ.Add(‘39‘, ‘阿昌族‘); lstMZ.Add(‘40‘, ‘普米族‘); lstMZ.Add(‘41‘, ‘塔吉克族‘); lstMZ.Add(‘42‘, ‘怒族‘); lstMZ.Add(‘43‘, ‘乌孜别克族‘); lstMZ.Add(‘44‘, ‘俄罗斯族‘);lstMZ.Add(‘46‘, ‘德昂族‘);lstMZ.Add(‘47‘, ‘保安族‘);lstMZ.Add(‘48‘, ‘裕固族‘);lstMZ.Add(‘49‘, ‘京族‘);lstMZ.Add(‘50‘, ‘塔塔尔族‘);lstMZ.Add(‘51‘, ‘独龙族‘);lstMZ.Add(‘52‘, ‘鄂伦春族‘);lstMZ.Add(‘53‘, ‘赫哲族‘);lstMZ.Add(‘54‘, ‘门巴族‘);lstMZ.Add(‘55‘, ‘珞巴族‘);lstMZ.Add(‘56‘, ‘基诺族‘);lstMZ.Add(‘57‘, ‘其它‘);lstMZ.Add(‘98‘, ‘外国人入籍‘);}public string Name{get { return _Name; }set { _Name = value; }}public string Sex_Code{get { return _Sex_Code; }set{_Sex_Code = value;switch (value){case ‘1‘:Sex_CName = ‘男‘;break;case ‘2‘:Sex_CName = ‘女‘;break;}}}public string Sex_CName{get { return _Sex_CName; } set { _Sex_CName = value; } }public string IDC{get { return _IDC; }set { _IDC = value; }}public string NATION_Code{get { return _NATION_Code; }set{_NATION_Code = value;if (lstMZ.Contains(value))NATION_CName = lstMZ[value].ToString(); }}public string NATION_CName{get { return _NATION_CName; }set { _NATION_CName = value; }}public DateTime BIRTH{get { return _BIRTH; }set { _BIRTH = value; }}public string ADDRESS{get { return _ADDRESS; }set { _ADDRESS = value; }}public string REGORG{get { return _REGORG; }set { _REGORG = value; }}public DateTime STARTDATE{get { return _STARTDATE; }set { _STARTDATE = value; }}public DateTime ENDDATE{get { return _ENDDATE; }set{_ENDDATE = value;if (_ENDDATE == DateTime.MaxValue){_Period_Of_Validity_Code = ‘3‘;_Period_Of_Validity_CName = ‘长期‘;}else{if (_STARTDATE != DateTime.MinValue){switch (value.AddDays(1).Year - _STARTDATE.Year) {case 5:_Period_Of_Validity_Code = ‘4‘;_Period_Of_Validity_CName = ‘5年‘;break;case 10:_Period_Of_Validity_Code = ‘1‘;_Period_Of_Validity_CName = ‘10年‘;break;case 20:_Period_Of_Validity_Code = ‘2‘;_Period_Of_Validity_CName = ‘20年‘;break;}}}}}public string Period_Of_Validity_Code{get { return _Period_Of_Validity_Code; } set { _Period_Of_Validity_Code = value; } }public string Period_Of_Validity_CName{get { return _Period_Of_Validity_CName; } set { _Period_Of_Validity_CName = value; } }public byte[] PIC_Byte{get { return _PIC_Byte; }set { _PIC_Byte = value; }}public Image PIC_Image{get { return _PIC_Image; }set { _PIC_Image = value; }}}[转载]二代身份证读卡器接口函数Delphi声明(2010-06-30 22:09:33)转载原文标签:转载原文地址:二代身份证读卡器接口函数Delphi声明作者:虚伪人生前段时间做项目时用的,拿来一看全是C++的dll,就对应写了一下Delphi的声明查看串口当前波特率function SDT_GetCOMBaud(iPort: integer; puiBaudRate: Pinteger):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口,puiBaudRate[out]无符号指针,指向普通串口当前波特率,返回值0X90-成功,0x1-端口打开失败/端口号不合法,0x5无法获得SAM_V的波特率,串口不可用。
第二代居民身份证termb.dll应用开发使用手册
int_stdcallGetPeopleNation(char *strTmp, unsigned int strLen);
读出生日期:
int_stdcallGetPeopleBirthday(char *strTmp, unsigned int strLen);
读住址信息:
int_stdcallGetPeopleAddress(char *strTmp, unsigned int strLen);
读身份号码:
int_stdcallGetPeopleIDCode(char *strTmp, unsigned int strLen);
读签发机关:
int_stdcallGetDepartment(char *strTmp, unsigned int strLen);
读有效启始日期:
int_stdcallGetStartDate(char *strTmp, unsigned int strLen);
StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button2: TButton;
Button3: TButton;
Image1: TImage;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
设置基本信息
16.
int _stdcall SetPhotoData(char *WltFileName)
设置照片WLT信息
4
5
5.1初始化串口
原型:int InitComm (intPort)
DOCOM二代系统板WinCE二次开发指南V2.0
D O C O M R &D DOCOM 二代系统板WinCE 二次开发指南-V2.0 版本更改说明时间 版本号 说明2012-7-1 1.0 基本发布版本2013-7-17 2.01.升级TXWDEVLib.dll 库文件到V2.0a.增加支持我司高速加密读卡器功能b.增加支持三合一身份证读卡器功能c.增加高速光学进口指纹机功能d.增加条码读卡器汉字输出和16进制输出功能2.升级网络版CE 例程到TXWDemo_OLV2.0a.增加指纹票的功能演示b.增加摄像头票的功能演示3.增加.net3.5错误提示的汉字显示安装包4.IPchange.exe 的bug 修正5.增加数据库功能的支持B 键盘设备声音修改7.ftp 访问加密功能注意:支持上述有些功能操作系统也需要升级到新版本TFT 版本:NK_TFT32.binVGA 版本:NK_VGA32.bin一.开发环境 Windows XP ,.Net3.5,VS2005或VS2008、C#开发平台 二.目录文件说明 C#下的Lib 库\TXWDEVLib.dll 在VS 平台C#下可以直接引用进来,并调用类库函数 TXWCfg.ini类库使用的配置文件 用户根据自己的使用环境配置该文件WinCE 必备文件\autorun.bat系统启动文件,用户可更改来启动其它文件 IPChange.exe物理地址和IP 地址管理软件 TaskMng.exe任务管理软件 TXWDEV .dll设备驱动库,必须拷贝的TXWDEVLib.dll 同目录下 被TXWDEVLib.dll 调用,用户无需直接调用 ok.wav音频文件“欢迎光临” 客户可根据需求自行添加音频文件 tkterr.wav 音频文件“无效票”IOTest.exe TXW 开发的IO 口测试工具D O C O M R &D WGTest.exe TXW 开发的韦根测试工具WltCE.exe 、LICENSE.DAT 身份证读卡器解密文件被TXWDEVLib.dll 调用,用户无需直接调用没有使用二代身份证读卡器可不添加VCOMExample.dll Lumidigm 指纹驱动文件被TXWDEVLib.dll 调用,用户无需直接调用没有使用指纹可不添加RegeditTool.exe 、Readtim.exe 产品注册工具NETCFv35.Messages.zh-CHS.cab .net3.5消息显示包,拷贝到CE 下安装到txwzn 目录下System.Data.SQLite.dll SQLite 数据库必备文件SQLite.Interop.087.dll SQLite 数据库必备文件TXWCamare.dll摄像头驱动,动态加载 ceMfDll.dll加密读卡器驱动 FTPTool.exe ftp 加密工具 regedit.exe注册表工具 SetSysV olum.exe系统声音配置工具CERDISP2.exe远程桌面控制工具开发例程\ 单机版 CE Demo 程序网络版 CE Demo 程序PC 服务端Demo 程序二代系统板通信协议V3.01(演示版)IC 读卡器例程桌面加密IC 读卡器二次开发包及例程其它工具,调试辅助工具ftp 上传工具 专业的ftp 工具,可以使用该工具拷贝文件 串口调试助手 Windows 的串口调试助手三.使用方法3.1. Lib 库的使用方法1.在VS2005或VS2008环境下,新建一个C#语音的智能设备应用程序。
二代身份证读卡器二次开发代码
While Mid(mf, readname, 1) = " "
readname = readname + 1
Wend
d = readname
i=i+1
End If
readname = readname + 1
Wend
idno1 = Mid(ii(3), 1, 18) '身份证号
sex1 = Mid(idno1, 17, 1) '性别代码
二代身份证读卡器二次开发代码(用)
本开发代码用 vb 编写经测试可以兼容现有的大部份二代身份证读卡器,使用本控件前请先安装二代身份证读卡器的驱程, 本控件用于网页开发。
1.说明与准备 进入 vb 新建工程 activex 控件,需要下图部件,这个是 ftp 部件。
做法右击左面工具 选部件就可以出现上图。 本控件只提供两个对外函数接口 (1)hx_IDname( ) 读身份证主函数接口没有参数,有返回值。 (2)toftp(urln, file) 上传照片到 ftp 服务器,照片以身份证号保存,参数 1 服器的 url,参数 2 上传后的文件名称。
<input size=25 name=fbirth maxLength=25 > </P></td> </tr> <tr> <td class="color2" > <P align=center><FONT size=3>住址:</FONT></P></td> <td class="color2" > <P align=left>
二代证读验机具USB驱动安装手册
第二代居民身份证读验机具USB驱动安装手册数据通信科学技术研究所2009年12月数据通信科学技术研究所第二代居民身份证读验机具USB驱动安装手册版 本3.0出版日期2009年12月著作权注意事项本手册版权为数据通信科学技术研究所所有。
未经数据通信科学技术研究所书面同意,任何公司、单位或个人,不得用任何手段复制本手册的部分或全部内容。
对印刷错误的更正,所述信息谬误的勘误,以及产品的改进,均由数据通信科学技术研究所随时作出解释,恕不预先通知,修正内容将编入再版说明书中。
商 标所有在本手册使用的商标为该商标所有人的资产。
业务联系方式地址:北京海淀区学院路40号邮编:100191电话:(010)62301576传真:(010)62301560目录一、安装(更新)驱动程序概述 (1)1.1计算机操作系统 (1)1.2 自动安装(更新)准备 (1)1.3 手动安装(更新)准备 (1)二、驱动的安装 (1)2.1自动安装步骤 (2)2.2 手动安装步骤 (6)三、驱动的更新 (11)3.1自动更新步骤 (11)3.2手动更新步骤 (11)一、 安装(更新)驱动程序概述1.1计算机操作系统本驱动程序适用于Windows2000,XP,2003,Vista和Windows7操作系统。
1.2 自动安装(更新)准备自动安装(更新)时准备安装程序:二代证读验机具USB驱动.exe。
1.3 手动安装(更新)准备手动安装时需要准备以下文件,保存在光盘的二代证读验机具USB驱动目录下。
¾samcoins.dll¾samsetup.dll¾USBDrv.sys¾USBDrvCo.inf二、 驱动的安装计算机从未使用过二代证读验机具(即未安装过读验机具的USB 驱动程序),既可以使用自动安装程序安装驱动,也可使用向导手动安装。
具体步骤详见下文说明。
2.1自动安装步骤注:以下安装步骤以Windows 7为例。
二代身份证读卡器二次开发说明
二代身份证读卡器二次开发说明编写目的为了在自行开发的项目中使用“新中新二代身份证读卡器”(以下简称读卡器)获得的二代身份证信息,需要对现有读卡器程序进行二次开发。
准备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”,并声明"SynIDCardAPI.dll"的方法.[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("SynIDCardAPI.dll", EntryPoint = "Syn_SetMaxRFByte", CharSet =CharSet.Ansi)]public static extern int Syn_SetMaxRFByte(int iPort, byte ucByte, int iIfOpen);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetCOMBaud", CharSet = CharSet.Ansi)] public static extern int Syn_GetCOMBaud(int iPort, ref uint puiBaudRate);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetCOMBaud", CharSet = CharSet.Ansi)] public static extern int Syn_SetCOMBaud(int iPort, uint uiCurrBaud, uint uiSetBaud); [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_OpenPort", CharSet = CharSet.Ansi)] public static extern int Syn_OpenPort(int iPort);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ClosePort", CharSet = CharSet.Ansi)] public static extern int Syn_ClosePort(int iPort);/**************************SAM类函数 **************************/[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ResetSAM", CharSet = CharSet.Ansi)] public static extern int Syn_ResetSAM(int iPort, int iIfOpen);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMStatus", CharSet =CharSet.Ansi)]public static extern int Syn_GetSAMStatus(int iPort, int iIfOpen);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMID", CharSet = CharSet.Ansi)] public static extern int Syn_GetSAMID(int iPort, ref byte pucSAMID, int iIfOpen);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMIDToStr", CharSet = CharSet.Ansi)]public static extern int Syn_GetSAMIDToStr(int iPort, ref byte pcSAMID, int iIfOpen);/*************************身份证卡类函数 ***************************/[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_StartFindIDCard", CharSet = CharSet.Ansi)]public static extern int Syn_StartFindIDCard(int iPort, ref byte pucIIN, int iIfOpen); [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SelectIDCard", CharSet =CharSet.Ansi)]public static extern int Syn_SelectIDCard(int iPort, ref byte pucSN, int iIfOpen); [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseMsg", 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("SynIDCardAPI.dll", EntryPoint = "Syn_ReadIINSNDN", CharSet = CharSet.Ansi)] public static extern int Syn_ReadIINSNDN(int iPort, ref byte pucIINSNDN, int iIfOpen); [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseMsgToFile", 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("SynIDCardAPI.dll", EntryPoint = "Syn_ReadIINSNDNToASCII", CharSet = CharSet.Ansi)]public static extern int Syn_ReadIINSNDNToASCII(int iPort, ref byte pucIINSNDN, int iIfOpen);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadNewAppMsg", CharSet = CharSet.Ansi)]public static extern int Syn_ReadNewAppMsg(int iPort, ref byte pucAppMsg ,ref uint puiAppMsgLen , int iIfOpen);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetBmp", CharSet = CharSet.Ansi)] public static extern int Syn_GetBmp(int iPort, ref byte Wlt_File);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadMsg", CharSet = CharSet.Ansi)] public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_FindReader", CharSet = CharSet.Ansi)] public static extern int Syn_FindReader();/***********************设置附加功能函数 ************************/[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoPath", CharSet =CharSet.Ansi)]public static extern int Syn_SetPhotoPath(int iOption, ref byte cPhotoPath);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoType", CharSet =CharSet.Ansi)]public static extern int Syn_SetPhotoType(int iType);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoName", CharSet =CharSet.Ansi)]public static extern int Syn_SetPhotoName(int iType);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetSexType", CharSet = CharSet.Ansi)] public static extern int Syn_SetSexType(int iType);[DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetNationType", CharSet =四、调用” 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) + " 姓名:" +;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) + " 有效期开始:" + erLifeBegin;listBox1.Items.Add(stmp);stmp = Convert.ToString(System.DateTime.Now) + " 有效期结束:" + erLifeEnd;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);}}。
DLL使用介绍范文
DLL使用介绍范文动态链接库(Dynamic Link Library,简称DLL)是一种Microsoft Windows操作系统中常用的文件类型,它包含可被程序调用执行的代码和数据。
DLL文件能够提供程序员在开发和编写应用程序时的便利性,通过将常用的功能和代码存储在DLL文件中,可以提高代码的复用性和可维护性,并且减少了程序的体积,减少了编译时间。
使用DLL文件可以将相同的代码抽象出来,形成一个独立的模块,供其他程序调用。
这种模块化的设计让程序更容易维护和管理,同时也有助于提高程序的性能和效率。
在开发过程中,DLL文件可以被多个应用程序共享,从而避免了重复编写相同的代码,提高了开发效率。
DLL文件的使用不仅可以提高程序的可维护性和扩展性,还可以加快程序的启动速度和运行速度。
由于DLL文件是在程序运行时加载到内存中的,因此程序启动时不需要加载所有的代码,只需要加载必要的部分,这可以加快程序的启动速度。
另外,由于DLL文件可以在内存中共享,多个程序可以同时使用同一个DLL文件,降低了内存的占用,提高了程序的运行速度。
在实际应用中,使用DLL文件可以实现插件式的架构设计,允许应用程序的功能可以通过添加或删除DLL文件来进行扩展或删减。
这种设计方式使应用程序的功能更加灵活和可扩展,可以根据需求动态加载和卸载DLL文件,实现功能的动态更新和升级。
除了以上提到的优点外,DLL文件还可以实现一些高级的功能,比如实现程序的多语言支持,可以在DLL文件中存储不同语言版本的字符串,根据需要加载对应的字符串资源;还可以实现程序的加密保护,将一些敏感的代码和数据存储在DLL文件中,通过加密算法进行保护,提高程序的安全性。
总的来说,DLL文件是一种非常有用的程序组件,可以帮助程序员提高代码的复用性和可维护性,加快程序的启动速度和运行速度,实现程序的模块化设计和插件式架构,为程序的开发和维护带来很大的便利。
因此,在实际开发中,合理地使用DLL文件是非常重要和必要的。
Dependency Walker 使用说明
在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。
现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧!初窥门径:Windows的基石随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。
从Microsoft公司推出首个版本的Windows 以来,动态链接库就一直是这个操作系统的基础。
1.看看DLL里有什么与其用晦涩的专业术语来解决DLL是什么,不如先来看看DLL里有什么。
DLL和EXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等),可是为什么要把代码放在DLL里面,而不是做成EXE呢其实DLL中的代码是以API函数形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能。
在使用“记事本”等程序时,如果要保存文件或打开文件,就会弹出通用文件对话框,让我们选择文件位置。
你可知道,这就是调用了系统底层DLL中的通用对话框界面。
2.系统中几个重要的DLLWindows中有3个非常重要的底层DLL:、、。
其中顾名思义就是内核相关的功能,主要包含用于管理内存、进程和线程的函数;而中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;的名称用了缩写,全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。
3.为什么要用DLL刚才在谈到这个问题的时候,我们只是解释了DLL将程序代码封装成函数的原理。
为什么封装成函数,就能成为系统中大量使用DLL的理由呢①扩展应用程序由于DLL能被应用程序动态载入内存。
二次开发接口说明V3.0
⼆次开发接⼝说明V3.01.概述精伦电⼦开发的⼆代⾝份证读卡系列机具适⽤于相关⾏业的联机型应⽤。
产品提供了完善的⼆次软件开发接⼝(API)。
本⼿册对开发接⼝的⽂件组成、函数定义格式、调⽤⽅法及返回值等进⾏详细的说明。
本通⽤开发包⽀持的设备型号如下:1、iDR200(串⼝和USB⼝)。
2、iDR320(必须进⼊“同步应⽤”模式)。
3、iDR400-1(必须进⼊“同步”模式)。
4、iDR210(USB-HID免驱动接⼝)。
5、iDR210(串⼝)。
注意:完全兼容原2.0版本开发接⼝,⽀持USB-HID接⼝和串⼝的iDR210。
1、如果使⽤原开发包采⽤动态调⽤dll⽅式,只需直接替换原dll即可。
2、如果使⽤原开发包采⽤的静态调⽤⽅式,则在不改变代码的情况下,对原程序重新编译链接即可。
2.系统要求使⽤本API的PC机,必须满⾜下列条件:●Windows 98、Windows 2000 Pro、Windows 2000 Server、Windows XP。
●⾄少32兆内存(32M RAM or Larger)。
●⾄少10兆空闲硬盘空间(10M Free Hard Disk Space or Larger)。
●⾄少⼀个空闲普通串⼝或USB⼝(视⽤户需求⽽定)。
3.接⼝⽂件说明接⼝⽂件包括:Dewlt.dll 相关动态联接库sdtapi.dll 相关动态联接库JpgDll.dll 相关动态联接库SavePhoto.dll 相关动态联接库sdtapi.h 相关动态联接库头⽂件适⽤开发语⾔:Visual C++ 5.0 及以后版本C++ Builder 5.0 及以后版本Visual Basic 5.0 及以后版本Delphi 3.0 及以后版本PowerBuilder 5.0 及以后版本4.接⼝函数说明4.1.端⼝函数4.1.1.端⼝初始化函数原型:int InitComm (int iPort)说明:本函数⽤于打开串⼝或USB并检测读卡设备是否就绪。
DLL接口测试程序操作说明
DLL接口(V6.51以上)测试程序操作说明一、输入接口授权码:1、运行门锁软件2、把帮助菜单下的“关于”栏打开,里面有门锁的系统ID号3、把此ID号发给我们,我们将根据此ID号生成一个动态库接口授权码4、运行门锁软件,点击“系统维护”下拉菜单的“一卡通设置”菜单栏5、在一卡通设置窗口中选择“授权”选项卡,在出现的授权窗口中第一栏内输入我们提供的接口授权码6、点击“确定”按钮即可二、接口测试程序操作1、把DLLSAMPLE.exe和所有动态库文件拷贝到一个文件夹下2、然后直接运行接口测试例子程序DLLSAMPLE.exe3、在接口测试程序窗口中:a)在“服务器”栏输入安装我门锁软件的那台电脑的名称b)在“门锁软件”栏选择lock3200kc)在“串口”栏选择实际连接发卡机的的com口号d)在“发卡机类型”栏选择手动发行机4、点击“初始化”按钮,返回值为0则表示初始化成功5、在“房号”栏输入与门锁软件中的对应的6位数房号。
比如0101016、在“有效时间”栏输入要求的时间段。
(参见lockdsk.doc相关说明)7、把“覆盖”前面的复选框打上勾8、在“客人姓名”和“客人ID”栏分别输入该卡的持有人姓名和证件号码9、点击“新客人”按钮,开始发行客人卡。
返回值为0表示发行成功10、点击“读卡”按钮,可以读出该卡的信息11、在“注销”按钮前面的“房号”、“卡号”栏输入需要注销卡的房间号和卡号,再点击“注销”按钮,就可以注销指定房间的该卡号的客人卡。
此时如果发卡机中插有卡,则会注销发卡机中的客人卡,如果发卡机中没有卡,则把门锁软件中的对应房间客人卡记录作注销处理,此为正常注销;如果在“卡号”栏输入0,则会直接注销指定房间内的所有卡信息(从数据库中删除)12、点击“遗失”按钮,可以把前面指定客房的客人卡或指定卡号的客人卡作遗失注销处理13、点击“退房”,可以把把前面指定客房的客人卡或指定卡号的客人卡作退房处理,只清库14、点击“结束”按钮,结束接口测试工作。
dependencywalker使用说明(1)
在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。
现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧!初窥门径:Windows的基石随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。
从Microsoft公司推出首个版本的Windows以来,动态链接库就一直是这个操作系统的基础。
1.看看DLL里有什么与其用晦涩的专业术语来解决DLL是什么,不如先来看看DLL里有什么。
DLL和EXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等),可是为什么要把代码放在DLL里面,而不是做成EXE呢其实DLL中的代码是以API函数形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能。
在使用“记事本”等程序时,如果要保存文件或打开文件,就会弹出通用文件对话框,让我们选择文件位置。
你可知道,这就是调用了系统底层DLL中的通用对话框界面。
2.系统中几个重要的DLLWindows中有3个非常重要的底层DLL:、、。
其中顾名思义就是内核相关的功能,主要包含用于管理内存、进程和线程的函数;而中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;的名称用了缩写,全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。
3.为什么要用DLL刚才在谈到这个问题的时候,我们只是解释了DLL将程序代码封装成函数的原理。
为什么封装成函数,就能成为系统中大量使用DLL的理由呢①扩展应用程序由于DLL能被应用程序动态载入内存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二代证系统终端API
使用说明最新09/1/1
上海普天邮通商用机器有限公司
2009年1月
二代证系统终端API
使用说明
版本
1.4
出版日期
2010年03月
著作权注意事项
本书版权为上海普天邮通商用机器有限公司所有。
未经上海普天邮通商用机器有限公司书面同意,任何公司、单位或个人,不得用任何手段复制本手册的部分或全部内容。
对印刷错误的更正,所述信息谬误的勘误,以及产品的改进,均由上海普天邮通商用机器有限公司随时作出解释,恕不预先通知,修正内容将编入再版说明书中。
1.前言
本应用程序接口(API)用于二代证验证系统的验证终端应用系统的开发。
2.系统要求
使用本API的PC机,必须满足下列条件:
●Windows 2000, Windows XP
●至少64兆内存(64M RAM or Larger)
●至少10兆空闲硬盘空间(10M Free Hard Disk Space or Larger)
●至少一个空闲普通串口或USB口(视用户需求而定)。
3.文件列表
开发包含下列文件:
cardapi.h 数据类型和函数声明
cardapi2.lib 静态链接库
cardapi2.dll API函数动态链接库
sdtapi.dll cardapi2.dll依赖的动态链接库
WltRS.dll cardapi2.dll依赖的动态链接库
license.dat 授权文件
CardII.ini 配置文件
4.API详细说明
4.1long__stdcall OpenCardReader(long lPort, ULONG ulFlag)
打开并检测读卡器
参数
lPort:端口号,1~16表示串口号,1001表示USB口,0表示自动选择。
4.2long__stdcall GetPersonMsgW(PPERSONINFOW pInfo, const wchar_t* pszImageFile)
读取二代证,所有参数中的字符串使用UTF-16编码。
参数
pInfo:证件信息结构,见4.6。
pszImageFile:照片路径和文件名。
照片的格式是bmp。
建议不要使用相对路径或当前路径并且选择一个确定有读写权限的路径。
例如C:\Documents and Settings\test\Local Settings\Temp\image.bmp(如果当前用户是test的话)
返回值:错误代码。
4.3long__stdcall GetPersonMsgA(PPERSONINFOA pInfo, const char* pszImageFile)
读取二代证,所有参数中的字符串使用GBK编码。
参数
pInfo:证件信息结构,见4.6。
pszImageFile:照片路径和文件名。
照片的格式是bmp。
建议不要使用相对路径或当前路径并且选择一个确定有读写权限的路径。
例如C:\Documents and Settings\test\Local Settings\Temp\image.bmp(如果当前用户是test的话)
返回值:错误代码。
4.4long__stdcall ResetCardReader()
重置读卡器。
返回值:错误代码。
4.5long__stdcall CloseCardReader()
关闭读卡器。
返回值:错误代码。
4.6const wchar_t* __stdcall GetResultDescriptionW()
获取错误信息的文字描述。
返回值:错误信息,使用UTF-16编码。
4.7证件信息结构
PERSONINFOW结构的成员与PERSONINFOA类似。
typedef struct _personinfoa
{
char name[32];
char sex[4];
char nation[20];
char birthday[12];
char address[72];
char cardId[20];
char police[32];
char validStart[12];
char validEnd[12];
char sexCode[4];
char nationCode[4];
char appendMsg[72];
}PERSONINFOA,*PPERSONINFOA;。
有效截止日期可以是长期。
5.注意事项
应用程序使用OpenCardReader打开设备,使用GetPersonMsgA(或GetPersonMsgW)读取信息,使用CloseCardReader关闭设备。
应用程序只需要在初始化时打开一次设备即可,不需要每次读卡时都进行打开和关闭设备操作。
程序停止读卡后应该调用CloseCardReader。
当出现严重错误时,应用程序可以调用OpenCardReade打开设备,使用ResetCardReader重置设备,该函数会等待2秒钟,然后调用CloseCardReader关闭设备。
一般情况下不需要使用ResetCardReader。
应用程序如果使用自动读卡,读卡的频率一般设为0.5秒左右。