C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声

news2025/1/23 12:54:42

 

本示例使用的设备:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)

服务端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Web.Services;
using Newtonsoft.Json;

public partial class HttpReader : System.Web.UI.Page
{
    public string RepStr = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        //Request方式:直接以对象索引的方式获取参数值,不受POST或GET方式影响。
        //Request.QueryString方式:在客户端使用GET方式进行提交时可以使用此方式获取。高效
        //Request.Form方式:在客户端使用POST方式进行提交时可以使用此方式进行获取。高效
        //Request.Params方式:该方式属于多种获取数据的一个集合,包括Cookie,此方式同样不受POST和GET方式影

        string info = "";
        string jihao = "";
        string cardtype = "";
        string card = "";
        string Data = "";
        string dn = "";
        string Status = "";
        Int16 cardtype16 = 0;
        int cardtypecode = 0;
        int pushortake = 0;
        string dispstr = "";
        string ChineseVoice = "[v8]";    //[v8]表示本次播报语音音量,取值范围v1 到 v16

        try             
        {   //GET、POST提交方式下解析获取提交的各项参数
            if (Request.Params["info"] != null) { info = Request.Params["info"]; }             //信息序号
            if (Request.Params["jihao"] != null) { jihao = Request.Params["jihao"]; }          //设备机号(可自编)
            if (Request.Params["cardtype"] != null){cardtype = Request.Params["cardtype"];}    //卡类型,卡状态
            if (Request.Params["card"] != null) { card = Request.Params["card"]; }             //卡序列号
            if (Request.Params["data"] != null) { Data = Request.Params["data"]; }             //扇区内容
            if (Request.Params["dn"] != null) { dn = Request.Params["dn"]; }                   //设备硬件序列号,出厂时已固化,全球唯一
            if (Request.Params["status"] != null) { Status = Request.Params["status"]; }       //读卡状态,如密码认证失败为12

            if (info != "" && jihao != "" && cardtype != "" && card != "")
            {                
                cardtype16 = Convert.ToInt16(cardtype, 16);
                pushortake = cardtype16 / 128;       //pushortake=0 表示读卡,>0表示卡离开感应区
                cardtypecode = cardtype16 % 16;      // cardtypecode=1 ID卡,2 HID卡,3 T5557卡,4 EM4305卡,5 IC卡,6 二代身份证,7 是15693卡,IClass"                
            }
            else    //如未获取到有效参数,使用JSON方式解析获取提交的参数
            {
                StreamReader sr = new StreamReader(Request.GetBufferlessInputStream());
                string response = sr.ReadToEnd();

                RootObject rb = JsonConvert.DeserializeObject<RootObject>(response);
                info = rb.info;            //接收到的数据包号,需回应该包号
                jihao = rb.jihao;          //设备机号(可自编)
                cardtype = rb.cardtype;    //卡类型,卡状态
                card = rb.card;            //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
                Data = rb.data;            //扇区内容
                dn = rb.dn;                //设备硬件序列号,出厂时已固化,全球唯一
                Status = rb.status;        //读卡状态,如密码认证失败为12

                if (info != "" && jihao != "" && cardtype != "" && card != "")
                {
                    cardtype16 = Convert.ToInt16(cardtype, 16);
                    pushortake = cardtype16 / 128;       //pushortake=0 表示读卡,>0表示卡离开感应区
                    cardtypecode = cardtype16 % 16;      // cardtypecode=1 ID卡,2 HID卡,3 T5557卡,4 EM4305卡,5 IC卡,6 二代身份证,7 是15693卡,IClass"         
                }
            }

            if (info != ""  && card != "")    //通过解析获取到了有效的参数,回应驱动读卡器显示文字、蜂鸣响声或播报语音
            {
                dispstr = "{" + getChinesecode("卡号") + ":}" + (card + "      ").Substring(0, 12) + DateTime.Now.ToString("yy-MM-dd HH:mm:ss"); //显示信息,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示

                if (pushortake > 0){
                    ChineseVoice = ChineseVoice + getChinesecode("卡号") + "[n1]" + card + getChinesecode("离开感应区!");     //TTS语音,注意中文汉字一定要转换为设备能识别的编码,[n1]表示数字播报方式,其它字母数字符号不需要转换              
                }
                else{
                    ChineseVoice = ChineseVoice + getChinesecode("读取卡号") + "[n1]" + card;
                }

                RepStr = "Response=1";                    //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声
                RepStr = RepStr + "," + info;             //提交的信息序号,一定要对应
                RepStr = RepStr + "," + dispstr;          //读卡器上显示文字
                RepStr = RepStr + ",20";                  //显示时长20秒
                RepStr = RepStr + ",2";                   //蜂鸣器发声种类,取值范围0-12
                RepStr = RepStr + "," + ChineseVoice;     //播报的TTS语音

                Response.Write(RepStr);    //将回应信息传送到读卡器
                Response.End();
            }
        }
        catch { }
        
    }

    public static string getChinesecode(string inputip)   //获取中文编码,显示汉字、TTS中文语音都要转换编码
    {
        byte[] Chinesecodearry = System.Text.Encoding.GetEncoding(936).GetBytes(inputip);
        int codelen = (byte)Chinesecodearry.Length;
        string hexcode = "";
        for (int i = 0; i < codelen; i++)
        {
            if (i % 2 == 0) { hexcode = hexcode + "\\x"; }
            hexcode = hexcode + Chinesecodearry[i].ToString("X2");
        }
        return hexcode;
    }

    public class RootObject  //json类
    {
        public string info { get; set; }
        public string jihao { get; set; }
        public string cardtype { get; set; }
        public string card { get; set; }
        public string data { get; set; }
        public string dn { get; set; }
        public string status { get; set; }
    }

}
前端脚本 :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="HttpReader.aspx.cs" Inherits="HttpReader" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Http读卡器Demo</title>
</head>

