型号:普天CPIDMR02/TG身份证阅读器

SDK版本:2020

(我这不提供下载,自己咨询卖家,或者网上自己找,SDK 厂家不二次封装的机器理论通用)

新老版本区别:

多了外国人永久居留身份证、港澳台居民居住证识别

注:

机器不用做升级(事实上也没法自己升级)

本SDK和教程仅支持普天2013年以后的机器,若不知道什么时候出厂,看下序列号

普天机器序列号印在背面,一般是这样 0503XXXX....,0503后面4位就是出厂时间,若你手上是老机器,请使用旧版的SDK。

开发需要文件:

cardapi7.dll    DLL接口
sdtapi.dll    
WltRS.dll    相片解码
license.dat    授权文件

使用说明:

1.cardapi7.dll、sdtapi.dll、WltRS.dll、license.dat四个文件放在同一个路径中。该路径可以与应用程序所在的路径不同。
2.程序在运行的过程中应该将license.dat复制到C盘根目录。

手动安装USB驱动:
Win7为例。右击“计算机”->“管理”->“设备管理器”,寻找“其他设备”。找到了之后点击左侧小箭头,看下面有没有“未知设备”。如果有,右击“未知设备”->“更新驱动程序软件”->“浏览计算机以查找驱动程序软件”。输入客户端或者OCX控件安装路径。

一般默认安装路径如下:
32位系统:C:\Program Files\Shpte\SamDriver\x86
64位系统:C:\Program Files (x86)\Shpte\SamDriver\x64

常见问题:

SDK目前手上只有32位版本。开发.net应用程序时必须将“目标平台”设置为“x86”。开发Java应用程序时必须使用32位JDK和JRE。

如果调用IdcrInitialize后返回0x118,即“创建授权文件失败”,请手动将license.dat复制到C盘根目录(装控件时会自己装,但是windows7和10,为了安全考虑,往C盘根目录写文件时都会提示需要管理员权限,那么有可能会失败)。

C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;namespace CSharpDemo
{class CardApi{[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)]public class PERSONINFOW{[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]public string name;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]public string sexCode;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]public string sex;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]public string ethnicCode;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string ethnic;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string birthDate;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]public string address;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]public string idNumber;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]public string issuer;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string effectDate;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string expiryDate;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]public string appendInfo;}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)]public class FOREIGNERINFOW{[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 62)]public string englishName;//60[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]public string sexCode;       //1[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]public string sex;           //男/M 女/F[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]public string prNumber;   //15[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]public string countryCode;  //3[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]public string country;  //加拿大/CAN[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]public string chineseName;//15汉字[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string effectDate;    //8[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string expiryDate;   //8[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string birthDate;    //8[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]public string version;       //2[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]public string issuerCode;    //4[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]public string issuer;       //公安部/Ministry of Public Security}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)]public class COMPATRIOTINFOW{[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]public string name;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]public string sexCode;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]public string sex;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string birthDate;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]public string address;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]public string idNumber;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]public string issuer;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string effectDate;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string expiryDate;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]public string passNumber;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]public string issueCount;}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)]public class FPINFOW{[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]public byte[] fpData1;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]public byte[] fpData2;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]public string fingerName1;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]public string fingerName2;}[DllImport("cardapi7.dll", EntryPoint = "IdcrInitialize",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern int IdcrInitialize(uint dwFlags);[DllImport("cardapi7.dll", EntryPoint = "IdcrOpen",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern int IdcrOpen(ref int piPort, uint dwBaudRate, uint dwCmdIntv, int iBpPort, ref IntPtr ppRD);[DllImport("cardapi7.dll", EntryPoint = "IdcrValidate",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern int IdcrValidate(IntPtr pRD, int bReadFP, ref int piCardType, int bRepeatRead);[DllImport("cardapi7.dll", EntryPoint = "IdcrGetIDInfoW",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern int IdcrGetIDInfoW(IntPtr pRD, [In, Out]PERSONINFOW pTextInfo, string pszPhotoPath, [In, Out]FPINFOW pFPInfo);[DllImport("cardapi7.dll", EntryPoint = "IdcrGetPRInfoW",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern int IdcrGetPRInfoW(IntPtr pRD, [In, Out]FOREIGNERINFOW pTextInfo, string pszPhotoPath, [In, Out]FPINFOW pFPInfo);[DllImport("cardapi7.dll",EntryPoint="IdcrGetHMTInfoW",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern int IdcrGetHMTInfoW(IntPtr pRD, [In,Out]COMPATRIOTINFOW pTextInfo, string pszPhotoPath, [In,Out]FPINFOW pFPInfo);[DllImport("cardapi7.dll", EntryPoint = "IdcrClose",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern void IdcrClose(IntPtr pRD);[DllImport("cardapi7.dll", EntryPoint = "IdcrFinalize",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern void IdcrFinalize();[DllImport("cardapi7.dll", EntryPoint = "IdcrGetErrorDescW",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]public static extern void IdcrGetErrorDescW(StringBuilder pszBuffer, uint nBufLen, int nErrorCode);}
}

