四路IC卡读卡器通信协议
1、摘要
Sle4442卡为256字节加密卡,存在读数据、写数据、保护数据以及密码操作。该卡在密码验证之前数据为只读状态,需要写入数据必须先进行密码验证,密码为3个字节,新卡初始密码为0xff,0xff,0xff。该读卡器卡可读写主存储器和加密存储器,以及密码验证,和查询读卡器上卡的状态(是否验证过密码),当读卡器上有卡拔插时读卡器会主动发送卡状态指令给上位机。
2、通信协议内容
波特率 19200
表1 计算机发送到读卡器的数据格式
地址偏移 | 内容 | 说明 |
0 | 数据包头 | 0x55 |
1 | 指令字节1 | 1—操作卡1,2—操作卡2……4—操作卡4 |
2 | 指令字节2 | Bit7:0—读,1—写 Bit2-Bit0: 0—主存储器,1—加密储存器,2—密码校验,3—查询卡状态 |
3 | 指令字节3 | 数据帧状态,0--单独帧,1--起始帧2--中间帧,3--结束帧 |
4 | 地址 | 0-255 |
5 | 数据字节数 | 取值范围0-32 |
6-37 | 数据 | 最多32字节的数据 |
38 | 校验高字节 | 前面0-37所有数据的和 |
39 | 校验低字节 |
表2 读卡器发送到计算机的数据格式
地址偏移 | 内容 | 说明 |
0 | 数据包头 | 0x55 — 正常,0x5A—未插卡,0xA5—卡无效或卡损坏,0xAA — 未验证密码,0xAB — 连续写入错误(没有起始帧),0xBB —密码验证失败 |
1 | 指令字节1 | 1—操作卡1,2—操作卡2……4—操作卡4 |
2 | 指令字节2 | Bit7:0—读,1—写 Bit2-Bit0: 0—主存储器,1—加密储存器,2—密码验证,3—卡状态 |
3 | 指令字节3 | 数据帧状态,0--单独帧,1--起始帧2--中间帧,3--结束帧 |
4 | 地址 | 0-255 |
5 | 数据页数 | 取值范围0-16,对应数据总量0-256 |
6-37 | 数据 | 最多32字节的数据 |
38 | 校验高字节 | 前面0-37所有数据的和 |
39 | 校验低字节 |
3、读取数据示例
3.1单页读取数据
例如读取卡3读取地址0x0a开始的32个字节
地址偏移 | 0 | 1 | 2 | 3 | 4 | 5 | 6—37 | 38 | 39 |
内容 | 0x55 | 0x03 | 0x00 | 0x00 | 0x0a | 0x01 | 0x00…0x00 | 0x00 | 0x63 |
解析:
0x55:起始字节,固定
0x03:指令字节1,卡3
0x00:指令字节2,读取主存储器
0x00:指令字节3:读取时忽略
0x0a:地址
0x01:页数,1页
0x00…0x00:数据,读取时忽略
0x00-0x63:校验,前面38字节和
收到此命令后,读卡器将返回主存储器地址0x0a开始的32字节数据
3.2 连续读取数据
例如要读取卡2的地址0x20处的96字节数据,则发送指令为:
地址偏移 | 0 | 1 | 2 | 3 | 4 | 5 | 6-37 | 38 | 39 |
内容 | 0x55 | 0x02 | 0x00 | 0x00 | 0x20 | 0x03 | 0x00…0x00 | 0x00 | 0x7A |
解析:
0x55:起始字节,固定
0x02:指令字节1,卡2
0x00:指令字节2,读取主存储器
0x00:指令字节3:读取时忽略
0x20:地址
0x03:页数,3页(96字节)
0x00…0x00:数据,读取时忽略
0x00-0x7A:校验,前面38字节和
收到此命令后,读卡器将返回地址0x20开始的96字节数据,数据分三次次返回,每次返回32字节,每次返回数据的地址是实际地址,即第一次返回0x20,第二次返回0x40,第三次返回0x60
4.写入示例
4.1单页写入数据
例如要写入卡2的地址0x80处的32字节数据,则发送指令为:
地址偏移 | 0 | 1 | 2 | 3 | 4 | 5 | 6-37 | 38 | 39 |
内容 | 0x55 | 0x02 | 0x80 | 0x00 | 0x80 | 0x01 | 0x00…0x00 | 0x01 | 0x58 |
解析:
0x55:起始字节,固定
0x02:指令字节1,卡2
0x80:指令字节2,0x80表示写入主存储器
0x00:指令字节3,单独帧
0x80:写入的地址为0x80
0x01:写入1页数据
0x00…0x00:实际写入数据
0x01-0x58:校验,前面38字节的数据之和
收到此命令后,读卡器将32字节数据写入地址0x80开始的位置,并返回写入信息,返回的状态中,只要开头的0x55和校验对就说明写入成功,其他部分数据忽略。
4.2连续写入数据
例如要写入卡3的地址0x10处的128字节数据,则发送指令为:
地址偏移 | 0 | 1 | 2 | 3 | 4 | 5 | 6-37 | 38 | 39 |
内容 | 0x55 | 0x03 | 0x80 | 0x01 | 0x10 | 0x04 | 0x00…0x00 | 0x00 | 0xEE |
解析:
0x55:起始字节,固定
0x03:指令字节1,卡3
0x80:指令字节2,0x80表示写入主存储器
0x01:指令字节3,0x01表示此帧是要写入的第一帧数据,写第2-第3帧数据时,发送指令为0x02,写第四帧数据时,发送指令为0x03,发送完第四帧数据后,读卡器将数据写入卡中,并返回状态
0x10:写入的地址为0x0120
0x04:写入4页数据
0x00…0x00:要写入的数据
0x00-0xEE:校验,前面38字节的数据之和
收到此4次数据写入命令完成后,读卡器将128字节数据写入地址0x10开始的位置,并返回状态,返回的状态中,只要开头的0x55和校验对就说明写入成功,其他部分数据忽略。
5. 密码验证示例
例如要验证入卡1密码为0xff,0xff,0xff:
地址偏移 | 0 | 1 | 2 | 3—5 | 6 | 7 | 8 | 9-37 | 38 | 39 |
内容 | 0x55 | 0x01 | 0x02 | 0x00…0x00 | 0xff | 0xff | 0xff | 0x00…0x00 | 0x03 | 0x55 |
解析:
0x55:起始字节,固定
0x01:指令字节1, 卡1
0x02:指令字节2,验证密码
0x00…0x00:验证密码时忽略
0xff,0xff,0xff:需要验证的密码
0x00…0x00:其余数据部分,忽略
0x03-0x55:校验,前面38字节的数据之和
收到此命令后,读卡器将写入卡1密码0xff,0xff,0xff,并返回写入信息,返回的状态中,只要开头的0x55和校验对就说明写入成功,其他部分数据忽略。
6. 查询卡状态示例
地址偏移 | 0 | 1 | 2 | 3—5 | 6-37 | 38 | 39 |
内容 | 0x55 | 0x00 | 0x03 | 0x00…0x00 | 0x00…0x00 | 0x00 | 0x5B |
解析:
0x55:起始字节,固定
0x00:指令字节1, 查询卡状态时忽略
0x00…0x00:查询卡状态时忽略
0x00…0x00:数据,查询卡状态时忽略
0x00-0x5B:校验,前面38字节的数据之和
收到此命令后,读卡器将返回卡状态信息,返回的状态中,只要开头的0x55和校验对就说明成功,数据位6—9为位卡1—卡4状态,0—无卡,1—有卡但未验证密码,2—有卡且验证密码,其他部分数据忽略。
相关文章:
四路IC卡读卡器通信协议
1、摘要 Sle4442卡为256字节加密卡,存在读数据、写数据、保护数据以及密码操作。该卡在密码验证之前数据为只读状态,需要写入数据必须先进行密码验证,密码为3个字节,新卡初始密码为0xff,0xff,0xff。该读卡器…...
JavaFX作业
前言: 在写这个作业之前,尝试在JavaFX中添加全局快捷键,测试了大概5个小时,到处找教程换版本,结果最后还是没找到支持Java8以上的(也有可能是我自己的问题),最后只能退而求其次&…...

