javascript读取RFID卡号源码

news2024/11/24 8:06:50

本示例使用的读卡器:https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-21818769070.35.74185b43tGWQH5&id=562957272162

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>EM_TK4100_ID读卡器DEMO</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端口一致						

        function beep() {				     //驱动发卡器响声令
            textarea.value = "";		
            WebSocketRun("idr_beep,30");	 //30为响声时长豪秒,取值范围1-65535
        }
		
        function getdevicenumber() {         //读取发卡器唯一出厂序号,可以当加密狗使用			
            textarea.value = "";		
			serialnumber.value="";
            WebSocketRun("IDpcdgetdevicenumber");			
        }		
		
        function ReadID() {					//卡片在感应区内可以连续读取卡号
            textarea.value = "";
			carduid.value="";			
			Vendorcode.value="";
			card8h10dz.value="";
			card8h10df.value="";
			cardwg26z.value="";
			cardwg34z.value="";
            WebSocketRun("idr_read,");
        }			
		
        function ReadIDOne() {				//卡片进入感应区内只可读取一次卡号,再次读取需将卡片移开再次放入感应区
            textarea.value = "";
			carduid.value="";			
			Vendorcode.value="";
			card8h10dz.value="";
			card8h10df.value="";
			cardwg26z.value="";
			cardwg34z.value="";
            WebSocketRun("idr_read_once,");
        }						
		
		function DispErrInfo(errcode){
            var errstr = "";
            switch (errcode) {
                case "ReturnCode:008":
                    errstr = ",未寻到卡,请重新将卡放到发卡器的感应区!";
                    break;
                case "ReturnCode:021":
                    errstr = ",没有动态库!";
                    break;
                case "ReturnCode:022":
                    errstr = ",动态库或驱动程序异常!";
                    break;
                case "ReturnCode:023":
                    errstr = ",驱动程序错误或发卡器未连接!";
                    break;
                case "ReturnCode:024":
                    errstr = ",操作超时,一般是动态库没有反映!";
                    break;
                case "ReturnCode:025":
                    errstr = ",发送字数不够!";
                    break;
                case "ReturnCode:026":
                    errstr = ",发送的CRC错!";
                    break;
                case "ReturnCode:027":
                    errstr = ",接收的字数不够!";
                    break;
                case "ReturnCode:028":
                    errstr = ",接收的CRC错!";
                    break;
                case "ReturnCode:029":
                    errstr = ",函数输入参数格式错误!";
                    break;
                case "ReturnCode:444":
                    errstr = ",RFIDWebServer系统文件错误!";
                    break;
                default:
                    errstr = ",未知的错误!";
            }
            return errstr;
		}			
		
		
        window.onerror = function (e) {
            alert("不好意思,出错了!");
            return true;//屏蔽系统事件
        }

        function timeoutevent() {
            ws.close();
            textarea.value = "websockket返回超时";
        }

        //websockket数据处理
        function WebSocketRev(evt) {
            clearTimeout(mytimer);
            received_msg = evt.data;
            ws.close();

            //在这里解析返回数据
            var strlist = received_msg.split(",");
            if (strlist.length > 1) {
                var dispstr = "";
                switch (strlist[0]) {
                    case "idr_beep":
                        dispstr = "函数名称:" + strlist[0] + "\r\n";
                        if (strlist[1] == "ReturnCode:000") {
                            dispstr = dispstr + "操作结果:" + strlist[1];
                            dispstr = dispstr + ",已执行蜂鸣响声操作!\r\n"
                        } else {
                            dispstr = dispstr + "操作结果:" + strlist[1];
                            dispstr = dispstr + DispErrInfo(strlist[1]);
                        }
                        textarea.value = dispstr;
                        break;

                    case "pcdgetdevicenumber":
                        dispstr = "函数名称:" + strlist[0] + "\r\n";
                        if (strlist[1] == "ReturnCode:000") {
                            dispstr = dispstr + "操作结果:" + strlist[1];
                            dispstr = dispstr + ",已读取设备编号!\r\n"
							serialnumber.value =  strlist[2] ;
                        } else {
                            dispstr = dispstr + "操作结果:" + strlist[1];
                            dispstr = dispstr + DispErrInfo(strlist[1]);
                        }
                        textarea.value = dispstr;
                        break;

                    case "idr_read":
                    case "idr_read_once":
                        dispstr = "函数名称:" + strlist[0] + "\r\n";
                        if (strlist[1] == "ReturnCode:000") {
                            dispstr = dispstr + "操作结果:" + strlist[1];
                            dispstr = dispstr + ",已读取卡号!\r\n"
							
                        } else {
                            dispstr = dispstr + "操作结果:" + strlist[1];
                            dispstr = dispstr + DispErrInfo(strlist[1]);
                        }
                        if (strlist.length > 2) {
                            carduid.value=strlist[2] ;
							Vendorcode.value=strlist[2].substring(0,2);
							
							HLCode=strlist[2].substring(2,4)+strlist[2].substring(4,6)+strlist[2].substring(6,8)+strlist[2].substring(8,10);
							card8h10dz.value=parseInt("0x"+HLCode).toString().padStart(10, '0');
							
							LHCode=strlist[2].substring(8,10)+strlist[2].substring(6,8)+strlist[2].substring(4,6)+strlist[2].substring(2,4);
							card8h10df.value=parseInt("0x"+LHCode).toString().padStart(10, '0');
							
							cardwg26z.value=parseInt("0x"+strlist[2].substring(4,6)).toString().padStart(3, '0')+parseInt("0x"+strlist[2].substring(6,10)).toString().padStart(5, '0');
							cardwg34z.value=parseInt("0x"+strlist[2].substring(2,6)).toString().padStart(5, '0')+parseInt("0x"+strlist[2].substring(6,10)).toString().padStart(5, '0');							
                        }
                        textarea.value = dispstr;
                        break;						
																									
                }
            }
        }		
		
        function WebSocketRun(sendinfo) {
            iswsrun = false;

            try {
                if ("WebSocket" in window) {
                    ws = new WebSocket(wsUri);
                }
                else if ("MozWebSocket" in window) {
                    ws = new MozWebSocket(wsUri);
                }
                else {
                    received_msg = "您的浏览器不支持WebSocket,请选用支持WebSocket的浏览器!";
                    return;
                }

                clearTimeout(mytimer);

                ws.onopen = function (evt) {
                    ws.send(sendinfo);
                    iswsrun = true;

                    mytimer = setTimeout("timeoutevent()", 2000);
                };

                ws.onmessage = WebSocketRev;

                ws.onerror = function (e) {
                    if (iswsrun != true) {
                        received_msg = "请先在当前电脑下载>安装>运行我们的服务程序......";
                        window.open("http://www.icmcu.com/ICID15693-02V2test/RFIDWebServerSetup.exe", "top");//打开新窗口

                        alert("请先下载>安装>运行我们的服务程序,再刷新本页面......");
                    }
                };
            }
            catch (ex) {
                if (iswsrun != true) {
                    received_msg = "请先在当前电脑下载>安装>运行我们的服务程序......";
                    window.open("http://www.icmcu.com/ICID15693-02V2test/RFIDWebServerSetup.exe", "top");//打开新窗口

                    alert("请先下载>安装>运行我们的服务程序,再刷新本页面......");
                }
            }
        }
				
	</script>
