前段时间有个项目在客户端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数组的长度,字节数 |
从数组获取所需格式的卡号字符串
函数原形: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(); | |
} | |