<body>
    <form id="form1" runat="server">
    <div style="height: 96px">
       
    </div>
    </form>
</body>
</html>

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

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

相关文章

leetcode59. 螺旋矩阵 II(java)

螺旋矩阵 题目描述缩进法 上期经典 题目描述 难度 - 中等 原题链接 - 螺旋矩阵 示例1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;[[1]] 提示&#xff1a; 1 < n < 20 缩进法…

Leetcode每日一题:1782. 统计点对的数目(2023.8.24 C++)

目录 1782. 统计点对的数目 题目描述&#xff1a; 实现代码与解析&#xff1a; hash 双指针 原理思路&#xff1a; 1782. 统计点对的数目 题目描述&#xff1a; 给你一个无向图&#xff0c;无向图由整数 n &#xff0c;表示图中节点的数目&#xff0c;和 edges 组成&am…

【C++初阶】list的常见使用操作

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Opencascad(C++)-建模-创建有界直线段

文章目录 1、 前言2、用gp_Lin创建一条直线2.1 gp_Lin类成员函数2.2 创建一条直线2.3 运行结果 3、创建一条有界的直线段3.1 功能说明3.2 函数说明3.2 创建直线段的代码3.3 测试效果 1、 前言 在Opencascad开发时&#xff0c;经常会遇到创建直线的情况&#xff0c;采用gp_Line…

计算机终端核心安全配置规范

声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准提出了政务计算机终端核心配置的基本概念和要求&#xff0c;规定了核心配置的自动化实现方法&#xff0c;规范了核心配置实施流程。 本标准适…

设计模式(单例模式,工厂模式),线程池

目录 什么是设计模式? 单例模式 饿汉模式 懒汉模式 工厂模式 线程池 线程池种类 ThreadPoolExcutor的构造方法: 手动实现一个线程池 什么是设计模式? 计算机行业程序员水平层次不齐,为了让所有人都能够写出规范的代码,于是就有了设计模式,针对一些典型的场景,给出一…

嵌入式学习之linux

今天&#xff0c;主要对linux文件操作原理进行了学习&#xff0c;主要学习的内容就是对linux文件操作原理进行理解。写的代码如下&#xff1a;

[MyBatis系列④]核心配置文件

