BS结构程序由于维护起来比CS结构程序简单,现在越来越多的需求使用BS结构来实现。那么如何在BS结构中的网页程序中使用IC卡读卡器呢?
友我科技为此提供了现成的解决方案,采用Js+ocx方式,将IC卡读卡器的驱动部分封装在ocx中,在网页端使用js脚本调用ocx的接口,不仅实现IC卡的读卡,还可以对IC卡进行写卡操作。
友我科技的大部分IC卡读卡器都支持BS结构网页工作模式,包括IC卡读卡器YW-605HA,YW-608HA,YW-607,SDT-HA等等,这些读卡器可以支持:ISO14443 TypeA(包含M1,S50,S70,FM08和CPU卡),ISO14443 TypeB和ISO15693协议卡片;支持NFC定义的Type1(ISO14443 TYPEA、TOPAZ),Type2(ISO14443 TYPEA、MIFARE Ultralight、 NTAG203/210/212/213/216等),Type3(Sony Felica), Type4(ISO14443 TYPEA/B、MIFARE DESFire等)。。
ocx采用基于COM的activex技术,分为32位版本和64位版本,软件工程师可以根据需求自己选择合适版本,或者选择自动安装由安装程序自动选择适合当前浏览器的版本。
在js脚本中,可以动态加载ocx控件,也可以选择静态加载ocx控件。
动态加载方法:
var obj = new ActiveXObject("YW60X.yw60xCtrl.1");
静态加载方法:
<object id="ReaderTest"
classid="clsid:167E1838-7388-4A24-86DE-985B91F0FFBF">
</object>
js脚本控制IC卡读卡器
1.打开IC卡读卡器
function OpenReader()
{
if(document.ReaderTest.YW_USBHIDInitial()<=0)
{
document.getElementById("CardNo").value = "没有读卡器";
return false;
}
return true;
}
2.关闭IC卡读卡器
function CloseReader()
{
return document.ReaderTest.YW_USBHIDFree();
}
3.寻卡,并获得卡号,卡号可以根据yw60x.ocx控件提供的各种方法做转换,以满足自己的显示需求。
function RequestCard()
{
var i;
var CardType;
var vCardNo;
var LenCardNo;
if(OpenReader()==false)return;
i = document.ReaderTest.YW_RequestCard(1,82);
if(i<0)
{
document.getElementById("CardNo").value ="寻卡失败";
return;
}
i = document.ReaderTest.YW_AntiCollide(1);
if(i<0)
{
document.getElementById("CardNo").value ="寻卡失败";
return;
}
LenCardNo = document.ReaderTest.OutData1Size;
vCardNo = document.ReaderTest.OutData1;
document.getElementById("CardNo").value = document.ReaderTest.ConvertCardNo(vCardNo, 0);
i = document.ReaderTest.YW_CardSelect(1,LenCardNo,vCardNo);
}
4.读卡
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();
}
5.写卡
function WriteCard()
{
var BlockID;
var Key;
var Data;
RequestCard();
BlockID = document.getElementById("BlockIDWrite").value;
Key =document.ReaderTest.GetVariantFromHexStr(document.getElementById("KeyWrite").value);
i = document.ReaderTest.YW_KeyAuthorization(1,96,BlockID,Key);
if(i<0)
{
alert("密钥认证错误");
return;
}
Data =document.ReaderTest.GetVariantFromHexStr(document.getElementById("DataWrite").value);
i = document.ReaderTest.YW_WriteaBlock(1,BlockID,16,Data);
if(i<0)
{
alert("写块错误");
return;
}
document.ReaderTest.YW_Buzzer(1,5,5,1);
alert("写块成功");
CloseReader();
}
在读卡和写卡中,可以将各个数据利用yw60x.ocx提供的des和3des函数进行加密和解密,使得数据更安全,至此一个简单的网页端调用IC卡读卡器程序就好了。