</head>

<body>
<table width="866" height="224" border="1" align="center">
  <tr>
    <th width="124" height="47" scope="row"><input name="butt_beep" type="submit" id="butt_beep" onclick="beep()" value="驱动发卡器响声" /></th>
    <td width="716"><input name="butt_getdevnum" type="submit" id="butt_getdevnum" onclick="getdevicenumber()" value="读取发卡器唯一出厂序列号" />
      设备编号:
      <input name="serialnumber" type="text" id="serialnumber" size="8" maxlength="8" /></td>
  </tr>
  
  <tr>
    <th height="76" scope="row"><p>
      <input name="butt_idr_read" type="submit" id="butt_idr_read" onclick="ReadID()" value="连续读取ID卡号" />
    </p>
      <p>&nbsp; </p>
    <p>
      <input name="button" type="submit" id="button" onclick="ReadIDOne()" value="只读一次ID卡号" />
    </p></th>
    <td><p>原始16进制卡号:
      <input name="carduid" type="text" id="carduid" size="10" maxlength="10" />
      ,厂商代码:
      <input name="Vendorcode" type="text" id="Vendorcode" size="2" maxlength="2" />
    </p>
      <p>转8H10D正码:
  <input name="card8h10dz" type="text" id="card8h10dz" size="10" maxlength="10" />
    ,转8H10D反码:
    <input name="card8h10df" type="text" id="card8h10df" size="10" maxlength="10" />
    </p>
    <p>转WG26正码:
      <input name="cardwg26z" type="text" id="cardwg26z" size="10" maxlength="10" />