目录 1、简介 2、DTD 3、typeHandlers 3.1、默认类型处理器 3.2、自定义类型处理器 4、plugins ⭐MyBatis系列①&#xff1a;增删改查 ⭐MyBatis系列②&#xff1a;两种Dao开发方式 ⭐MyBatis系列③&#xff1a;动态SQL 1、简介 MyBatis的核心配置文件&#xff08;通常命…

【Spring Boot】数据库持久层框架MyBatis — MyBatis简介

MyBatis简介 本节首先会介绍什么是ORM、什么是MyBatis、MyBatis的特点以及核心概念&#xff0c;最后介绍MyBatis是如何启动、如何加载配置文件的&#xff1f; 1.什么是ORM ORM&#xff08;Object Relational Mapping&#xff0c;对象关系映射&#xff09;是为了解决面向对象…

抖音创作服务平台发布作品

最近分析了一下抖音创作服务平台发布作品的步骤 获取密钥等参数通过密钥等参数获取到上传视频需要的参数上传视频发布作品 需要的一些参数有a_bogus Signature crc32等 目前还没有校验a_bogus 只需要传入Cookie以及视频即可发布

C语言sscanf函数学习

sscanf()与scanf()相比&#xff0c;scanf()以键盘(stdin)为输入源&#xff0c;sscanf()以第一个参数的固定字符串为输入源&#xff1b; sscanf()的头文件是 #include <stdio.h>&#xff1b; 函数原型&#xff1a; int sscanf (char *str, char * format [, argument, ..…

纸贵科技连续三年蝉联IDC中国 FinTech 50榜单

近日&#xff0c;国际权威市场研究机构IDC公布了“2023 IDC中国FinTech 50榜单”。作为领先的区块链技术和解决方案服务商&#xff0c;纸贵科技凭借过硬的区块链技术和丰富的金融科技创新成果&#xff0c;连续第三年荣登IDC中国FinTech 50榜单。 IDC中国FinTech 50榜单是金融科…

广告电商模式

电商越来越渗透进我们的生活之中&#xff0c;网上医疗&#xff0c;网上订购电影票&#xff0c;车票等&#xff0c;未来绝不仅仅是网购这么简单&#xff0c;电商行业以后会与生活的方方面面更加精密结合在一起。因此&#xff0c;电商销售的发展是持续增长的&#xff0c;现在很多…

Oracle 查询(当天,月,年)的数据

Trunc 在oracle中&#xff0c;可利用 trunc函数 查询当天数据&#xff0c;该函数可用于截取时间或者数值&#xff0c;将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值&#xff0c;返回指定的…

[线程/C++(11)]线程池

文章目录 一、C实现线程池1. 头文件2. 测试部分 二、C11实现线程池1. 头文件2. 测试部分 一、C实现线程池 1. 头文件 #define _CRT_SECURE_NO_WARNINGS #pragma once #include<iostream> #include<string.h> #include<string> #include<pthread.h> #…

vue学习之热更新、单文件开发、插槽、作用域插槽

vue-cli 全局安装&#xff1a;-g&#xff0c;全局安装 vue-cli npm install -g vuecli 创建项目 vue create my-app 生成的文件结构&#xff1a; node-modules: 存放依赖src&#xff1a;源代码文件夹src- components&#xff1a;存放组件的位置 将上一篇中我们html的文件…

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

为什么要有服务网关? 我们都知道在微服务架构中&#xff0c;系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;难道要一个个的去调用吗&#xff1f;很显然这是不太实际的&#xff0c;我们需要有一个统一的接口与这些微服务打交道&#xf…

Android JNI系列详解之CMake配置库文件的输出目录

一、前提 阅读上一篇文章Android JNI系列详解之CMake编译工具的使用&#xff0c;里面讲到了需要配置两个文件&#xff1a;CMakeList.txt和build.gradle 二、配置CMake编译工具输出库文件的路径 1.默认的库文件输出路径&#xff1a;app/build/intermediates/cmake/debug/obj 由此…

springboot整合rabbitmq发布确认高级

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们如何才能进行 RabbitMQ 的消息可靠投递。 发布确认 发布确认方案 架构 配置…

poi带表头多sheet导出

导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…