说明:本人用的是精伦身份证阅读器idr210 免驱

摘要:目前市面上读取身份证技术已经很成熟了,大多数文章都介绍了读取身份证的详细信息,但是这些信息里并不包含身份证的物理卡号,所以本文讲解的重点在读取身份证的物理卡号,这也是博主在开发过程中踩到的一个坑

什么是物理卡号?

我们目前所用的所有电子卡,无论是身份证还是IC卡,甚至是银行卡,它都有一个自己的唯一标识,该标识就是物理卡号,精伦读卡器读出的身份证物理卡号是138EC00375381712这样的一个格式,下面就上代码。

需要接入精伦提供的库文件:

Dewlt.dll

JpgDll.dll

SavePhoto.dll

Sdtapi.dll

Sdtapi_bkup.dll

System.Web.Services.dll

WltRS.dll

以上库文件需要的下面留言

新建一个控制台应用程序,导入以上几个库文件,使用本代码即可运行

1、身份证信息Model类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyReadCard
{class IdCardMessageDto{/// <summary>/// 证件号/// </summary>public string Code { get; set; }/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// 性别/// </summary>public string Gender { get; set; }/// <summary>/// 民族/// </summary>public string Folk { get; set; }/// <summary>/// 生日/// </summary>public string BirthDay { get; set; }/// <summary>/// 家庭地址/// </summary>public string Address { get; set; }/// <summary>/// 签发机关/// </summary>public string Agency { get; set; }/// <summary>/// 有效期起始日期/// </summary>public string ExpireStart { get; set; }/// <summary>/// 有效期截止日期/// </summary>public string ExpireEnd { get; set; }/// <summary>/// 照片/// </summary>public string photo { get; set; }/// <summary>/// 物理卡号/// </summary>public string IINSNDN { get; set; }}
}

该类是身份证信息model类,这个不用多说,IINSNDN这个字段就是物理卡号字段

2、读取身份证信息类

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace MyReadCard
{class ReadIdCardHelper{#region Api[DllImport("Sdtapi.dll")]private static extern int InitComm(int iPort);[DllImport("Sdtapi.dll")]private static extern int Authenticate();[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 ReadBaseInfosPhoto(StringBuilder Name, StringBuilder Gender, StringBuilder Folk,StringBuilder BirthDay, StringBuilder Code, StringBuilder Address,StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd, StringBuilder directory);[DllImport("Sdtapi.dll")]private static extern int ReadBaseInfosFPPhoto(StringBuilder Name, StringBuilder Gender, StringBuilder Folk,StringBuilder BirthDay, StringBuilder Code, StringBuilder Address,StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd, StringBuilder directory, StringBuilder pucFPMsg, ref int puiFPMsgLen);[DllImport("Sdtapi.dll")]private static extern int Routon_DecideIDCardType();[DllImport("Sdtapi.dll")]private static extern int Routon_ReadAllForeignBaseInfos(StringBuilder EnName, StringBuilder Gender, StringBuilder Code, StringBuilder Nation, StringBuilder CnName, StringBuilder BirthDay, StringBuilder ExpireStart, StringBuilder ExpireEnd, StringBuilder CardVertion, StringBuilder Agency, StringBuilder CardType, StringBuilder FutureItem);[DllImport("Sdtapi.dll")]private static extern int Routon_ReadAllGATBaseInfos(StringBuilder Name, StringBuilder Gender, StringBuilder FutureItem1, StringBuilder BirthDay, StringBuilder Address, StringBuilder Code, StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd, StringBuilder PassID, StringBuilder SignCnt, StringBuilder FutureItem2, StringBuilder CardType, StringBuilder FutureItem3);[DllImport("Sdtapi.dll")]private static extern int CloseComm();[DllImport("Sdtapi.dll")]private static extern int ReadBaseMsg(byte[] pMsg, ref int len);[DllImport("Sdtapi.dll")]private static extern int ReadBaseMsgW(byte[] pMsg, ref int len);[DllImport("Sdtapi.dll")]private static extern int Routon_IC_FindCard();[DllImport("Sdtapi.dll")]private static extern int Routon_IC_HL_ReadCardSN(StringBuilder SN);[DllImport("Sdtapi.dll")]private static extern int Routon_RepeatRead(bool isRepeat);[DllImport("Sdtapi.dll")]private static extern int Routon_ReadIINSNDN(StringBuilder IINS);[DllImport("Sdtapi.dll")]private static extern int ReadIINSNDN(StringBuilder IINS);#endregionpublic static string IdCardInfoData = "";static public void readCard(ref IdCardMessageDto idCardMessage){IdCardInfoData = "";Routon_RepeatRead(true);//打开端口int intOpenRet = InitComm(1001);if (intOpenRet != 1){return ;}//卡认证int intReadRet = Authenticate();if (intReadRet != 1){CloseComm();return ;}int cardType = Routon_DecideIDCardType();if (cardType == 100)//身份证{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);StringBuilder CardId = new StringBuilder(16);StringBuilder directory = new StringBuilder(100);StringBuilder pucFPMsg = new StringBuilder(1024);StringBuilder IINS = new StringBuilder(16);int intReadBaseInfosRet = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);if (intReadBaseInfosRet != 1){CloseComm();return ;}int intReadIINS = ReadIINSNDN(IINS);if (intReadIINS != 1){CloseComm();return ;}idCardMessage = new IdCardMessageDto();idCardMessage.Code = Code.ToString().Trim();idCardMessage.Name = Name.ToString().Trim();idCardMessage.Gender = Gender.ToString().Trim();idCardMessage.Folk = Folk.ToString().Trim();idCardMessage.BirthDay = BirthDay.ToString().Trim();idCardMessage.Address = Address.ToString().Trim();idCardMessage.Agency = Agency.ToString().Trim();idCardMessage.ExpireStart = ExpireStart.ToString().Trim();idCardMessage.ExpireEnd = ExpireEnd.ToString().Trim();idCardMessage.IINSNDN = IINS.ToString().Trim();idCardMessage.photo = System.IO.Directory.GetCurrentDirectory() + "\\photo.bmp";IdCardInfoData = JsonConvert.SerializeObject(idCardMessage);}}}
}

[DllImport("Sdtapi.dll")]
   private static extern int ReadIINSNDN(StringBuilder IINS);   这里就是调用精伦dll库里读取物理卡号的方法

int intReadIINS = ReadIINSNDN(IINS);  将读取到的物理卡号存储到IINS里
  if (intReadIINS != 1)
  {
         CloseComm();
          return ;
     }

读取到物理卡号 intReadIINS 的值就为1

3、Program调用类

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyReadCard
{class Program{public static string IdCardInfoData = "";static void Main(string[] args){IdCardMessageDto idCardMessage = null;           ReadIdCardHelper.readCard(ref idCardMessage);IdCardInfoData = ReadIdCardHelper.IdCardInfoData;//var data = JsonConvert.DeserializeObject<IdCardMessageDto>(IdCardInfoData);Console.WriteLine(IdCardInfoData);}}
}

C#使用读卡器读取身份证信息(包含物理卡号)相关推荐

  1. 基于华视身份证读卡器读取身份证信息的Android demo

    项目概述 本Demo需要华视的身份证读卡器,连接Android机器设备,当身份证读卡器读取到身份证信息后,立马展示出身份证信息数据.得到身份证的姓名.照片.出生年月等数据. 项目概述 本Demo需要华 ...

  2. VB.Net实现身份证读卡器调用读取身份证信息和社保卡信息

    VB.Net读取身份证效果图 读取社保卡效果图 VB.Net读身份证工程下载链接 下面是EST-100系列身份证读卡器VB.Net的全部代码: Public Class Form1Private Su ...

  3. 浏览器使用华视电子设备读取身份证信息

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家. 对人工智能感兴趣或者想了解的小伙伴,可以点击跳转到网站一起学习哟. https://www.captainai.ne ...

  4. android通过USB读取身份证信息

    一.USB的通信流程 搜索设备->建立连接->通信 , 全部代码请 "戳这" 1.搜索设备 /*** 获取目标UsbDevice* @param view*/publi ...

  5. VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)

    本文是用了vue+element来实现华视身份证读卡器读取身份信息的,当然在开发之前要做好前提准备,就是厂家提供对应设备的api和安装对应的驱动.本文通过两种方法来实现读取信息,第一种是点击按钮读取信 ...

  6. 基于Android NFC传感器读取身份证信息demo

    摘要:通过导入开发包sdk开发基几Android NFC设备读取身份证信息 1. 开发条件: 1)鱼住往来科技的身份验证sdk :下载地址:https://www.yzfuture.cn/views/ ...

  7. 用python读取身份证信息的功能分析与实现,兼述python调用dll的方法

    背景 有这样一个需求,要求能自动读取用户的身份证信息.如果是一代身份证,这个功能恐怕只能通过图像识别的办法来解决了.不过现在二代身份证已经很普及.客户要求能读二代身份证就可以了. 现在二代身份证阅读器 ...

  8. C# 使用串口分析SAM协议,读取身份证信息

    目录 一.身份证读卡器使用SAM协议使用以下报文进行通讯: 1.寻找身份证信息 2.选取身份证信息 3.读取身份证信息(文字+照片信息) 4 .读取身份证信息(文字+照片+指纹特征点信息) 二.程序介 ...

  9. 身份证读取设备开发解决方案:2、Android下通过usb转串口读取身份证信息

    身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 1. 前言 2. 准备 3. ...

最新文章

  1. 求相关和卷积的full和same
  2. Maven使用笔记(四)pom.xml配置详解
  3. ScrollView的使用
  4. 视频百教程度云_腾讯视频的进击
  5. 最全的 eclipse web 项目目录结构
  6. python 扯线木偶_Python计算器求助~求大神指导~QAQ急!
  7. 使用python调用matlab方法
  8. oracle数据库主键消失,oracle数据库提示找不到主键
  9. 《天天数学》连载39:二月八日
  10. 一张图理解什么是TP、TN、FP、FN
  11. Python Error: “ImportError: No module named six”,用自动安装解决依赖问题
  12. LUT Utility for FCPX(Luts调色文件加载工具)
  13. IPSEC 安全连接
  14. VBS脚本运行库 ——文本文件的建立、追加、删除等
  15. 检测移动设备(手机)的 PHP 类库
  16. 11月安全回顾:你造吗?短信验证码未必可靠
  17. 实景三维模型修补水面方法汇总及对比(DPmodeler、模方等)
  18. [网站推荐] 百度识图
  19. Mysql报错130_Mysql报错Forcing close of thread 139 user: 'root'
  20. ThreadLocalMap里弱引用

热门文章

  1. Java 面试问题汇总
  2. 聚合固码,聚合支付接口,三方支付接口
  3. 离散数学——集合论(一)
  4. 手动清除explorer.exe病毒
  5. sqlserver2000换成mysql_将SQL Server 2000数据导入到MySQL 5.5的方法
  6. iMagic,开启属于您的魔灯时刻
  7. CAD2023下载安装教程
  8. JETSON XAVIER NX 入门教程(一)入手刷机过程
  9. [原创]万能杀毒,打造手工杀毒高手
  10. 学习英语的11个好习惯