,转WG34正码:
<input name="cardwg34z" type="text" id="cardwg34z" size="10" maxlength="10" />
    </p></td>
  </tr>
  
  <tr>
    <th height="78" scope="row"><p>操作提示</p></th>
    <td><textarea name="textarea" id="textarea" cols="100" rows="5" ></textarea></td>
  </tr>
</table>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1326432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【pentaho】kettle读取Hive表不支持bigint和timstamp类型解决。

一、bigint类型 报错: Unable to get value BigNumber(16) from database resultset显示kettle认为此应该是decimal类型(kettle中是TYPE_BIGNUMBER或称BigNumber)&#xff0c;但实际hive数据库中是big类型。 修改kettle源码解决&#xff1a; kettle中java.sql.Types到kettle…

记录SpringBoot包找不到主清单属性问题

之前从来没在意过这个问题&#xff0c;无数次项目打包都没有问题&#xff0c;突然有一天新建了个springboot项目打包部署的时候报错&#xff1a;no main manifest attribute, in xxxx-0.0.1-SNAPSHOT.jar 本明白什么原因&#xff0c;貌似也知道怎么去解决&#xff0c;以为是小…

vue3 在vite.config中无法使用import.meta.env.*的解决办法

第一种,优先使用第一种方法,其中参数mode就是自定义--mode的值,如果没写,就是production或development import { loadEnv } from vite export default ({ mode }) > {return defineConfig({plugins: [vue()],base:loadEnv(mode, process.cwd()).VITE_APP_NAME}) } 第二种 …

【Eachrts】水滴图

引入依赖 npm安装echarts、echarts-liquidfill插件 "echarts": "^5.4.2", "echarts-liquidfill": "^3.1.0",引入插件 import * as echarts from echarts; import echarts-liquidfill;示例 <template><div class"Liqu…

JSON Web Token JWT几种简单的绕过方法

JWT结构 JSON Web Token&#xff08;JWT&#xff09;是一个非常轻巧的规范。 这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 JWT常被用于前后端分离&#xff0c;可以和Restful API配合使用&#xff0c;常用于构建身份认证机制 如图为JWT加密后的示例&…

工厂设备部如何选择合适的泵类设备状态监测技术

在现代工业生产中&#xff0c;泵类设备是工厂设备部不可或缺的一部分。为了确保泵类设备的高效运行和可靠性&#xff0c;预防故障和提高维护效率&#xff0c;工厂设备部需要选择合适的泵类设备状态监测技术。本文将探讨一些关键因素&#xff0c;帮助工厂设备部进行正确的选择。…

Ubuntu 常用命令之 awk 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 AWK是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。在Ubuntu系统下&#xff0c;AWK命令主要用于数据处理和生成报告。 AWK命令的参数主要有 -F&#xff1a;指定输入文件分隔符&#xff0c;FS变量就是指定输入字…

RHCE8 资料整理(目录)

RHCE8 资料整理&#xff08;目录&#xff09; 第一篇 基本配置第二篇 用户及权限管理第三篇 网络相关配置第四篇 存储管理第五篇 系统管理第 六 篇 软件管理第 七 篇 安全管理第 八 篇 容器管理第 九 篇 自动化管理工具ansible的使用 第一篇 基本配置 入口 第1章 安装RHEL8 第…

php伪协议 [SWPUCTF 2021 新生赛]PseudoProtocols

根据题目提示 我们直接用伪协议读取hint.php即可 php://filter/readconvert.base64-encode/resourcehint.php 我们把得到的编码拿去base64解密一下得到 那我们直接去访问一下 也可以用伪协议继续读取&#xff0c;只不过最后要base64解密一下 php://filter/readconvert.base6…

