web开发与IC卡读卡器
前段时间有个项目在客户端web下使用IC卡读卡器,试了很多种方案都觉得麻烦,最后在网上找了个现成的方案,采用了YW-605HA读卡器,厂家就不说了,免得说做广告。开发起来也挺简单。
他们将IC卡读卡器接口封装成ocx文件,分为32位版本和64位版本,自动安装时自动判断32位还是64位,这个比较方便,要不然按照版本部署客户端,那可得累死了。他们的说明如下:
控件文件名称:yw60x.ocx
32位控件:x86\yw60x.ocx
64位控件:x64\yw60x.ocx
用户可以根据B/S客户端的环境配置相应的ocx文件,也可以采用安装包yw60xocxSetup.exe自动判断客户端的环境并且自动选择适合的ocx进行安装并注册
web读卡器ocx有静态调用和动态调用两种方法,这个做web开发的估计都熟悉,直接copy代码就行了,说明如下:
读写器控件yw60x.ocx类名:YW60X.yw60xCtrl.1
读写器控件yw60x.ocx的classid:167E1838-7388-4A24-86DE-985B91F0FFBF
在web中可以采用静态调用和动态调用的方法来初始化控件
动态调用方法:
var obj = new ActiveXObject("YW60X.yw60xCtrl.1");
静态调用方法:
<object id="yoworfidreader"
classid="clsid:167E1838-7388-4A24-86DE-985B91F0FFBF">
</object>
下面说说在web下我们如何与web读卡器进行交互,为了输出相应的参数,他们设计了几个输出性质的属性,如下:
属性名称 |
类型 |
含义 |
备注 |
LastResult |
Long |
最后一个函数执行后的返回值,与函数本身的返回值相同 |
判断函数的返回值与判断LastResult值是一样的 |
OutData1 |
Variant |
一个Byte数组,函数执行要输出的首要内容 |
Byte数组可以在js和vbs里面自由转换成数组使用,或者使用控件自带的转换函数进行转换 |
OutData1Size |
Long |
OutData1数组的长度,字节数 |
|
OutData2 |
Variant |
一个Byte数组,函数执行要输出的首要内容 |
|
OutData2Size |
Long |
OutData2数组的长度,字节数 |
|
OutData3 |
Variant |
一个Byte数组,函数执行要输出的首要内容 |
|
OutData3Size |
Long |
OutData3数组的长度,字节数 |
所有的数据类型都是varaint类型的,与javascript非常兼容,但是在web中处理16进制数组是个麻烦的事,为此他们还设计了很多的类型转换函数,如下:
从数组获取所需格式的卡号字符串
函数原形:BSTR ConvertCardNo(VARIANT vCardNo, LONG ConvertIndex)
将数组转换成16进制的字符串
函数原形:BSTR GetHexStr(VARIANT vData);
将数组转换成ascii可见字符的字符串
函数原形:BSTR GetAlphaStr(VARIANT vData);
将16进制字符串转换成VARIANT类的数组
函数原形:VARIANT GetVariantFromHexStr(BSTR sHexStr);
将普通符串转换成VARIANT类的数组
函数原形:VARIANT GetVariantFromAlphaStr(BSTR sAlphaStr);
看到这了,大家应该知道了。各种数据转换都是很方便的,下面看看怎么读卡,直接给一段代码吧,也是很简单的
function ReadCard() | |
{ | |
var BlockID; | |
var Key; | |
RequestCard(); | |
BlockID = document.getElementById("BlockIDRead").value; | |
Key =document.ReaderTest.GetVariantFromHexStr(document.getElementById("KeyRead").value); | |
i = document.ReaderTest.YW_KeyAuthorization(1,96,BlockID,Key); | |
if(i<0) | |
{ | |
document.getElementById("DataRead").value ="密钥认证错误"; | |
return; | |
} | |
i = document.ReaderTest.YW_ReadaBlock(1,BlockID,16); | |
if(i<0) | |
{ | |
document.getElementById("DataRead").value ="读块错误"; | |
return; | |
} | |
document.getElementById("DataRead").value = document.ReaderTest.GetHexStr(document.ReaderTest.OutData1); | |
document.ReaderTest.YW_Buzzer(1,5,5,1); | |
CloseReader(); | |
} | |
很简单的吧
IC卡读卡器的web开发也可以采用友我科技RFID读写器云服务技术,将适应更多的web浏览器,如IE,Chrome,Firefox,safari,Opera等等
web开发与IC卡读卡器的更多相关文章
- 跨web浏览器的IC卡读卡器解决方案
BS结构的程序,如果要与IC卡读卡器通信本身就是件不容易解决的事情.微软的activex ocx技术将这种应用限制在IE浏览器上了,不兼容其它的浏览器.而Chrome使用插件也不兼容IE和其他的浏览器 ...
- IC卡读卡器web开发,支持IE,Chrome,Firefox,Safari,Opera等主流浏览 器
IC卡读卡器在web端的应用越来越多,但是早期发布的ocx技术只支持IE浏览器,使用受到了很多的限制.IC卡读卡器云服务的推 出,彻底解决了以上的局限,使得IC卡读卡器不仅可以应用在IE浏览器上,还可 ...
- IC卡读卡器在安卓(android)下的开发
友我科技推出IC卡读卡器的Android开发包,软件工程师只需要导入jar类库文件,就可以在App中操作IC卡读卡器了. 目前IC卡读卡器的Android开发包开放操作的卡类型有:M1, S50, U ...
- 射频IC卡和IC卡读卡器的成本分析
当今射频IC卡和IC卡读卡器的种类繁多,很多人问IC卡读卡器多少钱,那么如何在满足我们需求的情况下最大的节省成本呢.下面就各种射频IC卡和IC卡读卡器来分析下各自的成本. ...
- BS结构中,web如何将数据进行DES加密并写道IC卡中
在IC卡应用系统中,一般都要对IC卡数据进行DES加密,以保证数据的安全.友我科技RFID读写器云服务2.0充分考虑了这个需求,只需要软件工程师简单的配置即可实现数据的加解密并且写到数据块中.如下图所 ...
- 智能IC卡与终端(读卡器)之间的传输协议
1.有两种协议 T=0,异步半双工字符传输协议 T=1,异步半双工块传输协议 终端一般都支持这两种协议,IC卡可以选择支持其中的一种.(因为终端可能需要面对各种类型的卡片,所以必须两种协议都支持,而卡 ...
- IC卡
本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . IC卡 (Integrated Circuit Card,集成电路卡),也称智能卡(Smart card).智慧卡(Intelligent ...
- Arduino + RFID 读取 IC 卡 Arduino uno中获得RFID的UID 并通过串口转发RFID卡号
RFID简介:射频识别即RFID(Radio Frequency IDentification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定 ...
- 移动端 Web 开发前端知识整理
文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...
随机推荐
- Mac环境下.Net开发
Mono是一个由Novell公司(由Xamarin发起),并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程.它包含了一个C#语言的编译器,一个CLR的运行时 ...
- 卷积神经网络(CNN)模型结构
在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...
- MySQL Innodb 并发涉及参数
1 参数作用 MySQL的各个插件式引擎中,都会对事务及线程做一定的处理和优化.在Innodb引擎中,总是尝试保持 innodb内 操作系统的线程数(暂命名为innodb_thread) 应该小于或等 ...
- 利用内核cgroup机制轻松实现类似docker的系统资源管控
近几年,以docker为代表的容器技术异常火热,它的轻量.高效让人欣喜若狂,它被赋予了改变传统IT运维的使命.相信随着时间推移,以容器云为落地形式的产品将真正实现这一使命. 我们都知道docker能够 ...
- SQL server 数据库——数学函数、字符串函数、转换函数、时间日期函数
数学函数.字符串函数.转换函数.时间日期函数 1.数学函数 ceiling()--取上限 select ceiling(oil) as 油耗上限 from car floor()--取下限 sele ...
- 小白该怎么学《马哥Linux从入门到精通》
首先,必须说明我已经不是小白啦~现在的我在国内某独角兽担任运维工程师,带着一个四人小团队,在运维方面也算是有些心得,勉强过来回答一下这个问题,就算抛砖引玉了. 所有人都是从小白阶段过来的,我=也经历过 ...
- Android Crash 全局捕获
Android Crash 全局捕获 首先应该明白的一点是,Android在崩溃后会重新启动崩溃时的那个Activity,如果你的Activity在初始化的时候就直接崩溃,那么你将连续得到 Crash ...
- SQL语句流程函数
本人因为今天用到了流程函数,顿时感觉语法生疏啊,为了防止以后忘记,故写此篇!!! 流程函数是MySQL相对常用的一类函数, 用户可以使用这类函数在一个SQL语句中实现条件选择, 这样能够提高效率. 下 ...
- Python(五)编程小实例
Python(五)编程小实例 抓取网页信息,并生成txt文件内容! Python抓取网页技能--Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些 ...
- RxJava Map操作详解
2016-06-06 RxJava是最近两年火起来的一个框架,核心是异步,但是对于我来说印象最深的是响应式编程的思想.最近刚好想把自己的项目改成用RxJava实现,所以就研究了下.抛物线和大头鬼两位大 ...