【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具
前言 这里是【使用Python编写游戏辅助工具】的第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具。本文主要介绍使用PySide6来实现构建GUI工具。 在前面,我们实现了两个实用的游戏辅助功能: 由键盘监听事件触发的鼠标连…...

06.Oracle数据备份与恢复
Oracle数据备份与恢复 一、通过RMAN方式备份二、使用emp/imp和expdb/impdb工具进行备份和恢复三、使用Data guard进行备份与恢复 一、通过RMAN方式备份 通过 RMAN(Oracle 数据库备份和恢复管理器)方式备份 Oracle 数据库,可以使用以下步骤&a…...

大航海时代Ⅳ 威力加强版套装 HD Version (WinMac)中文免安装版
《大航海时代》系列的人气SRPG《大航海时代IV》以HD的新面貌再次登场!本作品以16世纪的欧洲“大航海时代”为舞台,玩家将以探险家、商人、军人等不同身份与全世界形形色色的人们一起上演出跌宕起伏的海洋冒险。游戏中玩家的目的是在不同的海域中掌握霸权…...

微信小程序 uCharts的使用方法
一、背景 微信小程序项目需要渲染一个柱状图,使用uCharts组件完成 uCharts官网指引👉:uCharts官网 - 秋云uCharts跨平台图表库 二、实现效果 三、具体使用 进入官网查看指南,有两种方式进行使用:分别是原生方式与组…...