UE5 runtime模式下自定义视口大小和位置并跟随分辨率自适应缩放

本文旨在解决因UI问题导致屏幕中心位置不对的问题 处理前的现象&#xff1a;如果四周UI透明度都为1&#xff0c;那么方块的位置就不太对&#xff0c;没在中心 处理后的现象&#xff1a; 解决办法&#xff1a;自定义大小和视口偏移 创建一个基于子系统的类或者蓝图函数库(什么类…

期货高低板(期货价格飘升,市场掀起高低潮流)

什么是期货高低板&#xff1f; 期货是由交易所统一交易的标准化合约&#xff0c;商品的价格是通过供求关系来决定的。高低板则是期货交易中的常见现象&#xff0c;它表示了在交易过程中&#xff0c;价格波动超过了可设定的最高或最低价&#xff0c;于是交易系统便会出现高板或…

【为什么不能用浮点数表示金额?】

为什么不能用浮点数表示金额&#xff1f; ✅为什么不能用浮点数表示金额&#xff1f;✅拓展知识仓✅十进制转二进制✅不是所有数都能用二进制表示✅IEEE 754✅避免精度丢失 ✅为什么不能用浮点数表示金额&#xff1f; 主要原因&#xff1a; 因为不是所有小数都能用二进制表示&…

WPF实战项目二十一(客户端):设置默认首页

1、在Common文件夹里面新增接口IConfigureService&#xff0c;来专门配置启动过程设置的一些参数 public interface IConfigureService{void Configure();} 2、MainViewModel中继承接口IConfigureService&#xff0c;并实现 public class MainViewModel : BindableBase, ICon…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd&#xff0c;增加了存储&#xff0c;更新系统到windows server 2019标准版。 查找了网上的系统安装方式&#xff0c;都没有实践成功&#xff0c;做一下工作记录&#xff0c;给大家做参考。 网络搜索到的两种方式&#xff0c;进行安装 &#x…

互操作性(Interoperability)如何影响着机器学习的发展?

互操作性&#xff08;Interoperability&#xff09;&#xff0c;也称为互用性&#xff0c;即两个系统之间有效沟通的能力&#xff0c;是机器学习未来发展中的关键因素。对于银行业、医疗和其他生活服务行业&#xff0c;我们期望那些用于信息交换的平台可以在我们需要时无缝沟通…

Halcon算子或函数fun(a :b : c1,c2 : d)中参数的双引号:和逗号,是什么意思

在创建新函数窗口可以看到算子一般有四个类型参数&#xff0c;每个类型参数用":"隔开&#xff0c;所以对每个算子打开F1帮助窗口会发现函数简介的括号里面都有3个":。 可以对照&#xff1a;new_fun ( input_img : output_img : input_control : out_control ) …

MACD 指标是什么?如何用它找出最佳买、卖点?

XM平台官网开户注册流程图解 FXCM福汇个人注册登录流程讲解Exness手机登录平台学习指南 MACD 指标 (Moving Average Convergence & Divergence) 中文名为平滑异同移动平均线指针&#xff0c;MACD 是在 1970 年代由美国人 Gerald Appel 所提出&#xff0c;是一项历史悠久且…

docker安装Elasticsearch:8.2和kibana:8.2

前置&#xff1a;es8和7的版本有区别&#xff0c;8的版本比7在安装的时候多了安全校验,本文主要跳过安全校验 主要参考:Docker下elasticsearch8部署、扩容、基本操作实战(含kibana) - 知乎 1.安装es -e xpack.security.enabledfalse主要关闭安全校验 docker pull elasticse…

大数据可视化BI分析工具Apache Superset结合内网穿透实现远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

​Halcon机器视觉软件学习指南

引言 Halcon是由德国MVTec软件公司开发的一款领先的机器视觉软件&#xff0c;广泛应用于工业检测、图像分析、医疗图像处理等领域。对于大学生和初学者而言&#xff0c;学习Halcon不仅能够提升技术层面的能力&#xff0c;还能够增强未来的就业竞争力。本文将为您提供一个系统的…