JS使用Active Ocx控件读写IC卡、NFC标签

编程入门 行业动态 更新时间:2024-10-04 11:15:43

JS使用Active Ocx<a href=https://www.elefans.com/category/jswz/34/1769529.html style=控件读写IC卡、NFC标签"/>

JS使用Active Ocx控件读写IC卡、NFC标签

读写器介绍:.htm?spm=a1z10.5-c.w4002-17663462238.11.1935789e9DJT8b&id=615391857885.htm?spm=a1z10.5-c.w4002-17663462238.11.1935789e9DJT8b&id=615391857885

 ​​​​​​​

 

<html><head><meta name="renderer" content="ie-stand"><!--页面默认用IE标准模式--><meta http-equiv="Content-Language" content="zh-cn"><meta name="ProgId" content="FrontPage.Editor.Document"><title>USB IC 卡读卡器控件调用例程 V1.1</title><script language="javascript">
var strls = "";
var errorno = "";//控制字定义,控制字指定,控制字的含义请查看本公司网站提供的动态库说明//javascript无法自定义常量, 你可以使用变量代替var BLOCK0_EN = 0x01;//读第一块的(16个字节)
var BLOCK1_EN = 0x02;//读第二块的(16个字节)
var BLOCK2_EN = 0x04;//读第三块的(16个字节)
var NEEDSERIAL = 0x08;//仅读指定序列号的卡
var EXTERNKEY = 0x10;//用明码认证密码,产品开发完成后,建议把密码放到设备的只写区,然后用该区的密码后台认证,这样谁都不知道密码是多少,需要这方面支持请联系
var NEEDHALT = 0x20;//读/写完卡后立即休眠该卡,相当于这张卡不在感应区。要相重新操作该卡必要拿开卡再放上去var myctrlword = 0;
var myareano = 0;
var authmode = 0;var mypiccserial = "";
var mypicckey = ""; 
var piccdata0_2 = ""; var mypicckey_old = "";//旧密码
var mypicckey_new = "";//新密码var myblockaddr = 1;//本次读卡的开始块号var myblocksize = 8;//读8个块function isUIntNum(val){var testval = /^\d+$/; // 非负整数 return (testval.test(val)); 
}function isHex(val){var testval = /^(\d|[A-F]|[a-f])+$/; // 十六进制数 return (testval.test(val)); 
}function readcard()
{//指定控制字myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;//指定区号myareano = 8; //指定为第8区//批定密码模式authmode = 1; //大于0表示用A密码认证,推荐用A密码认证//指定序列号,未知卡序列号时可指定为8个0mypiccserial="00000000";//指定密码,以下密码为厂家出厂密码mypicckey = "ffffffffffff";strls=IcCardReader.piccreadex(myctrlword, mypiccserial,myareano,authmode,mypicckey);errorno = strls.substr(0,4);switch(errorno){case "ER08":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER09":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER10":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER11":CardIDShower.value = "密码认证错误\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("密码认证错误");break;	case "ER12":CardIDShower.value = "密码认证错误" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("密码认证错误");break;case "ER13":CardIDShower.value = "读卡错误" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("读卡错误");break;	case "ER21":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示没找到动态库\r\n";break;case "ER22":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示动态库或驱动程序异常\r\n";break;	case "ER23":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示读卡器未插上或动态库或驱动程序异常\r\n";break;	case "ER24":alert("");CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示操作超时,一般是动态库没有反应\r\n";break;	case "ER25":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示发送字数不够\r\n";break;case "ER26":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示发送的CRC错\r\n";break;	case "ER27":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示接收的字数不够\r\n";break;	case "ER28":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示接收的CRC错\r\n";break;case "ER29":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示函数输入参数格式错误,请仔细查看\r\n";break;default ://读卡成功,其中ER00表示完全成功,ER01表示完全没读到卡数据,ER02表示仅读该卡的第一块成功,,ER02表示仅读该卡的第一二块成功,这是刷卡太快原因CardIDShower.value = "读卡成功" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";CardIDShower.value = CardIDShower.value + "该区第一块十六进制数据为:" + strls.substr(14,32) + "\r\n";CardIDShower.value = CardIDShower.value + "该区第二块十六进制数据为:" + strls.substr(46,32) + "\r\n";CardIDShower.value = CardIDShower.value + "该区第三块十六进制数据为:" + strls.substr(78,32) + "\r\n";break;}}function writecard()
{//指定控制字myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;//指定区号myareano = 8; //指定为第8区//批定密码模式authmode = 1; //大于0表示用A密码认证,推荐用A密码认证//指定序列号,未知卡序列号时可指定为8个0mypiccserial="00000000";//指定密码,以下密码为厂家出厂密码mypicckey = "ffffffffffff";//指定写卡内容,长度为48个字节,其中每个字节以两个字符表示为十六进制数piccdata0_2 = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F";strls=IcCardReader.piccwriteex(myctrlword, mypiccserial,myareano,authmode,mypicckey,piccdata0_2);errorno = strls.substr(0,4);switch(errorno){case "ER08":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER09":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER10":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER11":CardIDShower.value = "密码认证错误" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("密码认证错误");break;case "ER12":CardIDShower.value = "密码认证错误" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("密码认证错误");break;case "ER13":CardIDShower.value = "读卡错误" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("读卡错误");	break;case "ER14":CardIDShower.value = "写卡错误" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";alert("写卡错误");break;	case "ER21":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示没找到动态库\r\n";break;case "ER22":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示动态库或驱动程序异常\r\n";break;	case "ER23":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示读卡器未插上或动态库或驱动程序异常\r\n";break;	case "ER24":alert("");CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示操作超时,一般是动态库没有反应\r\n";break;	case "ER25":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示发送字数不够\r\n";break;case "ER26":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示发送的CRC错\r\n";break;	case "ER27":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示接收的字数不够\r\n";break;	case "ER28":CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示接收的CRC错\r\n";break;case "ER29":alert("");CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示函数输入参数格式错误,请仔细查看\r\n";break;default ://写卡成功,其中ER00表示完全成功,ER01表示完全没写到卡数据,ER02表示仅写该卡的第一块成功,,ER02表示仅写该卡的第一二块成功,这是刷卡太快原因CardIDShower.value = "写卡成功" + "\r\n";CardIDShower.value = CardIDShower.value + strls + "\r\n";CardIDShower.value = CardIDShower.value + "其中错误号为:" + errorno + "\r\n";CardIDShower.value = CardIDShower.value + "卡十六进制序列号为:" + strls.substr(5,8) + "\r\n";break;}
}function changecardkeyex()
{//指定控制字myctrlword= EXTERNKEY;//指定区号myareano = 8; //指定为第8区//批定密码模式authmode = 1; //大于0表示用A密码认证,推荐用A密码认证//指定序列号,未知卡序列号时可指定为8个0mypiccserial="00000000";//旧密码mypicckey_old = "ffffffffffff";//新密码mypicckey_new = "ffffffffffffFF078069ffffffffffff";//其中最前面的ffffffffffff为A密码,中间的FF078069为访问控制位,最后面的ffffffffffff为B密码strls=IcCardReader.piccchangesinglekeyex(myctrlword, mypiccserial,myareano,authmode,mypicckey_old,mypicckey_new)errorno = strls.substr(0,4);if(errorno == "ER00"){CardIDShower.value = "修改密码成功,卡序列为:" + strls.substr(strls.length - 8,8) + "\r\n";} else if((errorno == "ER08") || (errorno == "ER09") || (errorno == "ER10")){CardIDShower.value = CardIDShower.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";} else{CardIDShower.value = CardIDShower.value + "错误号:" + errorno  + "\r\n";}}function getdevicenumber()
{strls=IcCardReader.pcdgetdevicenumber();errorno = strls.substr(0,4);if(errorno == "ER00"){CardIDShowerdev.value = CardIDShowerdev.value + "读取成功,设备硬件号为:" + strls.substr(strls.length - 8,8) + "\r\n";}else if(errorno == "ER23"){CardIDShowerdev.value = CardIDShowerdev.value + "请先用USB接口连接读写器" + "\r\n";}else {CardIDShowerdev.value = CardIDShowerdev.value + "错误号:" + errorno + "\r\n";}
}function beep()
{IcCardReader.pcdbeep(100);//100表示响100毫秒
}function clears1()
{CardIDShower.value = "";
}function clearsntag()
{CardIDShowerNtag.value = "";
}function clearsdev()
{CardIDShowerdev.value = "";
}//Ntag21x测试
function readcard_ntag()
{//指定序列号,未知卡序列号时可指定为14个0,因为NTAG21x卡是7个字节的卡序列号strls = ntagserial.value.trim();if(strls==""){mypiccserial="00000000000000";}else{if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "卡号输入错误\r\n";ntagserial.focus();ntagserial.select();return;}mypiccserial = strls;}//指定密码,NTAG21x卡密码为4个字节,卡出厂时密码功能不启用,这样无需密码也能读写卡if(check3.checked){//指定控制字myctrlword=EXTERNKEY;//无需密码为0,当需要密码时为EXTERNKEY;strls = ntagkey3.value.trim();if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "密码输入错误\r\n";ntagkey3.focus();ntagkey3.select();return;}mypicckey = strls;}else{//指定控制字myctrlword = 0;//无需密码为0,当需要密码时为EXTERNKEY;}//起始页号strls = ntagstartno.value.trim();if(!isUIntNum(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "起始页号输入错误\r\n";ntagstartno.focus();ntagstartno.select();return;}myblockaddr = parseInt(strls);//本次读卡的开始块号//页数strls = ntagpagenumber.value.trim();if(!isUIntNum(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "页数输入错误\r\n";ntagpagenumber.focus();ntagpagenumber.select();return;}myblocksize = parseInt(strls);//读4个块strls=IcCardReader.piccreadex_ntag(myctrlword,mypiccserial,mypicckey,myblockaddr,myblocksize);errorno = strls.substr(0,4);switch(errorno){case "ER08":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER09":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER10":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;		case "ER11":CardIDShowerNtag.value = "密码认证错误\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;	case "ER12":CardIDShowerNtag.value = "密码认证错误" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;case "ER13":CardIDShowerNtag.value = "读卡错误" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;	case "ER21":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示没找到动态库\r\n";break;case "ER22":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示动态库或驱动程序异常\r\n";break;	case "ER23":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示读卡器未插上或动态库或驱动程序异常\r\n";break;	case "ER24":alert("");CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示操作超时,一般是动态库没有反应\r\n";break;	case "ER25":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示发送字数不够\r\n";break;case "ER26":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示发送的CRC错\r\n";break;	case "ER27":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示接收的字数不够\r\n";break;	case "ER28":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示接收的CRC错\r\n";break;case "ER29":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",函数输入参数格式错误,请仔细查看\r\n";break;case "ER00"://读卡成功CardIDShowerNtag.value = "读卡成功" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "本次读取的十六进制数据为:" + strls.substr(20) + "\r\n";ntagserial.value = strls.substr(5,14);ntagdata.value = strls.substr(20);break;}}function writecard_ntag()
{//指定序列号,未知卡序列号时可指定为14个0,因为NTAG21x卡是7个字节的卡序列号strls = ntagserial.value.trim();if(strls==""){mypiccserial="00000000000000";}else{if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "卡号输入错误\r\n";ntagserial.focus();ntagserial.select();return;}mypiccserial = strls;}//指定密码,NTAG21x卡密码为4个字节,卡出厂时密码功能不启用,这样无需密码也能读写卡if(check3.checked){//指定控制字myctrlword=EXTERNKEY;//无需密码为0,当需要密码时为EXTERNKEY;strls = ntagkey3.value.trim();if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "密码输入错误\r\n";ntagkey3.focus();ntagkey3.select();return;}mypicckey = strls;}else{//指定控制字myctrlword = 0;//无需密码为0,当需要密码时为EXTERNKEY;}//起始页号strls = ntagstartno.value.trim();if(!isUIntNum(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "起始页号输入错误\r\n";ntagstartno.focus();ntagstartno.select();return;}myblockaddr = parseInt(strls);//本次读卡的开始块号//页数strls = ntagpagenumber.value.trim();if(!isUIntNum(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "页数输入错误\r\n";return;}myblocksize = parseInt(strls);//数据strls = ntagdata.value.trim();if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "数据输入错误\r\n";ntagdata.focus();ntagdata.select();return;}strls=IcCardReader.piccwriteex_ntag(myctrlword,mypiccserial,mypicckey,myblockaddr,myblocksize,strls);errorno = strls.substr(0,4);switch(errorno){case "ER08":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER09":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER10":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;		case "ER11":CardIDShowerNtag.value = "密码认证错误\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";alert("密码认证错误");break;	case "ER12":CardIDShowerNtag.value = "密码认证错误" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;case "ER14":CardIDShowerNtag.value = "写卡错误" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;	case "ER20":CardIDShowerNtag.value = "写卡错误,禁止写配置页或页号超过此卡最大页" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;case "ER21":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示没找到动态库\r\n";break;case "ER22":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示动态库或驱动程序异常\r\n";break;	case "ER23":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示读卡器未插上或动态库或驱动程序异常\r\n";break;	case "ER24":alert("");CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示操作超时,一般是动态库没有反应\r\n";break;	case "ER25":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示发送字数不够\r\n";break;case "ER26":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示发送的CRC错\r\n";break;	case "ER27":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示接收的字数不够\r\n";break;	case "ER28":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示接收的CRC错\r\n";break;case "ER29":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",函数输入参数格式错误,请仔细查看\r\n";break;case "ER00"://写卡成功CardIDShowerNtag.value = "写卡成功" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";ntagserial.value = strls.substr(5,14);ntagdata.value = strls.substr(20);break;}
}function piccinit_ntag()
{//指定序列号,未知卡序列号时可指定为14个0,因为NTAG21x卡是7个字节的卡序列号mypiccserial="00000000000000";//指定密码,NTAG21x卡密码为4个字节,卡出厂时密码功能不启用,这样无需密码也能读写卡if(check1.checked){//指定控制字myctrlword=EXTERNKEY;//无需密码为0,当需要密码时为EXTERNKEY;strls = ntagkey1.value.trim();if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "密码输入错误\r\n";ntagkey1.focus();ntagkey1.select();return;}mypicckey = strls;}else{//指定控制字myctrlword = 0;//无需密码为0,当需要密码时为EXTERNKEY;}//数据准备if(select1.selectedIndex==1){//开启密码保护功能,写保护功能生效,但读保护需要下面的数据设定//取新密码strls = ntagkey2.value.trim();if(strls.length != 8){CardIDShowerNtag.value = CardIDShowerNtag.value +  "新密码长度必须为8位\r\n";ntagkey2.focus();ntagkey2.select();return;}strls = ntagkey2.value.trim();if(!isHex(strls)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "新密码输入错误\r\n";ntagkey2.focus();ntagkey2.select();return;}strls1=protectpageno.value.trim();//起始保护页号if(!isUIntNum(strls1)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "起始保护页号输入错误\r\n";protectpageno.focus();protectpageno.select();return;}strls1 = "0"+parseInt(strls1).toString(16);strls1 = strls1.substring(strls1.length-2);mypiccdata = "000000" + strls1;myctrlword = myctrlword + 0x01; //更新控制字//计数器strls1=keyerrortimes.value.trim();//允许密码错误次数if(!isUIntNum(strls1)){CardIDShowerNtag.value = CardIDShowerNtag.value +  "允许密码错误次数输入错误\r\n";protectpageno.focus();protectpageno.select();return;}i = parseInt(strls1);i = i % 8;if(check2.checked){i = i + 128;}strls1 = "0"+i.toString(16);strls1 = strls1.substring(strls1.length-2);mypiccdata = mypiccdata + strls1;mypiccdata = mypiccdata + "000000";mypiccdata = mypiccdata + strls;//新密码//PACK//PACK//RFUI//RFUImypiccdata = mypiccdata + "16160000";myctrlword = myctrlword + 0x02; //更新控制字	}else{mypiccdata = "000000FF";//MIRROR,RFUI,MIRROR_PAGE,AUTH0myctrlword = myctrlword + 0x01; //更新控制字	mypiccdata = mypiccdata + "00000000";myctrlword = myctrlword + 0x02; //更新控制字	}strls=IcCardReader.piccinit_ntag(myctrlword,mypiccserial,mypicckey,mypiccdata);errorno = strls.substr(0,4);switch(errorno){case "ER08":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER09":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;	case "ER10":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示寻不到卡\r\n";break;		case "ER11":CardIDShowerNtag.value = "密码认证错误\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";alert("密码认证错误");break;	case "ER12":CardIDShowerNtag.value = "密码认证错误" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;case "ER14":CardIDShowerNtag.value = "设置失败,可能需要验证密码" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;	case "ER21":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示没找到动态库\r\n";break;case "ER22":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示动态库或驱动程序异常\r\n";break;	case "ER23":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示读卡器未插上或动态库或驱动程序异常\r\n";break;	case "ER24":alert("");CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示操作超时,一般是动态库没有反应\r\n";break;	case "ER25":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示发送字数不够\r\n";break;case "ER26":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示发送的CRC错\r\n";break;	case "ER27":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示接收的字数不够\r\n";break;	case "ER28":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",表示接收的CRC错\r\n";break;case "ER29":CardIDShowerNtag.value = CardIDShowerNtag.value +  "错误号:" + errorno + ",函数输入参数格式错误,请仔细查看\r\n";break;case "ER00"://初始化卡成功CardIDShowerNtag.value = "初始化卡成功" + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + strls + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "其中错误号为:" + errorno + "\r\n";CardIDShowerNtag.value = CardIDShowerNtag.value + "卡十六进制序列号为:" + strls.substr(5,14) + "\r\n";break;}
}window.onerror=function()
{alert("不好意思,出错了!");return true;//屏蔽系统事件
}</script><style type="text/css">input {float: left;margin-right: 10px;margin-top: 10px;margin-bottom: 10px;padding: 5px 10px}input[type="text"]:focus {border:2px solid #ff9800}
</style></head>
<body><div style="width:100%"><object classid="clsid:05782014-9FF7-468C-BE96-8EDC73084202" id="IcCardReader" viewastext="" width="0" height="0"></object><div style=" float:left; COLOR: #FFF;BACKGROUND-COLOR: #FF9800;padding: 2px 5px;">设备操作</div><div style="width:100%; float:left;"><div style="border-top: 2px solid #ff9800;padding: 2px 5px;color: #2196f3;"><span>提示:</span><br/><textarea rows="3" cols="98" id="CardIDShowerdev" name="S3" style="width:100%;overflow:auto;"></textarea><br/><input type="button" value="蜂鸣器响" onclick="beep()"><input type="button" value="读取读写器硬件号" onclick="getdevicenumber()"><input type="button" value="清空提示" onclick="clearsdev()"></div></div><div style=" float:left; COLOR: #FFF;BACKGROUND-COLOR: #FF9800;padding: 2px 5px;">M1卡测试</div><div style="width:100%; float:left;"><div style="border-top: 2px solid #ff9800;padding: 2px 5px;color: #2196f3;"><span>提示:</span><br/><textarea rows="10" cols="98" id="CardIDShower" name="S1" style="width: 100%;overflow:auto;"></textarea><br/><input type="button" value=" 读 卡 " onclick="readcard()"><input type="button" value=" 写 卡 " onclick="writecard()"><input type="button" value="更改卡密码" onclick="changecardkeyex()"><input type="button" value="清空提示" onclick="clears1()"></div></div><div style=" float:left; COLOR: #FFF;BACKGROUND-COLOR: #FF9800;padding: 2px 5px;">Ntag21x卡测试</div><div style="width:100%; float:left;"><div style="border-top: 2px solid #ff9800;padding: 2px 5px;color: #2196f3;"><span>提示:</span><br><textarea rows="10" cols="98" id="CardIDShowerNtag" name="S2" style="width: 100%;overflow:auto;"></textarea><br/><input type="button" value="清空提示" onclick="clearsntag()"><br/><div style="width:100%; float:left;"><label><input name="check1" type="checkbox" style="float:none;margin-right:0px;padding:0px;vertical-align:middle" /><span style="vertical-align:middle">需要认证卡密码才能继续操作,密码:</span></label> <input type="text" name="ntagkey1"  value ="12345678" style="width:6em;float:none;margin-right:0px;padding:0px;vertical-align:middle"/><br/><select name="select1" style="width:12em;"><option>取消密码保护功能</option><option>开启密码保护功能</option></select><br/><label><span style="vertical-align:middle">从</span><input type="text" name="protectpageno"  value ="144" style="width:2em;float:none;margin-right:0px;padding:0px;vertical-align:middle"/><span style="vertical-align:middle">页开始有密码保护</span></label> <label><input name="check2" type="checkbox" style="float:none;margin-right:0px;padding:0px;vertical-align:middle" /><span style="vertical-align:middle">开启读操作密码保护</span></label><br/><span style="vertical-align:middle">新密码:</span><input type="text" name="ntagkey2"  value ="12345678" style="width:6em;float:none;margin-right:0px;padding:0px;vertical-align:middle"/><span style="vertical-align:middle">允许密码错误次数(0为不限次):</span><input type="text" name="keyerrortimes"  value ="0" style="width:2em;float:none;margin-right:0px;padding:0px;vertical-align:middle"/><br/><input type="button" value=" 设置卡密码及保护机制(写错卡作废,千万小心) " onclick="piccinit_ntag()"><br/><div style="width:100%; float:left;border-top: 3px solid #eaebdc;"></div><br/><label><input name="check3" type="checkbox" style="float:none;margin-right:0px;padding:0px;vertical-align:middle" /><span style="vertical-align:middle">需要认证卡密码才能继续操作,密码:</span></label> <input type="text" name="ntagkey3"  value ="12345678" style="width:6em;float:none;margin-right:0px;padding:0px;vertical-align:middle"/><table style="color:#e58800;width:100%;table-layout:fixed;"><colgroup><col width="85"><col width="50"><col width="50"><col width="auto"></colgroup><tr><td style="text-align:right"><span style="vertical-align:middle">起始页号:</span></td><td><input type="text" name="ntagstartno"  value ="8" style="width:2em;float:none;margin-right:0px;padding:0px;vertical-align:middle"/></td><td><span style="vertical-align:middle">卡号:</span></td><td><input type="text" name="ntagserial" value="" style="max-width: 16em;width:100%;float:none;margin-right:0px;padding:0px;vertical-align:middle;overflow:auto;"></td></tr><tr><td style="text-align:right"><span style="vertical-align:middle">页数:</span></td><td><input type="text" name="ntagpagenumber"  value ="4" style="width:2em;float:none;margin-right:0px;padding:0px;vertical-align:middle;" /></td><td><span style="vertical-align:middle;">数据:</span></td><td><input type="text" name="ntagdata" value="" style="width:100%;float:none;margin-right:0px;padding:0px;vertical-align:middle;overflow:auto; "></td></tr>	</table><input type="button" value=" 轻松读卡,最多一次12页 " onclick="readcard_ntag()"><input type="button" value=" 轻松写卡,最多一次11页 " onclick="writecard_ntag()"><br/><div style="width:100%; float:left;border-top: 3px solid #eaebdc;"></div><br/></div></div></div><div style="width:100%; float:left;"><table style="color:#e58800"><colgroup><col width="20"><col width="auto"></colgroup><tr><td colspan="2">说明:</td></tr><tr><td valign="top">1、</td><td valign="top"><p>运行本例程前,需先注册 IcCardReader 控件,注册方法:如果64位操作系统,以管理员身份运行"复制及注册IcCardReader控件win10_64.bat",如果是32位操作系统,以管理员身份运行"复制及注册IcCardReader控件win_32.bat",这两个文件在当前目录下。</p></td></tr><tr><td valign="top">2、</td><td valign="top"><p><p>在IE的Internet 属性设定,让浏览器允许运行 ActiveX 控件。</p></td></tr><tr><td valign="top">3、</td><td valign="top"><p><p>如果是在服务器端运行本网页,还需在IE的Internet 属性中设定,将服务器网址设为可信站点,否则网页无权运行本地控件。</p></td></tr><tr><td valign="top">4、</td><td valign="top"><p><p>如果是用IE以外的浏览器,如360浏览器,需开启兼容模式(可在网上加&lt;meta name="renderer" content="ie-stand"&gt;),不能用极速模式。</p></td></tr></table></div></div></body>
</html>

更多推荐

JS使用Active Ocx控件读写IC卡、NFC标签

本文发布于:2024-02-13 14:28:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758888.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控件   标签   Active   JS   Ocx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!