做过的厂家设备:
精伦(IDR210-NMG,iDR210),
神思(SS628(100),SS628(100)版本号004U,SS628(100),SS728M),
信通(对接后取消),
华视(CVR-100UC,CVR-100N,CVR-100U),
中控(ID100),
海康(DS-K1F600U-D6E-IF)
这些设备厂家产品都遵循police的接入规范来的,所以身份证接口读取技术差别不大。
身份证阅读器(仅描述上述品牌型号)
按照设备实现方式分为:
1. ocx控件 (精伦,神思,信通,华视,海康)
2. 本地websocket调用(神思SS728M, 中控)
按照浏览器可用
1、IE11(精伦,神思,信通,华视,海康)
2、通用(神思SS728M, 中控)
建议使用:websocke方式调用,websocket实现的设备价格高一点,但是贵有贵的好处(也不一定,遇过坑,后期避坑讲);
OCX控件设备技术实现:
整体思路:本地驱动安装,浏览器安装ocx控件,js调用 ,根据控件方法获得身份证信息
1.本地驱动安装,安装过程略过。
注意事项:
(1)不要带中文路径
(2)最好安装在C盘
(3)问清楚驱动是否必须安装在 86 或 64文件下面(默认路径最好)
安装成功后在,文件下有demo.html,测试时会用到。
2.页面中写入标签ie 11 支持<OBJECT>标签,这段代码在demo.html文件中有直接cv
<OBJECT>标签与<script>同级
3.技术实现(神思设备举例)
// 判断浏览器是否安装控件(多设备情况下此方法不可用)
if (hasIEPlugin("SDRDCARD.SDRdCardCtrl.1")) {
// 打开设备
var ss = rdcard.OpenPort();
// 执行读卡
var ps = rdcard.readcard();
var pp = rdcard.ReadSecurityNum();
if (ss == 0 && pp == 0) {
if (ps == 0 && ss == 0) {
readCardieSS(ps);
}
} else {
// 关闭端口(必须要有)
rdcard.ClosePort();
}
function readCardieSS(ps) {
switch (ps) {
case -1:
swal("操作失败!");
return;
case -5:
swal("软件授权文件错误或没有授权文件!");
return;
case -6:
swal("设备连接错误!");
return;
case -7:
swal("验证卡失败,没有找到卡或者需要将卡拿离验证区重新读卡!");
return;
}
// 所有汉字读取可能会有乱码,电脑语言问题造成
$("#name").val(rdcard.NameL).change();
$("#idCard").val(rdcard.CardNo);身份号码(明文)
$("#address").val(rdcard.Address);地址
$("#cardImg").attr('src', "data:image/jpeg;base64," + rdcard.JPGBuffer);
setSelect2("sex1", rdcard.SexL); //性别
setSelect2("nation", rdcard.Nation);//民族
var times = rdcard.Born; // 出生年月
var vals = times.substring(0, 4) + "-" + times.substring(4, 6) + "-" + times.substring(6);
$("#birth").val(vals).change();
$("#image").val(rdcard.JPGBuffer);
// 删除读取身份证头像图片
rdcard.DeleteOutputFile();
// 关闭连接 (每读取一次:开启一次,关闭一次,必须要有)
rdcard.ClosePort();
}
遇到的坑:
1.设备有的需要开启固定端口,使用完要关闭端口。不然会连接一次可以,拔开再连接就不行。
2.多厂家,多品牌型号下如何指定设备读取卡。页面提供设备选择,redis缓存。