一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了。【示例源码下载
这里我说说我的解决思路:
一、你必要有联机型居民身份证阅读器一个(带驱动光盘),这里我用的是精伦电子公司的iDR200,并有这个阅读器的开发接口说明。
二、新建一个winform控件项目ReadCardControl,添加一个主类ReadCard
1、 声明dll入口

  1. [DllImport("Sdtapi.dll")]
  2. private static extern int InitComm(int iPort);//初始化
  3. [DllImport("Sdtapi.dll")]
  4. private static extern int Authenticate();//卡认证
  5. [DllImport("Sdtapi.dll")]
  6. private static extern int ReadBaseInfos(StringBuilder Name, StringBuilder Gender, StringBuilder Folk, StringBuilder BirthDay, StringBuilder Code, StringBuilder Address, StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd);//读取数据,推荐使用
  7. [DllImport("Sdtapi.dll")]
  8. private static extern int CloseComm();//关闭端口
  9. [DllImport("Sdtapi.dll")]
  10. private static extern int ReadBaseMsg(byte[] pMsg, ref int len);//读取数据,这里不用
  11. [DllImport("Sdtapi.dll")]
  12. private static extern int ReadBaseMsgW(byte[] pMsg, ref int len);//读取数据,这里不用
  13. [DllImport("kernel32.dll")]
  14. private static extern int Beep(int dwFreq, int dwDuration);//用来大吼一声

2、读卡方法

  1. private string[] arrys = null;//声明用来保存身份证信息的数组
  2. public void OnTimer()
  3. {
  4. StringBuilder Name = new StringBuilder(31);
  5. StringBuilder Gender = new StringBuilder(3);
  6. StringBuilder Folk = new StringBuilder(10);
  7. StringBuilder BirthDay = new StringBuilder(9);
  8. StringBuilder Code = new StringBuilder(19);
  9. StringBuilder Address = new StringBuilder(71);
  10. StringBuilder Agency = new StringBuilder(31);
  11. StringBuilder ExpireStart = new StringBuilder(9);
  12. StringBuilder ExpireEnd = new StringBuilder(9);
  13. //int len = 0;
  14. //string[] temp;
  15. char[] param = { '\0' };
  16. byte[] pMsg = new byte[256];
  17. string[] baseinfo = new string[9];
  18. //打开端口
  19. int intOpenRet = InitComm(1001);
  20. if (intOpenRet != 1)
  21. {
  22. //SetText("阅读机具未连接", lblMsg);
  23. return;
  24. }
  25. //卡认证
  26. int intReadRet = Authenticate();
  27. if (intReadRet != 1)
  28. {
  29. //SetText("卡认证失败", lblMsg);
  30. CloseComm();
  31. return;
  32. }
  33. //ReadBaseInfos(推荐使用)
  34. int intReadBaseInfosRet = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);
  35. if (intReadBaseInfosRet != 1)
  36. {
  37. //SetText("读卡失败", lblMsg);
  38. CloseComm();
  39. return;
  40. }
  41. Beep(2047, 200);
  42. arrys = new string[10];
  43. arrys[0] = Code.ToString().Trim();
  44. arrys[1] = Name.ToString().Trim();
  45. arrys[2] = Gender.ToString().Trim();
  46. arrys[3] = Folk.ToString().Trim();
  47. arrys[4] = BirthDay.ToString().Trim();
  48. arrys[5] = Address.ToString().Trim();
  49. arrys[6] = Agency.ToString().Trim();
  50. arrys[7] = ExpireStart.ToString().Trim();
  51. arrys[8] = ExpireEnd.ToString().Trim();
  52. arrys[9] = System.IO.Directory.GetCurrentDirectory() + "\\photo.bmp";
  53. //SetText("读卡成功", lblMsg);
  54. //SetText("证件号码:" + Code.ToString(), label1);
  55. //SetText("姓名:" + Name.ToString(), label2);
  56. //SetText("性别:" + Gender.ToString(), label3);
  57. //SetText("民族:" + Folk.ToString(), label4);
  58. //SetText("出生日期:" + BirthDay.ToString(), label5);
  59. //SetText("地址:" + Address.ToString(), label6);
  60. //SetText("签发机关:" + Agency.ToString(), label7);
  61. //SetText("签发时间:" + ExpireStart.ToString(), label8);
  62. //SetText("有效截止时间:" + ExpireEnd.ToString(), label9);
  63. SetImage("photo.bmp", pictureBox1);
  64. CloseComm();
  65. }

3、 声明一个客户端调用的方法Test(这里没有直接用数组,我试的结果是节目不能调用数组)

  1. public string Test()
  2. {
  3. string str = "";
  4. foreach (string s in arrys)
  5. {
  6. str += s + ",";
  7. }
  8. str = str.TrimEnd(',');
  9. return str;
  10. }

三、将这个控件封装成activex组件
在ReadCard类的头部添加

  1. [Guid("B9BB196C-5008-4156-840F-9FE37BA81502")]