前台form关键代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;namespace CSharpDemo
{public partial class Form1 : Form{const int TYPE_IDCARD = 1;const int TYPE_PRCARD = 2;const int TYPE_HMTCARD = 3;IntPtr pRD = IntPtr.Zero;int cardType = 0;Image photo = null;CardApi.PERSONINFOW person;CardApi.FOREIGNERINFOW foreigner;CardApi.COMPATRIOTINFOW compatriot;CardApi.FPINFOW fpInfo;string birthDate = null;string validTerm = null;public Form1(){InitializeComponent();person = new CardApi.PERSONINFOW();foreigner = new CardApi.FOREIGNERINFOW();compatriot = new CardApi.COMPATRIOTINFOW();fpInfo = new CardApi.FPINFOW();}protected override void OnHandleCreated(EventArgs e){base.OnHandleCreated(e);int error = CardApi.IdcrInitialize(1);if (error != 0){StringBuilder errorstring=new StringBuilder(200);ShowErrorDesc(error);//MessageBox.Show("初始化失败" + errorstring.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.Stop);}}void SetRect(ref RectangleF rect, float x, float y, float width, float height){rect.X = x;rect.Y = y;rect.Width = width;rect.Height = height;}private void ShowErrorDesc(int result){StringBuilder buffer = new StringBuilder(32);CardApi.IdcrGetErrorDescW(buffer, 32, result);txtErrorCode.Text = buffer.ToString();}private void btnOpen_Click(object sender, EventArgs e){int result;int port = 0;if (pRD == IntPtr.Zero){result = CardApi.IdcrOpen(ref port, 115200, 0, 0, ref pRD);ShowErrorDesc(result);}}private void btnRead_Click(object sender, EventArgs e){int result;int readFP;string photoPath;if (pRD == IntPtr.Zero){return;}Clear();readFP = ckReadFP.Checked ? 1 : 0;photoPath = Path.GetTempPath() + "\\photo.bmp";result = CardApi.IdcrValidate(pRD, readFP, ref cardType, 1);if (0 == result){if (TYPE_IDCARD == cardType){if (ckReadFP.Checked){result = CardApi.IdcrGetIDInfoW(pRD, person, photoPath, fpInfo);}else{result = CardApi.IdcrGetIDInfoW(pRD, person, photoPath, null);}if (0 == result){birthDate = ConvertDate(person.birthDate, 1);validTerm = ConvertDate(person.effectDate, 2);validTerm += '-';validTerm += ConvertDate(person.expiryDate, 2);}}else if (TYPE_PRCARD == cardType){if (ckReadFP.Checked){result = CardApi.IdcrGetPRInfoW(pRD, foreigner, photoPath, fpInfo);}else{result = CardApi.IdcrGetPRInfoW(pRD, foreigner, photoPath, null);}if (0 == result){birthDate = ConvertDate(foreigner.birthDate, 2);validTerm = ConvertDate(foreigner.effectDate, 2);validTerm += '-';validTerm += ConvertDate(foreigner.expiryDate, 2);}}else if (TYPE_HMTCARD == cardType){if (ckReadFP.Checked){result = CardApi.IdcrGetHMTInfoW(pRD, compatriot, photoPath, fpInfo);}else{result = CardApi.IdcrGetHMTInfoW(pRD, compatriot, photoPath, null);}if (0 == result){birthDate = ConvertDate(compatriot.birthDate, 1);validTerm = ConvertDate(compatriot.effectDate, 2);validTerm += '-';validTerm += ConvertDate(compatriot.expiryDate, 2);}}}if (result == 0){photo = Image.FromFile(photoPath);}ShowErrorDesc(result);Invalidate();}private void btnClose_Click(object sender, EventArgs e){if (pRD != IntPtr.Zero){CardApi.IdcrClose(pRD);pRD = IntPtr.Zero;}}protected override void OnHandleDestroyed(EventArgs e){base.OnHandleDestroyed(e);if (pRD != IntPtr.Zero){CardApi.IdcrClose(pRD);pRD = IntPtr.Zero;}CardApi.IdcrFinalize();if (photo != null){photo.Dispose();photo = null;}}void Clear(){cardType = 0;person.name = null;person.sexCode = null;person.sex = null;person.ethnicCode = null;person.ethnic = null;person.birthDate = null;person.address = null;person.idNumber = null;person.issuer = null;person.effectDate = null;person.expiryDate = null;person.appendInfo = null;foreigner.englishName = null;foreigner.sexCode = null;foreigner.sex = null;foreigner.prNumber = null;foreigner.countryCode = null;foreigner.country = null;foreigner.chineseName = null;foreigner.effectDate = null;foreigner.expiryDate = null;foreigner.birthDate = null;foreigner.version = null;foreigner.issuerCode = null;foreigner.issuer = null;compatriot.name = null;compatriot.sexCode = null;compatriot.sex = null;compatriot.birthDate = null;compatriot.address = null;compatriot.idNumber = null;compatriot.issuer = null;compatriot.effectDate = null;compatriot.expiryDate = null;compatriot.passNumber = null;compatriot.issueCount = null;fpInfo.fingerName1 = null;fpInfo.fingerName2 = null;birthDate = null;validTerm = null;if (photo != null){photo.Dispose();photo = null;}}string ConvertDate(string str, int mode){string year;string month;string day;if (1 == mode){if (str.Length >= 8){year = str.Substring(0, 4);month = str.Substring(4, 2);day = str.Substring(6, 2);return string.Format("{0}年{1}月{2}日", year, month, day);}}else{if (str.Equals("长期")){return "长期";}else{if (str.Length >= 8){year = str.Substring(0, 4);month = str.Substring(4, 2);day = str.Substring(6, 2);return string.Format("{0}.{1}.{2}", year, month, day);}}}return "";}}
}

JAVA

(1)必须使用32位JDK和JRE.
(2)依赖jar:  jna-4.5.0.jar和jna-platform-4.5.0.jar
(3)cardapi7.dll、sdtapi.dll、WltRS.dll、license.dat文件复制到生成的目录。(C盘和程序目录都要放)

生成的图片保存在当前用户临时目录中。Win7下为C:\Users\[用户名]\AppData\Local\Temp

注:JNA好像只能用绝对路径调用,部署时候需要自己指定下cardapi7.dll路径即可,我是直接放C盘根目录。

package com.shpte.idcard;import java.io.*;
import java.util.*;
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.*;public class Card2{public static class PERSONINFOW extends Structure{public PERSONINFOW(){setAlignType(ALIGN_MSVC);}@Override  protected List<String> getFieldOrder(){return Arrays.asList(new String[] {"name","sexCode","sex","ethnicCode","ethnic","birthDate","address","idNumber","issuer","effectDate","expiryDate","appendInfo"});}public char[]name      =new char[16];public char[]sexCode   =new char[2];public char[]sex       =new char[2];public char[]ethnicCode=new char[4];public char[]ethnic    =new char[10];public char[]birthDate =new char[10];public char[]address   =new char[36];public char[]idNumber  =new char[20];public char[]issuer    =new char[16];public char[]effectDate=new char[10];public char[]expiryDate=new char[10];public char[]appendInfo=new char[36];}public static class FOREIGNERINFOW extends Structure{public FOREIGNERINFOW(){setAlignType(ALIGN_MSVC);}@Override  protected List<String> getFieldOrder(){return Arrays.asList(new String[] {"englishName","sexCode","sex","prNumber","countryCode","country","chineseName","effectDate","expiryDate","birthDate","version","issuerCode","issuer"});}public char[]englishName=new char[62];public char[]sexCode    =new char[2];public char[]sex        =new char[4];public char[]prNumber   =new char[16];public char[]countryCode=new char[4];public char[]country    =new char[20];public char[]chineseName=new char[16];public char[]effectDate =new char[10];public char[]expiryDate =new char[10];public char[]birthDate  =new char[10];public char[]version    =new char[4];public char[]issuerCode =new char[6];public char[]issuer     =new char[48];}public static class COMPATRIOTINFOW extends Structure{public COMPATRIOTINFOW(){setAlignType(ALIGN_MSVC);}@Override  protected List<String> getFieldOrder(){return Arrays.asList(new String[] {"name","sexCode","sex","birthDate","address","idNumber","issuer","effectDate","expiryDate","passNumber","issueCount"});}public char[]name      =new char[16];public char[]sexCode   =new char[2];public char[]sex       =new char[2];public char[]birthDate =new char[10];public char[]address   =new char[36];public char[]idNumber  =new char[20];public char[]issuer    =new char[16];public char[]effectDate=new char[10];public char[]expiryDate=new char[10];public char[]passNumber=new char[10];public char[]issueCount=new char[4];}public static class FPINFOW extends Structure{public FPINFOW(){setAlignType(ALIGN_MSVC);}@Override  protected List<String> getFieldOrder(){return Arrays.asList(new String[] {"fpData1","fpData2","fingerName1","fingerName2"});}public byte[]fpData1=new byte[512];public byte[]fpData2=new byte[512];public char[]fingerName1=new char[8];public char[]fingerName2=new char[8];}public interface CardApi extends StdCallLibrary{CardApi INSTANCE =(CardApi)Native.loadLibrary("cardapi7.dll",CardApi.class);public int IdcrInitialize(int dwFlags);public int IdcrOpen(IntByReference piPort, int dwBaudRate, int dwCmdIntv, int iBpPort, PointerByReference ppRD);public int IdcrFindCard(Pointer pRD);public int IdcrSelectCard(Pointer pRD);public int IdcrReadCard(Pointer pRD, int bReadFP, IntByReference piCardType);public int IdcrValidate(Pointer pRD, int bReadFP, IntByReference piCardType, int bRepeatRead);public int IdcrGetIDInfoW(Pointer pRD, PERSONINFOW pTextInfo, WString pszPhotoPath, FPINFOW pFPInfo);public int IdcrGetPRInfoW(Pointer pRD, FOREIGNERINFOW pTextInfo, WString pszPhotoPath, FPINFOW pFPInfo);public int IdcrGetHMTInfoW(Pointer pRD, COMPATRIOTINFOW pTextInfo, WString pszPhotoPath, FPINFOW pFPInfo);public void IdcrClose(Pointer pRD);public void IdcrFinalize();public void IdcrGetErrorDescW(char[]pszBuffer, int nBufLen, int nErrorCode);}public static String CStrToString(char[]str){int i=0;while(i<str.length && str[i]!=0){i++;}return new String(str,0,i);}public static void printError(String funcName, int result){char[]errorText=new char[32];CardApi.INSTANCE.IdcrGetErrorDescW(errorText,errorText.length,result);String str=String.format("%s Error:0x%X %s\n",funcName,result,CStrToString(errorText));System.out.println(str);}public static void main(String[]args) throws IOException{int ch;int result;IntByReference piPort=new IntByReference(0);PointerByReference ppRD=new PointerByReference();IntByReference piCardType=new IntByReference(0);Pointer pRD;int iCardType;PERSONINFOW person=new PERSONINFOW();FOREIGNERINFOW foreigner=new FOREIGNERINFOW();COMPATRIOTINFOW compatriot=new COMPATRIOTINFOW();FPINFOW fpInfo=new FPINFOW();String str=System.getProperty("java.io.tmpdir")+"photo.bmp";WString photoPath=new WString(str);result=CardApi.INSTANCE.IdcrInitialize(1);if(0!=result){printError("IdcrInitialize",result);return;}System.out.println("按Enter键打开端口");ch=System.in.read();System.in.read();result=CardApi.INSTANCE.IdcrOpen(piPort,115200,0,0,ppRD);if(0!=result){CardApi.INSTANCE.IdcrFinalize();printError("IdcrOpen",result);return;}pRD=ppRD.getValue();do{System.out.println("按'q'键退出,按Enter键读卡");ch=System.in.read();System.in.read();if(ch=='q'){break;}result=CardApi.INSTANCE.IdcrValidate(pRD, 1, piCardType, 1);if(0!=result){printError("IdcrValidate",result);continue;}iCardType=piCardType.getValue();if(1==iCardType){result=CardApi.INSTANCE.IdcrGetIDInfoW(pRD, person, photoPath, fpInfo);if(0==result){System.out.println(CStrToString(person.name));System.out.println(CStrToString(person.sex));System.out.println(CStrToString(person.ethnic));System.out.println(CStrToString(person.birthDate));System.out.println(CStrToString(person.address));System.out.println(CStrToString(person.idNumber));System.out.println(CStrToString(person.issuer));System.out.println(CStrToString(person.effectDate));System.out.println(CStrToString(person.expiryDate));System.out.println(CStrToString(fpInfo.fingerName1));System.out.println(CStrToString(fpInfo.fingerName2));}else{printError("IdcrGetIDInfoW",result);}}else if(2==iCardType){result=CardApi.INSTANCE.IdcrGetPRInfoW(pRD, foreigner, photoPath, fpInfo);if(0==result){System.out.println(CStrToString(foreigner.englishName));System.out.println(CStrToString(foreigner.sex));System.out.println(CStrToString(foreigner.prNumber));System.out.println(CStrToString(foreigner.country));System.out.println(CStrToString(foreigner.chineseName));System.out.println(CStrToString(foreigner.effectDate));System.out.println(CStrToString(foreigner.expiryDate));System.out.println(CStrToString(foreigner.birthDate));System.out.println(CStrToString(foreigner.issuer));System.out.println(CStrToString(fpInfo.fingerName1));System.out.println(CStrToString(fpInfo.fingerName2));}else{printError("IdcrGetPRInfoW",result);}}else if(3==iCardType){result=CardApi.INSTANCE.IdcrGetHMTInfoW(pRD, compatriot, photoPath, fpInfo);if(0==result){System.out.println(CStrToString(compatriot.name));System.out.println(CStrToString(compatriot.sex));System.out.println(CStrToString(compatriot.birthDate));System.out.println(CStrToString(compatriot.address));System.out.println(CStrToString(compatriot.idNumber));System.out.println(CStrToString(compatriot.issuer));System.out.println(CStrToString(compatriot.effectDate));System.out.println(CStrToString(compatriot.expiryDate));System.out.println(CStrToString(compatriot.passNumber));System.out.println(CStrToString(compatriot.issueCount));System.out.println(CStrToString(fpInfo.fingerName1));System.out.println(CStrToString(fpInfo.fingerName2));}else{printError("IdcrGetHMTInfoW",result);}}}while(true);CardApi.INSTANCE.IdcrClose(pRD);CardApi.INSTANCE.IdcrFinalize();}
}

二代身份证阅读器 C#、JAVA调用教程相关推荐

  1. 神思二代身份证阅读器集成WEB实例文档js及说明

    神思二代身份证阅读器使用说明 --By wuhebin 20180705 1.      硬件说明:神思SS628(100)台式二代身份证阅读器 2.    神思阅读器仅支持IE浏览器或者兼容IE浏览 ...

  2. 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发

    人工智能的兴起,最近这段时间碰到很多开发工程师咨询Python语言二次开发使用身份证阅读器的问题,这次特增加了Python语言的demo,供大家参考使用. 先上Python界面的读取效果图: 1.说明 ...

  3. 二代身份证阅读器(XZX)

    问题一 解决方法: 通常我把所有的dll复制到system32文件夹,64位系统复制到sysWOW64文件夹,而且编译选项CPU要选择X86 问题二 解决方法: 图片路径默认是C:\,对C:\没有写的 ...

  4. delphi 二代身份证阅读器开发 SDT_ReadBaseMsg函数

    C++中函数原型: STDAPI_API int WINAPI SDT_ReadBaseMsg( int iPort, unsigned char * pucCHMsg, unsigned int * ...

  5. delphi 二代身份证阅读器 SDT_ReadBaseMsg()读取到的照片数据进行处理问题

    SDT_ReadBaseMsg(1001,@pucCHMsg,puiCHMsgLen,@pucPHMsg,puiPHMsgLen,1);//获取读卡数据  pucCHMsg 文字信息(unicode编 ...

  6. C#如何读取身份证阅读器

    不同的身份证读卡器,其动态库不一样,新中新二代身份证阅读器,型号:DKQ-A16D,eg: using System; using System.Collections.Generic; using  ...

  7. IE浏览器使用js调用阅读插件调用二代证阅读器读取身份证信息

    IE浏览器身份证阅读插件,使用js调用阅读插件调用二代证阅读器读取身份证信息(支持中盾身份证阅读设备,如需支持其它设备可与我联系QQ:19937243:E-Mail:nxiaoping@163.com ...

  8. IE下使用js调用阅读插件调用二代证阅读器读取身份证信息

    插件下载地址 http://download.csdn.net/detail/nxiaoping/5974003 js代码 var sRead=new ActiveXObject("TSFZ ...

  9. 华视100UC 身份证阅读器 Java

    华视100UC 身份证阅读器 Java 哪位大佬有64位可用的dll文件,施舍给小弟吧,万分感谢 功能 环境 个人想法(有不对的地方希望大佬指正) 对于dll文件的想法 目录结构 1. pom.xml ...

最新文章

  1. python-django框架中使用docker和elasticsearch配合实现搜索功能
  2. php 生成器 教程,PHP扩展生成器_PHP教程
  3. 从零开始单排学设计模式「策略模式」黑铁 II
  4. Qt笔记-Q3DScatter中元素的移动和旋转
  5. 互联网公司的安全风险
  6. android读写相册权限,androidQ 关于存储权限相册图片
  7. python控制ppt定时_python中使用requests实现自动回帖.ppt
  8. 测试需要了解的技术之基础篇四__UI自动化测试体系
  9. php 唤醒http进程,真正的PHP多线程(绝非fork或者用http再开进程)_PHP教程
  10. 操作系统—进程的定义、组成和组织方式(思维导图)
  11. http://www.uupoop.com/ps/
  12. C语言控制台窗口图形界面编程(六):光标操作
  13. CactiEZ-优化操作
  14. JUC:6_1集合类并发问题、集合类并发不安全解决方案1:list
  15. 谁在崛起,谁在没落?新一线城市竞争力盘点,用Python绘制动态图带你看懂!...
  16. ros rviz显示rosbag中的图像和imu数据
  17. Linux系统软件安装及项目发布
  18. 基于sanic打造python web框架
  19. NuxtJS 项目部署如何部署到nginx
  20. Day42 JavaScript-2

热门文章

  1. python百分号用法_python里百分号
  2. Cocos2d-x v3.10安装及安卓开发环境搭建
  3. 如何解决 cdo转换经度-180~180 为0~360时出现报错:cdo sellonlatbox: Unsupported grid type: generic的问题
  4. Win10系统开始菜单无法点击解决方法分享
  5. 美国专线物流详解:美国专线物流有哪些平台
  6. 2023年你应该关注的JavaScript趋势
  7. CnOpenData中国绿色专利分地区统计数据
  8. CSDN中markdown编辑器如何实现首行缩进
  9. mac_phy_网卡_网口.docx
  10. Android 系统服务 - PMS 的启动过程