卡是一种传输数据的介质,有很多地方都会用到,去医保,电力局,或者美容院,会给你一张卡,里面记录了用户的个人信息和余额等等信息,只要身有一个卡,干什么都方便。这里面用js读取卡的内容的方法
//读卡操作
function readCard(port,offset,len){
var data = "";
try{
MWReaderCtl.MWic_init(port,9600);
var rtnValue = MWReaderCtl.LastRet;
//串口被占的情况
if(rtnValue<0){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.SPORTERROR);
return -1;
}
data = MWReaderCtl.MWsrd_4428(offset,len);
//如果没有插卡的情况
if(data=='' || data.length<2*len){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.NOCARD);
return -1;
}
}catch(e){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.CARDREADFAIL);
return -1;
}finally{
MWReaderCtl.MWic_exit();
}
return data;
}
//写卡操作
function writeCard(port,offset,len,data,pwd){
try{
MWReaderCtl.MWic_init(port,9600);
var rtnValue = MWReaderCtl.LastRet;
if(rtnValue<0){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.SPORTERROR);
return -1;
}
//比对密码
MWReaderCtl.MWcsc_4428(4,pwd);
var rtnValue = MWReaderCtl.LastRet;
//密码比对出错,卡非法,给出提示
if(rtnValue<0){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.ILLEGALCARD);
return -1;
}
//写卡操作 1个字节对应2个字符
MWReaderCtl.MWswr_4428(offset,len,data);
var rtnValue = MWReaderCtl.LastRet;
//写卡失败
if(rtnValue<0){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.CARDWRITEFAIL);
return -1;
}
}catch(e){
alert(prepay_rdCard_rdCard.resourceBundle.Prompt.CARDWRITEFAIL);
return -1;
}finally{
MWReaderCtl.MWic_exit();
}
return 0;
}
在jsp文件里面定义
<OBJECT id=MWReaderCtl codeBase="rdactivex/MwReader.cab#version=1,0,0,2" data=data:application/x-oleobject;base64,VPpLUhUXNkSyudxeJIvBwwADAADYEwAA2BMAAA==
classid=CLSID:8E06D862-4D98-11D7-A40B-5254AB51CC00></OBJECT>
其中要创建rdactivex文件夹,文件已经上传
读取卡的内容后,上传action中,根据之前定义通信协议,对卡中的数据进行后台的处理