面试算法54:所有大于或等于节点的值之和
题目 给定一棵二叉搜索树,请将它的每个节点的值替换成树中大于或等于该节点值的所有节点值之和。假设二叉搜索树中节点的值唯一。例如,输入如图8.10(a)所示的二叉搜索树,由于有两个节点的值大于或等于6(即…...

七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到LongLora版LLaMA、Mistral
前言 如此前这篇文章《学术论文GPT的源码解读与微调:从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述,对于论文的摘要/总结、对话、翻译、语法检查而言,市面上的学术论文GPT的效果虽暂未有多好,可至少还过得去&am…...
PyTorch入门学习(十二):神经网络-搭建小实战和Sequential的使用
目录 一、介绍 二、先决条件 三、代码解释 一、介绍 在深度学习领域,构建复杂的神经网络模型可能是一项艰巨的任务,尤其是当您有许多层和操作需要组织时。幸运的是,PyTorch提供了一个方便的工具,称为Sequential API,…...

Linux shell编程学习笔记20:case ... esac、continue 和break语句
一、case ... esac语句说明 在实际编程中,我们有时会请到多条件多分支选择的情况,用if…else语句来嵌套处理不烦琐,于是JavaScript等语言提供了多选择语句switch ... case。与此类似,Linux Shell脚本编程中提供了case...in...esa…...

树莓派4无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)
本文记录了这段比较坎坷的探索之路,由于你的问题不一定是我最终解决方案的,可能是前面探索路上试过的,所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B,插上之前树莓派 4B 的 TF 卡直接就能使用(毕竟是一样规…...
花草世界生存技能
多菌灵 杀菌常用 阿维菌素 杀虫常用 除蚜虫 吡虫啉 有毒性 内吸性(植物吸收) 苦参碱 无毒,中药提取 内吸性药 吡虫啉,噻虫嗪、啶虫脒、苦参碱 栀子花 春秋花后修剪 牡丹 秋冬种植; 洛阳产地; 肥料 …...

执行npm install时老是安装不成功node-sass的原因和解决方案
相信你安装前端项目所需要的依赖包(npm install 或 yarn install)时,有可能会出现如下报错: D:\code\**project > yarn install ... [4/4] Building fresh packages... [-/6] ⠁ waiting... [-/6] ⠂ waiting... [-/6] ⠂ wai…...

【MongoDB】集群搭建实战 | 副本集 Replica-Set | 分片集群 Shard-Cluster | 安全认证
文章目录 MongoDB 集群架构副本集主节点选举原则搭建副本集主节点从节点仲裁节点 连接节点添加副本从节点添加仲裁者节点删除节点 副本集读写操作副本集中的方法 分片集群分片集群架构目标第一个副本集第二个副本集配置集初始化副本集路由集添加分片开启分片集合分片删除分片 安…...

「Verilog学习笔记」四选一多路器
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 通过波形示意图我们可以发现,当sel为0,1,2时,输出mux_out分别为d3,d2,d1,那么sel3…...

asp.net 创建docker容器
首先创建asp.net web api 创建完成后如下图 添加docker支持 添加docker支持 添加linux docker支持...

Linux项目自动化构建工具-make/Makefile使用
make/Makefile使用介绍 make是一个命令makefile是一个在当前目录下存在的一个具有特定格式的文本文件 下面我们设计一个场景,实现make命令对我们code.c文件进行编译和删除。 1 #include<stdio.h> 2 3 int main() 4 { 5 printf("hello,world!…...

【React】03.脚手架的进阶应用
文章目录 暴露webpack配置暴露前后的区别config文件夹:scripts文件夹:package.json 常见的配置修改1.把sass改为less2.配置别名3.修改域名和端口号4.修改浏览器兼容5.处理Proxy跨域 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 …...

WPF开源控件HandyControl——零基础教程
学习Handycontrol的过程中,为后边快速开发,写的零基础教程,尽量看完就可以实践! 参考教程 中文文档:欢迎使用HandyControl | HandyOrg Github代码:https://github.com/HandyOrg/HandyControl 使用教程:WPF-HandyControl安装和使用 - 掘金 安装配置教程 创建wpf项目 …...

chinese-stable-diffusion中文场景文生图prompt测评集合
腾讯混元大模型文生图操作指南.dochttps://mp.weixin.qq.com/s/u0AGtpwm_LmgnDY7OQhKGg腾讯混元大模型再进化,文生图能力重磅上线,这里是一手实测腾讯混元的文生图在人像真实感、场景真实感上有比较明显的优势,同时,在中国风景、动…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...