读写器介绍:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>USB IC、Ntag卡、ID、15693卡读卡器调用例程 通用插件版 V2.0</title>
<script language="javascript" >
var iswsrun = false;
var ws;
var received_msg = "";
var mytimer;
var strls = "";
var errorno = "";
var wsUri ="ws://127.0.0.1:39189"; //端口号必须与RFIDWebServer端口一致
//控制字定义,控制字指定,控制字的含义请查看本公司网站提供的动态库说明
//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个块
var afi="00";
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 ReadID()
{
CardIDShowerdev.value="";
var ReadIDComm="idr_read,";
WebSocketRun(ReadIDComm);
}
function ReadIDOne()
{
CardIDShowerdev.value="";
var ReadIDComm="idr_read_once,";
WebSocketRun(ReadIDComm);
}
function readcard()
{
myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY; //指定控制字,十进制
myareano = 8; //指定为本次读取第8区,十进制
authmode = 1; //指定密码模式,十进制,大于0表示用A密码认证,推荐用A密码认证
mypiccserial="00000000"; //指定本次操作的卡序列号,十六进制,未知时可指定为8个0
mypicckey = "ffffffffffff"; //指定卡片密码,十六进制,ffffffffffff为卡片厂家出厂密码
CardIDShower.value = "";
//用parseInt转为十六进制数
var ReadCardComm="piccreadex,"+myctrlword+","+mypiccserial+","+myareano+","+authmode+","+mypicckey;
WebSocketRun(ReadCardComm);
}
function writecard()
{
myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY; //指定控制字,十进制
myareano = 8; //指定为本次读取第8区,十进制
authmode = 1; //指定密码模式,十进制,大于0表示用A密码认证,推荐用A密码认证
mypiccserial="00000000"; //指定本次操作的卡序列号,十六进制,未知时可指定为8个0
mypicckey = "ffffffffffff"; //指定卡片密码,十六进制,ffffffffffff为卡片厂家出厂密码
//指定写卡内容,长度为48个字节,其中每个字节以两个字符表示为十六进制数
piccdata0_2 = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F";
CardIDShower.value = "";
var WriteCardComm="piccwriteex,"+myctrlword+","+mypiccserial+","+myareano+","+authmode+","+mypicckey+","+piccdata0_2;
WebSocketRun(WriteCardComm);
}
function writecarduid()
{
myctrlword = BLOCK0_EN; //指定控制字,十进制
authmode = 1; //指定密码模式,十进制,大于0表示用A密码认证,推荐用A密码认证
mypiccserial = "00000000"; //指定本次操作的卡序列号,十六进制,未知时可指定为8个0
mypicckey = "ffffffffffff"; //指定卡片密码,十六进制,ffffffffffff为卡片厂家出厂密码
piccdata0 = "12345678000102030405060708090A0B"; //指定写卡内容,长度为16个字节,其中前面四个字节是卡号,第五字节必须为卡号的异或和校验字,后面为厂家标识
CardIDShower.value = "";
var WriteCardComm="piccwriteserial,"+myctrlword+","+mypiccserial+","+authmode+","+mypicckey+","+piccdata0;
WebSocketRun(WriteCardComm);
}
function changecardkeyex()
{
myctrlword=EXTERNKEY; //指定控制字
myareano = 8; //指定为本次读取第8区
authmode = 1; //批定密码模式,大于0表示用A密码认证,推荐用A密码认证
mypiccserial="00000000"; //指定本次操作的卡序列号,未知时可指定为8个0
mypicckey_old = "ffffffffffff"; //旧密码
mypicckey_new = "ffffffffffffFF078069ffffffffffff03";//新密码,其中最前面的ffffffffffff为A密码,中间的FF078069为访问控制位,后面的ffffffffffff为B密码,03是表示同时更改A、B、密码权限访问字,为02表示密码权限访问字不更改,只改A、B密码,为00表示只改A密码
CardIDShower.value = "";
var ChangeKeyComm="piccchangesinglekeyex,"+myctrlword+","+mypiccserial+","+myareano+","+authmode+","+mypicckey_old+","+mypicckey_new;
WebSocketRun(ChangeKeyComm);
}
function getdevicenumber()
{
CardIDShowerdev.value = "";
WebSocketRun("pcdgetdevicenumber");
}
function IDgetdevicenumber()
{
CardIDShowerdev.value = "";
WebSocketRun("IDpcdgetdevicenumber");
}
function beep()
{
CardIDShowerdev.value = "";
WebSocketRun("pcdbeep,30");
}
function IDbeep()
{
CardIDShowerdev.value = "";
WebSocketRun("idr_beep,30");
}
function clears1()
{
CardIDShower.value = "";
}
function clearsntag()
{
CardIDShowerNtag.value = "";
}
function clearsdev()
{
CardIDShowerdev.value = "";
}
//Ntag21x测试
function readcard_ntag()
{
strls = ntagserial.value.trim(); //指定序列号,未知卡序列号时可指定为14个0,因为NTAG21x卡是7个字节的卡序列号
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
{
mypicckey = "00000000";
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个块
var ReadNtagComm="piccreadex_ntag,"+myctrlword+","+mypiccserial+","+mypicckey+","+myblockaddr+","+myblocksize;
WebSocketRun(ReadNtagComm);
}
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
{
mypicckey = "00000000";
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;
}
var WriteNtagComm="piccwriteex_ntag,"+myctrlword+","+mypiccserial+","+mypicckey+","+myblockaddr+","+myblocksize+","+strls;
WebSocketRun(WriteNtagComm);
}
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
{
mypicckey = "00000000";
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

此网页演示了如何使用JavaScript通过WebSocket与RFID读写器进行交互,包括读取ID卡、M1卡、Ntag21x卡和15693卡的操作,如读卡、写卡、更改卡密码等功能。用户可以输入卡号、密码等信息,点击按钮执行相应操作,页面会显示操作结果和错误信息。
https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.11.2de6789eHCsr50&id=615391857885
最低0.47元/天 解锁文章
1173





