四路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腾讯混元大模型再进化,文生图能力重磅上线,这里是一手实测腾讯混元的文生图在人像真实感、场景真实感上有比较明显的优势,同时,在中国风景、动…...
古戏台构件声学特性的时域有限差分方法【附模型】
✨ 长期致力于时域有限差分法、窑洞、戏台、八字墙、共形技术研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)曲面共形网格快速生成算法: …...
基于Arduino与应变片传感器的高精度厨房电子秤DIY全攻略
1. 项目概述:用Arduino打造一台高精度厨房电子秤作为一个喜欢在厨房里折腾的硬件爱好者,我经常遇到需要精确称量食材的场合。市面上的电子秤要么精度不够,要么价格不菲,要么功能单一。于是,我萌生了自己动手做一台的想…...
新手村任务:成为一个架构师需要哪些装备?
新手村任务:成为一个架构师需要哪些装备? 一、前言 如果你刚入行不久,想成为一名架构师,那这篇文章就是为你写的。 我们把成为架构师比作一个RPG游戏,你是主角,需要收集各种装备、刷经验、升级技能。 新手村的第一个任务就是:了解你需要哪些装备。 二、架构师技能树…...
告别FTP龟速:用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件
告别FTP龟速:用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件当面对数百GB的设计素材、日志文件或数据库备份需要迁移时,传统的FTP传输往往会成为效率瓶颈。我曾在一个视频处理项目中,需要将230GB的4K原始素材从移动硬盘导入服务器ÿ…...
股票买卖最佳时机:LeetCode121题解
题目LeetCode121给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取…...
【数据结构与算法】数据结构基础——栈和队列
目录栈和队列1. 栈1.1 栈的概念1.2 栈的实现方式分析1.3 栈的实现1.3.1 栈的初始化与销毁1.3.2 入栈与出栈1.3.3 栈的判空与有效元素个数1.3.4 栈顶元素1.4 栈的扩展1.4.1 两栈共享空间2. 队列2.1 队列的概念2.2 队列的实现方式分析2.3 队列的实现2.3.1 队列的初始化与销毁2.3.…...
机器学习在犬类癌症筛查中的性能极限与挑战:基于血液数据的多癌种分析
1. 项目概述:当机器学习遇见犬类癌症筛查作为一名长期关注数据科学在生命科学领域应用的从业者,我常常被问及一个充满希望的问题:我们能否像分析人类健康数据一样,利用宠物的常规体检数据,通过机器学习提前发现癌症的蛛…...
基于Arduino与433MHz射频的智能灯光定时系统设计与实现
1. 项目概述:告别机械定时器,打造智能灯光管家家里前后院的照明,还有出门度假时屋内的几盏灯,过去一直靠四个老旧的机械定时器来管理。说实话,这玩意儿用起来真是费劲。它的核心问题在于“死板”——你设定好晚上7点开…...
收藏|2026年大模型算法岗崛起!程序员小白入门高薪赛道全攻略
前些年,算法岗位一直稳居技术圈高薪行列,无数程序员争相入局,也成为计算机专业毕业生求职首选方向。 伴随大模型技术飞速迭代落地,行业就业格局迎来重大变革。如今含金量最高、人才缺口最大、长期发展潜力顶尖的岗位,已…...
为什么92%的数据库重构失败?Claude设计辅助如何在48小时内规避反范式陷阱?
更多请点击: https://codechina.net 第一章:为什么92%的数据库重构失败?——反范式陷阱的本质溯源 数据库重构失败率高达92%,其核心症结并非技术能力不足,而是对“反范式”这一设计策略的误读与滥用。许多团队在性能压…...
