华大多功能四合一HD-100多功能智能卡读写器OCX插件配置使用教程
华大多功能四合一HD-100多功能智能卡读写器OCX插件配置使用教程
- 一、简介
- 二、配置使用
- 三、代码分享
一、简介
华大HD-100多功能智能卡读写器作为IC卡系统集成必备的前端处理设备,极大地提高了系统的安全性和应用的方便性,能更加优秀的服务于卫生、社保、二代证查询、工商、电信、邮政、税务、银行、保险、医疗以及各种收费、储值、查询等智能卡管理应用行业。
1.HD-100有几种不同配置,功能分别如下:
四合一:身份证、社保卡、磁条卡、就诊卡 (此次教程叫的就是四合一)
三合一:社保卡、磁条卡、就诊卡
2.华大HD-100多功能读卡器产品特点:
-
支持 ISO/IEC 7816-1/2/3 标准 CPU 卡,T=0、T=1、逻辑加密卡及memory卡,社保卡、医保卡等
-
支持 Mifare 卡和符合 ISO14443 标准的 A 类和 B 类卡,ISO 15693 等卡片, 通讯速率最高支持 424 Kbps
-
支持身份证卡片
-
支持 4个 PSAM 卡安全模块、支持高速 PSAM 卡安全交易认证,符合 ISO7816 标准
-
安装方便,可靠性高,适合联机使用
-
全速 USB 接口, RS232,以太网等
-
人机界面:一个指示灯,指示电源和操作状态
-
支持在线程序升级,提供 Windows/Linux/Unix 等各种平台下的应用程序标 准 DLL 动态库接口
二、配置使用
读卡器图片,如下图
注意:安装前先把360等杀毒软件退出,否则可能会影响读卡器的正常使用
准备:先将读卡机设备连接到电脑usb接口,确定连接成功之后在进行一下操作
1.以管理员点击运行(华大多合一控件安装.exe)文件,如下图
2. 安装时一直点击下一步即可,安装成功会显示以下页面
3.完成安装之后打开页面时需要使用 360浏览器或者IE浏览器 打开浏览器–>工具–>Internet选项–>自定义级别 (Internet和本地Internet都需要设置),如下图
4.选择启用
5.选择 是,之后打开页面之后选择兼容模式
6.选择允许阻止内容
7.选择 是
8.选择 是
9.硬件配置已完成接下来就可以使用啦!
三、代码分享
1.华大读卡器会给一套js代码,首先,需要引入到页面中进行调用。
<script th:src="@{/js/common/hd_card.js}"></script>
hd_card.js的代码内容如下:
// version:2019011
// 华大读卡器 head 中加 <OBJECT classid=clsid:A02C6AFF-89E7-41232-9DF3-508DD546543F9E2 width=0 height=0 align="center" id="bsHDdev" HSPACE=0 VSPACE=0></OBJECT>
/** ***************基础工具*********************** */
/**
* 华大读卡器。读身份证或社保卡。返回:{type:类型, realname:姓名,gender:性别,nation:民族,brithday:出生日期,address:家庭住址,idCardNum:身份证号, sidCardNum:社保号, photoBase64: 照片base64字符串}
*/
function tg_readCard4HD(deviceObjectId, slot) {
var result = tg_readIdCard4HD(deviceObjectId); // 先读身份证
if (!result.success) { // 身份证读取失败
result = tg_readSidCard4HD(deviceObjectId, slot); // 读取社保卡
}
return result;
}
/**
* 华大读卡器。读身份证 返回:{type:类型, realname:姓名,gender:性别,nation:民族,brithday:出生日期,address:家庭住址,idCardNum:身份证号, photoBase64: 照片base64字符串}<br>
* 相片显示:document.getElementById("photo").src="https://img-blog.csdnimg.cn/2022010711192871364.png"+photoBase64;
*/
function tg_readIdCard4HD(deviceObjectId) {
var result = { // 返回结果
type : 'idCard' // 身份证
};
var deviceObject = document.getElementById(deviceObjectId); // 得到设备控件 deviceObjectId
var readResult = deviceObject.iReaderIDCard("C:\\zp.jpg"); // 读卡,传入照片路径
if (readResult == 0) { // 读卡成功
var cardInfo = deviceObject.pOutInfo;
var base64Str = deviceObject.base64Data;
var idCardInfo = cardInfo.split('|').slice(0, 6);
result.success = true;
result.realname = idCardInfo[0];
result.gender = idCardInfo[1];
result.nation = idCardInfo[2];
result.brithday = idCardInfo[3];
result.address = idCardInfo[4];
result.idCardNum = idCardInfo[5];
result.photoBase64 = base64Str;
} else { // 读卡失败
console.log(deviceObject.pMsgErr);
}
return result;
}
/**
* 华大读卡器。读社保卡 返回:{type:类型, sidCardNum:社保号,idCardNum:身份证号,realname:姓名,gender:性别,nation:民族,brithday:生日}
*/
function tg_readSidCard4HD(deviceObjectId, slotParm) {
var result = { // 返回结果
type : 'sidCard' // 社保卡
};
var deviceObject = document.getElementById(deviceObjectId); // 得到设备控件 deviceObjectId
var slot = 17; // 传入卡座号 17 -20
if (slotParm) {
slot = slotParm;
}
var readResult = deviceObject.iReadSicard(slot); // 读卡
if (readResult == 0) { // 读卡成功
var cardInfo = deviceObject.pOutInfo;
var scardInfo = cardInfo.split('|').slice(0, 6);
result.success = true;
result.sidCardNum = scardInfo[0];
result.idCardNum = scardInfo[1];
result.realname = scardInfo[2];
result.gender = scardInfo[3];
result.nation = scardInfo[4];
result.brithday = scardInfo[5];
} else { // 读卡失败
console.log(deviceObject.pMsgErr);
}
return result;
}
2.会有一个object classid 需要引入,下面的是我乱写的classid,每个设备都不一样。
<object classid="clsid:A02C6AFF-89E7-41232-9DF3-508DD546543F9E2" id="bsHDdev" width="0" height="0" hspace="0" vspace="0" />
3.页面使用代码示例(会自带测试页面也可以使用)
<div class="layui-card layadmin-header">
<div class="layui-breadcrumb" lay-filter="breadcrumb">
<a lay-href="">主页</a> <a><cite>会员业务</cite></a> <a href="#/manage/member/"><cite>挂号</cite></a>
</div>
<object classid="clsid:A02C6AFF-89E7-41232-9DF3-508DD546543F9E2" id="bsHDdev" width="0" height="0" hspace="0" vspace="0" />
</div>
<!--/*******页面内容*******/-->
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body">
<form id="tg_member_add_form" lay-filter="tg_member_add_form_filter" class="layui-form layui-form-pane">
<!--/*防止重复提交*/-->
<!--<input name="tgAvoidRepeatSubmitToken" th:value="" type="text" hidden="true" />-->
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline">
<img src="" id="photoBase64" />
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">姓名<span style="color: red"> *</span></label>
<div class="layui-input-inline">
<input name="realname" id="realname" disabled placeholder="请输入姓名" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">性别<span style="color: red"> *</span></label>
<div class="layui-input-inline">
<input id="genderStr" disabled placeholder="请输入性别" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
<input id="gender" name="gender" type="text" hidden="true" />
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">民族<span style="color: red"> *</span></label>
<div class="layui-input-inline">
<input name="nation" id="nation" disabled placeholder="请输入民族" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">出生日期<span style="color: red"> *</span></label>
<div class="layui-input-inline">
<input name="brithday" id="brithday" disabled placeholder="请输入出生日期" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">身份证号<span style="color: red"> *</span></label>
<div class="layui-input-inline">
<input name="idCardNum" id="idCardNum" disabled placeholder="请输入身份证号" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">社保号<span style="color: red"> *</span></label>
<div class="layui-input-inline">
<input name="sidCardNum" id="sidCardNum" disabled placeholder="请输入社保号" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">地址<span style="color: red"> *</span></label>
<div class="layui-input-block">
<input name="address" id="address" disabled placeholder="请输入地址" required maxlength="31" autocomplete="off" autofocus="autofocus" class="layui-input" type="text" />
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<div class="layui-footer">
<input type="button" id="tg_readCard_add_submit_but" value="读卡" class="layui-btn layui-btn-lg layui-btn-normal" lay-submit="" lay-filter="tg_readCard_add_submit_but_filter">
<button id="tg_member_add_form_submit_but" lay-filter="tg_member_add_form_submit_but_filter" class="layui-btn layui-btn-lg" lay-submit="">挂号</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<!--/*******当前页js*******/-->
<script>
layui.use([ 'member', 'form', 'layer' ], function() {
var member = layui.member, form = layui.form, $ = layui.$, layer = layui.layer;
form.render(null, 'tg_member_add_form_filter'); // 渲染该模板动态表单
// 监听读卡
form.on('submit(tg_readCard_add_submit_but_filter)', function(data) {
var result = tg_readCard4HD("bsHDdev", 17);
if (result.success) {
// 设置input值
$("#realname").attr("value", result.realname); // 姓名
$("#genderStr").attr("value", result.gender); // 性别
if(result.gender == "男"){
$("#gender").attr("value", 1);
} else {
$("#gender").attr("value", 2);
}
var year = result.brithday.substr(0, 4);
var month = result.brithday.substr(4, 2);
var day = result.brithday.substr(6, 2);
$("#nation").attr("value", result.nation); // 民族
$("#brithday").attr("value", year + "-" + month + "-" + day); // 出生日期
$("#address").attr("value", result.address); // 地址
$("#idCardNum").attr("value", result.idCardNum); // 身份证号
$("#sidCardNum").attr("value", result.sidCardNum); // 社保号
if( result.photoBase64 != null ){
$("#photoBase64").attr("src", 'data:image/jpeg;base64,' + result.photoBase64); // 照片base6
}
// 读卡提交到后台的值
data.field.realname = result.realname; // 姓名
data.field.gender = $("#gender").val(); // 性别
data.field.nation = result.nation; // 民族
data.field.brithday = year + "-" + month + "-" + day; // 出生日期
data.field.address = result.address; // 地址
data.field.idCardNum = result.idCardNum; // 身份证号
data.field.sidCardNum = result.sidCardNum; // 社保号
data.field.photoBase64 = result.photoBase64; // 照片base6
tg_submitForm('tg_readCard_add_submit_but', BASE_URL + 'm/cardRecord/add.htm', data.field, function(d) {
});
return false; // 阻止form跳转
}
});
// 监听提交
form.on('submit(tg_member_add_form_submit_but_filter)', function(data) {
if(data.field.realname != ""){
tg_submitForm('tg_member_add_form_submit_but', BASE_URL + 'm/signRecord/add.htm', data.field, function(d) {
tg_alert_success_location('/manage/member/show/id=' + data.field.idCardNum); // 成功提醒并跳转
});
}else{
layer.msg("请读取卡片");
}
return false; // 阻止form跳转
});
});
</script>
以上就是华大多功能四合一HD-100多功能智能卡读写器配置的使用教程,希望可以帮助到你,如有疑问欢迎私信探讨交流。
usjkodokppspppsj: 老师,可以发 华大多合一控件安装.exe 包 和 华大读卡器给的js代码 到2597308873@qq.com,谢谢。对接老项目,联系华大客服,回复:华大会提供给供应商;买设备的人已离职,找不到供应商。
WangShuai0815: 是的, 所以 我个人觉得 powerjob的作者在这方面 好像考虑不周全,因为实际上 企业项目也不会把基础环境服务, 和应用服务都怼到同一台机器, 而且很可能 各个云服务器的内网 是不通的,况且powerjob的网络问题还是docker容器内的IP
WangShuai0815: 是针对 powerjob的文章? 还是针对docker net的文章呀
王然而: 最近看的了有些解决跨网络问题的文章,准备试一下再来更新一篇
王然而: 就是因为有这个问题,我才选择把程序和powerjob部署在一个服务器测试,不然会有网络不通的问题