若要实现客户端访问服务器端数据,则必须实现IObjectSafe接口
接口声明如下:

  1. [ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
  2. [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  3. public interface IObjectSafe
  4. {
  5. [PreserveSig]
  6. void GetInterfaceSafeOptions(ref Guid id, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);
  7. [PreserveSig()]
  8. void SetInterfaceSafeOptions(ref Guid id, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
  9. }
  10. #region UI设计
  11. /// <summary>
  12. /// 必需的设计器变量。
  13. /// </summary>
  14. private System.ComponentModel.IContainer components = null;
  15. /// <summary>
  16. /// 清理所有正在使用的资源。
  17. /// </summary>
  18. /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
  19. protected override void Dispose(bool disposing)
  20. {
  21. if (disposing && (components != null))
  22. {
  23. components.Dispose();
  24. }
  25. base.Dispose(disposing);
  26. }
  27. #region 组件设计器生成的代码
  28. /// <summary>
  29. /// 设计器支持所需的方法 - 不要
  30. /// 使用代码编辑器修改此方法的内容。
  31. /// </summary>
  32. private void InitializeComponent()
  33. {
  34. this.pictureBox1 = new System.Windows.Forms.PictureBox();
  35. ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
  36. this.SuspendLayout();
  37. //
  38. // pictureBox1
  39. //
  40. this.pictureBox1.Location = new System.Drawing.Point(3, 3);
  41. this.pictureBox1.Name = "pictureBox1";
  42. this.pictureBox1.Size = new System.Drawing.Size(100, 130);
  43. this.pictureBox1.TabIndex = 12;
  44. this.pictureBox1.TabStop = false;
  45. //
  46. // ReadCard
  47. //
  48. this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
  49. this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  50. this.Controls.Add(this.pictureBox1);
  51. this.Name = "ReadCard";
  52. this.Size = new System.Drawing.Size(107, 135);
  53. ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
  54. this.ResumeLayout(false);
  55. }
  56. #endregion
  57. private System.Windows.Forms.PictureBox pictureBox1;
  58. #endregion

四、新建一个web应用程序项目
1、界面:

  1. <table style="width:100%;" border="1" width="100%" bordercolordark="#FFFFFF" cellspacing="0" cellpadding="2" bordercolor="#000000">
  2. <tr>
  3. <td style="width:33.3%; text-align: right;">证件号码:</td>
  4. <td style="width:33.3%" id="td1">&nbsp;</td>
  5. <td style="width:33.3%; text-align: left;" rowspan="6">
  6. <object id="csharpActiveX" name="csharpActiveX" classid="clsid:B9BB196C-5008-4156-840F-9FE37BA81502"></object></td>
  7. </tr>
  8. <tr>
  9. <td style="text-align: right">姓名:</td>
  10. <td id="td2">&nbsp;</td>
  11. </tr>
  12. <tr>
  13. <td style="text-align: right">性别:</td>
  14. <td id="td3">&nbsp;</td>
  15. </tr>
  16. <tr>
  17. <td style="text-align: right">民族:</td>
  18. <td id="td4">&nbsp;</td>
  19. </tr>
  20. <tr>
  21. <td style="text-align: right">出生日期:</td>
  22. <td id="td5">&nbsp;</td>
  23. </tr>
  24. <tr>
  25. <td style="text-align: right">地址:</td>
  26. <td id="td6">&nbsp;</td>
  27. </tr>
  28. <tr>
  29. <td style="text-align: right">签发机关:</td>
  30. <td id="td7">&nbsp;</td>
  31. <td>&nbsp;</td>
  32. </tr>
  33. <tr>
  34. <td style="text-align: right">签发时间:</td>
  35. <td id="td8">&nbsp;</td>
  36. <td>&nbsp;</td>
  37. </tr>
  38. <tr>
  39. <td style="text-align: right">有效截止时间:</td>
  40. <td id="td9">&nbsp;</td>
  41. <td>&nbsp;</td>
  42. </tr>
  43. </table>

2、Javascript代码:

  1. function Demo() {
  2. try {
  3. var x = document.getElementById("csharpActiveX");
  4. x.OnTimer();//读取图片
  5. var v = x.Test();//读取身份证其他信息
  6. var arrys = v.split(',');
  7. if (arrys.length > 9) {
  8. document.getElementById("td1").innerHTML = arrys[0];
  9. document.getElementById("td2").innerHTML = arrys[1];
  10. document.getElementById("td3").innerHTML = arrys[2];
  11. document.getElementById("td4").innerHTML = arrys[3];
  12. document.getElementById("td5").innerHTML = arrys[4];
  13. document.getElementById("td6").innerHTML = arrys[5];
  14. document.getElementById("td7").innerHTML = arrys[6];
  15. document.getElementById("td8").innerHTML = arrys[7];
  16. document.getElementById("td9").innerHTML = arrys[8];
  17. }
  18. }
  19. catch (e) {
  20. //alert(e.message)
  21. }
  22. }
  23. setInterval(Demo, 1000);//设置每隔1秒钟读取一次

截个效果图:

转载于:https://www.cnblogs.com/liufei88866/archive/2010/06/17/1759702.html

ASP.NET程序读取二代身份证(附源码)相关推荐

  1. STM32F4 读取双相编码器(附源码)

    STM32F4 读取AB相编码器(附源码) 1. 原理 1.1 AB相编码器 AB相编码器,简而言之,就是有两路输出的脉冲信号,通过对脉冲计数,可以知道转动了多少角度. 读取编码器的数据也就是要让单片 ...

  2. 分享下 NET程序读取二代身份证(附源码

    一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了. 这里我说说我的解决思路: 一.你必要有联机型居民身份证阅读器一个(带驱动光盘),这里我用的是精伦电子公司的iDR ...

  3. 分享下.NET程序读取二代身份证(附源码

    一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了. 这里我说说我的解决思路: 一.你必要有联机型居民身份证阅读器一个(带驱动光盘),这里我用的是精伦电子公司的iDR ...

  4. KindEditor ASP.NET 上传/浏览服务器 附源码

    KindEditor是一个不错的网页在线编辑器, 早就想把它用在自己的项目中 可是它只提供了asp,hp,jsp上传的类, 没有提供Asp.net的上传和浏览程序. 当时看的是PHP的搞的一头雾水.. ...

  5. ASP.NET CORE 入门教程(附源码)

    ASP.NET CORE 入门教程 第一课 基本概念 基本概念 Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架 符合Web应用特点 .NET Core跨平台解决方案 ...

  6. 爬虫篇-小程序后台数据获取【附源码】

    文章目录 前言 一.分析小程序及后台 二.使用步骤 1.引入库 2.用代码构建一个模拟浏览器 3.设置好需要请求的网址连接 4.分析验证码 5.模拟登陆 总结 前言   鉴于网上以及视频教材很多都是直 ...

  7. 基于SpringBoot + Vue的小程序商城项目(附源码),支持分销、团购、秒杀、优惠券。。。...

    前些时候一直有粉丝让我分享带分销的商城项目,网上收集了一波,希望能帮到大家. 面向对象 该程序是企业在创立初期很好的技术基础框架,加快公司项目开发进度,当然也可以对现有的系统进行升级: 个人开发者也可 ...

  8. 2020最新版影评小程序搭建教程(附源码获取渠道)

    废话不多说现在进入搭建教程! 首先就是 环境要求: 这里我推荐使用宝塔安装LNMP服务器环境 使用宝塔的前提是你的服务器是刚购置的,或者重新安装的没有任何东西的 安装好后直接选择 linux ngin ...

  9. 商城类小程序开发全过程(附源码)

    商城类小程序是所有类别小程序中开发的热点,但其相对于其他类别的小程序,具有逻辑复杂.功能需求较大等特点,因此,对开发者具有一定的基础要求. 那我们就止步于前了吗? 当然不! 本文主要讲述商城小程序开发 ...

  10. 基于SpringBoot vue的小程序商城项目(附源码),支持分销、团购

    来源:微同科技 前些时候一直有粉丝让我分享带分销的商城项目,网上收集了一波,希望能帮到大家. # 面向对象 该程序是企业在创立初期很好的技术基础框架,加快公司项目开发进度,当然也可以对现有的系统进行升 ...

最新文章

  1. 软件测试人员必备Linux命令(初、中、高级)
  2. unicode 版本 delphi (如XE2)的 TBytes 转换为 AnsiString
  3. 实战SSM_O2O商铺_42【前端展示】店铺列表页面View层的实现
  4. 2阶节IIR算法C语言源码
  5. Markdown 编辑器才是yyds|CSDN编辑器测评
  6. 数据库的事务级别介绍与操作
  7. Unix 多进程编程
  8. jinfo-jvm参数信息工具
  9. 为传递函数自动设定PID参数——pidtune学习笔记
  10. PCL计算点云的法线
  11. 打开客户端出现 sorry this application cannot run under a virtual machine错误
  12. cas session共享
  13. Affinity笔记:渐变工具
  14. fortran - 用函数进行kind定义
  15. 儿童节html模板,六一儿童节作文350字满分模板
  16. 决策树(信息熵—GINI)计算习题
  17. LTE学习笔记 ——PLMN选择
  18. 谷歌浏览器:无法翻译此网页
  19. 2017年秋季学期软件工程第一次作业(曹洪茹)
  20. Java把一个文件转化为byte字节数组

热门文章

  1. 怎么组建云计算中心?
  2. 笔记本开发android占用,安卓笔记本是什么样子的?Bliss OS进入开发阶段
  3. 【论文笔记】AliMe Assist阿里小蜜(未完。。。)
  4. 经典俄罗斯方块游戏手机版
  5. 北京理工计算机科学与应用,沈蒙_北京理工大学计算机学院
  6. 通过电脑重置解决小米笔记本巨卡无比的问题
  7. 中移物联网联合上研院推出快速定位服务,助力智慧物联网发展
  8. 【论文阅读-句向量】On the sentence embeddings from Pre-trained Language Models
  9. Android SDCard中写入文件
  10. FPGA控制——基于FSM的TLC5615之SPI建模