ICODE SLIX2有密钥保护的物流跟踪、图书馆管理ISO15693标签读写Delphi源码

本示例使用设备:https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.6781645eXF3tm5&ft=t&id=959258149468

一、密钥认证

procedure TForm1.Button21Click(Sender: TObject);
varctrlword:byte;passwordid:byte;  //密钥类型status:byte;      //存放返回值authkeybuf:array[0..3] of byte;uidbuf:array[0..7] of byte;  //UIDcardstr:string;
begincardstr:=trim(edit4.Text);if checkuidstr(cardstr ,8,uidbuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要操作的卡片UID错误,可先执行寻卡操作获取UID!', '提示', MB_OK+MB_ICONSTOP);edit4.SetFocus ;exit;end;if checkuidstr(Trim(Edit5.Text) ,4,authkeybuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('卡片认证密钥输入错误,请输入8位16进制卡认证密钥!', '提示', MB_OK+MB_ICONSTOP);edit5.SetFocus ;exit;end;if ComboBox2.ItemIndex =4 thenpasswordid:=$10else if ComboBox2.ItemIndex =3 thenpasswordid:=$8else if ComboBox2.ItemIndex =2 thenpasswordid:=$4else if ComboBox2.ItemIndex =1 thenpasswordid:=$2else passwordid:=$1;ctrlword:=$4;status:=iso15693authkey(ctrlword,@uidbuf,passwordid,@authkeybuf);case status of0:beginpcdbeep(50);Application.MessageBox(PAnsiChar(AnsiString('UID '+cardstr+' 密钥认证成功!')), '提示',  MB_OK+MB_ICONINFORMATION);end;8:Application.MessageBox('异常代码:8,卡不在感应区或指令UID不匹配该卡!', '提示', MB_OK+MB_ICONSTOP);20:Application.MessageBox('异常代码:20,读写器不支持该指令!', '提示', MB_OK+MB_ICONSTOP);47:Application.MessageBox('异常代码:47,该卡不支持加密功能,或加密功能未启用,或密码错误(该卡将不能再响应任何指令,只能拿开卡再重放)!', '提示', MB_OK+MB_ICONSTOP);else  MessageDispInfo(status);end;
end;

 二、更改密钥

procedure TForm1.Button22Click(Sender: TObject);
varctrlword:byte;passwordid:byte;  //密钥类型status:byte;      //存放返回值newkeybuf:array[0..3] of byte;uidbuf:array[0..7] of byte;  //UIDcardstr:string;
begincardstr:=trim(edit4.Text);if checkuidstr(cardstr ,8,uidbuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要操作的卡片UID错误,可先执行寻卡操作获取UID!', '提示', MB_OK+MB_ICONSTOP);edit4.SetFocus ;exit;end;if checkuidstr(Trim(Edit10.Text) ,4,newkeybuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('卡片新密钥输入错误,请输入8位16进制新密钥!', '提示', MB_OK+MB_ICONSTOP);edit10.SetFocus ;exit;end;if ComboBox2.ItemIndex =4 thenpasswordid:=$10else if ComboBox2.ItemIndex =3 thenpasswordid:=$8else if ComboBox2.ItemIndex =2 thenpasswordid:=$4else if ComboBox2.ItemIndex =1 thenpasswordid:=$2else passwordid:=$1;ctrlword:=$4;status:=iso15693writekey(ctrlword,@uidbuf,passwordid,@newkeybuf);case status of0:beginpcdbeep(50);Application.MessageBox(PAnsiChar(AnsiString('UID '+cardstr+' 更改卡密钥成功!')), '提示',  MB_OK+MB_ICONINFORMATION);end;8:Application.MessageBox('异常代码:8,卡不在感应区或指令UID不匹配该卡!', '提示', MB_OK+MB_ICONSTOP);20:Application.MessageBox('异常代码:20,读写器不支持该指令!', '提示', MB_OK+MB_ICONSTOP);47:Application.MessageBox('异常代码:47,上一条指令必须是认证密码指令......!', '提示', MB_OK+MB_ICONSTOP);else  MessageDispInfo(status);end;
end;

三、设置密钥保护块及密钥认证方式

procedure TForm1.Button23Click(Sender: TObject);
varctrlword:byte;blockpoint,extprotectstatus:byte;  //高低块分隔地址,配置值status:byte;                 //存放返回值uidbuf:array[0..7] of byte;  //UIDcardstr:string;
begincardstr:=trim(edit4.Text);if checkuidstr(cardstr ,8,uidbuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要操作的卡片UID错误,可先执行寻卡操作获取UID!', '提示', MB_OK+MB_ICONSTOP);edit4.SetFocus ;exit;end;if(not isrightint(edit11.Text)) thenbeginApplication.MessageBox('分隔高低块的块地址输入错误!', '警告', MB_OK+MB_ICONSTOP);edit11.SetFocus();edit11.SelectAll();exit;endelse blockpoint:=strtoint(edit11.Text);extprotectstatus:=ComboBox3.ItemIndex +ComboBox4.ItemIndex *16;ctrlword:=$4;status:=iso15693protectblock(ctrlword,@uidbuf,blockpoint,extprotectstatus);case status of0:beginpcdbeep(50);Application.MessageBox(PAnsiChar(AnsiString('UID '+cardstr+' 块密码保护设定成功!')), '提示',  MB_OK+MB_ICONINFORMATION);end;8:Application.MessageBox('异常代码:8,卡不在感应区或指令UID不匹配该卡!', '提示', MB_OK+MB_ICONSTOP);20:Application.MessageBox('异常代码:20,读写器不支持该指令!', '提示', MB_OK+MB_ICONSTOP);47:Application.MessageBox('异常代码:47,必须都认证读取密码和写入密码成功后再进行块密码保护设定!', '提示', MB_OK+MB_ICONSTOP);else  MessageDispInfo(status);end;
end;

四、开启隐私保护

procedure TForm1.Button24Click(Sender: TObject);
varctrlword:byte;status:byte;      //存放返回值password:array[0..3] of byte;uidbuf:array[0..7] of byte;  //UIDcardstr:string;
begincardstr:=trim(edit4.Text);if checkuidstr(cardstr ,8,uidbuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要操作的卡片UID错误,可先执行寻卡操作获取UID!', '提示', MB_OK+MB_ICONSTOP);edit4.SetFocus ;exit;end;if checkuidstr(Trim(Edit5.Text) ,4,password)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('卡片隐私密钥输入错误,请输入8位16进制卡认证隐私密钥!', '提示', MB_OK+MB_ICONSTOP);edit5.SetFocus ;exit;end;if Application.MessageBox('卡片启用隐私保护后将不再响应除认证隐私密钥的任何指令,确认您已记住此卡的UID 及 隐私密钥,否则此卡将报废!', '严重警告', MB_OKCANCEL+MB_ICONQUESTION) <>1 then exit;ctrlword:=$4;status:=iso15693privacyen(ctrlword,@uidbuf,@password);case status of0:beginpcdbeep(50);Application.MessageBox(PAnsiChar(AnsiString('UID '+cardstr+' 启用隐私保护成功,此卡不再响应除认证隐私密码的任何指令,该卡必须 验证隐私密码 才能恢复非隐私状态!')), '提示',  MB_OK+MB_ICONINFORMATION);end;8:Application.MessageBox('异常代码:8,卡不在感应区或指令UID不匹配该卡!', '提示', MB_OK+MB_ICONSTOP);20:Application.MessageBox('异常代码:20,读写器不支持该指令!', '提示', MB_OK+MB_ICONSTOP);47:Application.MessageBox('异常代码:47,该卡不支持加密功能,或加密功能未启用,或密码错误(该卡将不能再响应任何指令,只能拿开卡再重放)!', '提示', MB_OK+MB_ICONSTOP);else  MessageDispInfo(status);end;
end;

五、读取块内数据

procedure TForm1.Button16Click(Sender: TObject);
vari:byte;status:byte;//存放返回值flags:byte;//控制标志startblock:byte; //起始扇区blocknum:byte;   //读扇区数revlen:array[0..1] of byte; //长度uidbuf:array[0..7] of byte;//UIDmypiccdata:array[0..60] of byte;//每次读卡数据缓冲readbuf:array[0..8000] of byte;//全部卡数据缓冲j,p:integer;cardstr,carddatahex:string;begincardstr:=trim(edit4.Text);if checkuidstr(cardstr ,8,uidbuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要操作的卡片UID错误,可先执行寻卡操作获取UID!', '提示', MB_OK+MB_ICONSTOP);edit4.SetFocus ;exit;end;edit9.Text :='22';flags := strtoint('$'+edit9.Text);//操作标志if(not isrightint(edit2.Text)) thenbeginApplication.MessageBox('读写起始块地址输入错误!', '警告', MB_OK+MB_ICONSTOP);edit2.SetFocus();edit2.SelectAll();exit;endelse startblock:=strtoint(edit2.Text);if(not isrightint(edit3.Text)) thenbeginApplication.MessageBox('读写块数输入错误!', '警告', MB_OK+MB_ICONSTOP);edit3.SetFocus();edit3.SelectAll();exit;endelse blocknum:=strtoint(edit3.Text );memo1.Text :='';j:=0;carddatahex:='';while j<blocknum dobeginstatus := iso15693readblock(flags,startblock+j,1,@uidbuf,@revlen,@mypiccdata);   //读一个块数据if status=0 then     //读卡成功,获取数据,指针加1beginfor i:=0 to revlen[0]-1 docarddatahex:=carddatahex+inttohex(mypiccdata[i],2)+' ';j:=j+1;endelse                //读卡失败,指针跳到最后退出j:=blocknum;end;if status=0 thenbeginpcdbeep(50);memo1.Text:=carddatahex;if revlen[0]=8 then      //根据读一块返回的字节数预判是什么类型的卡ComboBox1.ItemIndex:=1else if revlen[0]=32 thenComboBox1.ItemIndex:=2else ComboBox1.ItemIndex:=0;endelse if status=46 thenApplication.MessageBox('请先认证相应的密码!', '提示',  MB_OK+MB_ICONSTOP)elseMessageDispInfo(status);
end;

六、写数据到块内

procedure TForm1.Button17Click(Sender: TObject);
vari,j,p:integer;status:byte;      //存放返回值flags:byte;       //控制标志startblock:byte;  //起始扇区blocknum:byte;    //读扇区数writelen:integer; //长度uidbuf:array[0..7] of byte;//UIDwritebuf:array[0..1024] of byte;//卡数据缓冲mypiccdata:array[0..31] of byte;writestr:string;cardstr:string;eachblocksize:integer;beginif ComboBox1.ItemIndex=0 theneachblocksize:=4else if ComboBox1.ItemIndex=1 theneachblocksize:=8else  eachblocksize:=32;cardstr:=trim(edit4.Text);if checkuidstr(cardstr ,8,uidbuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要操作的卡片UID错误,可先执行寻卡操作获取UID!', '提示', MB_OK+MB_ICONSTOP);edit4.SetFocus ;exit;end;if(not isrightint(edit2.Text)) thenbeginApplication.MessageBox('读写起始块地址输入错误!', '警告', MB_OK+MB_ICONSTOP);edit2.SetFocus();edit2.SelectAll();exit;endelse startblock:=strtoint(edit2.Text);if(not isrightint(edit3.Text)) thenbeginApplication.MessageBox('读写块数输入错误!', '警告', MB_OK+MB_ICONSTOP);edit3.SetFocus();edit3.SelectAll();exit;endelse blocknum:=strtoint(edit3.Text );writelen:=blocknum*eachblocksize;if checkuidstr(trim(Memo1.Text) ,writelen,writebuf)=false then    //检测数据是否合法并放入数组缓冲beginApplication.MessageBox('需要写入的数据输入错误,可先执行读卡操作!', '提示', MB_OK+MB_ICONSTOP);Memo1.SetFocus ;exit;end;edit9.Text :='22';flags := strtoint('$'+edit9.Text);//操作标志j:=0;while j<blocknum dobeginfor p:=0 to eachblocksize-1 do mypiccdata[p]:=writebuf[j*eachblocksize+p];status := iso15693writeblock(flags,startblock+j,1,@uidbuf,eachblocksize,@mypiccdata);if status=0 then     //写卡成功,指针加1j:=j+1else                 //写卡失败,指针跳到最后退出j:=blocknum;end;if status=0 thenbeginpcdbeep(50);Application.MessageBox(PAnsiChar(AnsiString(cardstr+' 号卡写卡成功!')), '提示',  MB_OK+MB_ICONINFORMATION);endelse if status=46 thenApplication.MessageBox('请先认证相应的密码!', '提示',  MB_OK+MB_ICONSTOP)else  MessageDispInfo(status);
end;

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

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

相关文章

核环境特种机器人设备的抗辐照芯片选型方案

摘要&#xff1a;核能作为国家能源安全的重要组成部分&#xff0c;对工业自动化设备的稳定性和可靠性提出了极高的要求。机器人设备在涉核环境下的日常巡检、设备维护、应急响应等任务中发挥着不可替代的作用。然而&#xff0c;涉核环境&#xff0c;尤其是高能粒子的辐照效应&a…

Linux权限系统完全指南:从本质到安全实践

一、权限的本质&#xff1a;Linux安全的核心逻辑在Linux的多用户环境中&#xff0c;权限系统通过三个关键维度实现资源隔离&#xff1a;用户标识 (UID)&#xff1a;系统通过数字ID识别用户&#xff0c;root用户的UID固定为0组标识 (GID)&#xff1a;用户组机制实现批量权限管理…

养老院跌倒漏报率↓78%!陌讯多模态算法在智慧照护中的边缘计算优化

​摘要​​&#xff1a; 针对养老场景中复杂光照与遮挡导致的跌倒漏报问题&#xff0c;陌讯视觉算法通过多模态融合与边缘计算优化&#xff0c;实测显示在RK3588 NPU硬件上实现​​mAP0.5达89.3%​​&#xff0c;较基线模型提升28.5%&#xff0c;功耗降低至7.2W。本文解析其动态…

老年护理实训室建设方案:打造安全、规范、高效的实践教学核心平台

在老龄化社会加速发展的背景下&#xff0c;培养高素质、技能过硬的老年护理专业人才迫在眉睫。一个设计科学、功能完备的老年护理实训室&#xff0c;正是院校提升实践教学质量&#xff0c;对接行业需求的核心平台。本方案旨在构建一个安全、规范、高效的现代化实训环境。点击获…

OpenCv中的 KNN 算法实现手写数字的识别

目录 一.案例&#xff1a;手写数字的识别 1.安装opencv-python库 2.将大图分割成10050个小图&#xff0c;每份对应一个手写数字样品 3.训练集和测试集 4.为训练集和测试集准备结果标签 5.模型训练与预测 6.计算准确率 7.完整代码实现 一.案例&#xff1a;手写数字的识别…

TCP/IP 传输层详解

TCP/IP 传输层详解 传输层&#xff08;Transport Layer&#xff09;是 TCP/IP 模型的第四层&#xff08;对应 OSI 模型的传输层&#xff09;&#xff0c;核心功能是实现 端到端&#xff08;进程到进程&#xff09;的可靠通信。主要协议包括&#xff1a; TCP&#xff08;传输控制…

深度学习笔记:Overview

本文根据吴恩达老师的深度学习课程整理而来&#xff0c;在此表示感知。 文章目录1.课程笔记2.编程作业1.课程笔记 1&#xff09;深度学习笔记&#xff08;1&#xff09;&#xff1a;神经网络基础 2&#xff09;深度学习笔记&#xff08;2&#xff09;&#xff1a;浅层神经网络…

LLM之RAG理论(十八)| ChatGPT DeepResearch 深度研究功能全面技术分析报告

一、背景与行业环境1.1 DeepResearch 的诞生与战略意义ChatGPT DeepResearch&#xff08;深度研究&#xff09;是 OpenAI 于 2025 年 2 月 3 日正式发布的全新 AI 智能体产品&#xff0c;是继 o3-mini 模型发布后&#xff0c;OpenAI 在 AI 研究领域的又一重大突破。这一功能的推…

数据库学习--------数据库日志类型及其与事务特性的关系

在数据库系统中&#xff0c;日志是保证数据可靠性和一致性的重要组成部分&#xff0c;尤其与事务的特性紧密相连。无论是事务的原子性、一致性&#xff0c;还是持久性&#xff0c;都离不开日志的支持。数据库日志&#xff08;Database Log&#xff09;是数据库系统记录自身操作…

如何在 Ubuntu 24.04 或 22.04 LTS 上安装 OpenShot 视频编辑器

OpenShot 视频编辑器是一款轻量级工具,不需要高性能硬件即可编辑视频。它最初是一个爱好项目,后来成为一款拥有简单干净用户界面的流行免费编辑工具。这款直观的视频编辑器可以剪辑影片,并添加额外的视频和音频素材。最终,您可以将作品导出为您选择的格式。本教程将向您展示…

SpringMVC核心原理与实战指南

什么是MVC&#xff1f; MVC英文是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;一种软件设计规范。 MVC是用一种业务逻辑、数据、界面显示分离的方法&#xff0c;将业务逻辑聚集到一个部件里面&am…

【JavaEE】(7) 网络原理 TCP/IP 协议

一、应用层 应用层是程序员最关心的一层&#xff0c;需要自定义数据传输的格式&#xff0c;即前&#xff08;客户端&#xff09;后&#xff08;服务器&#xff09;端交互的接口&#xff0c;然后调用传输层的 socket api 来实现网络通信。 自定义数据传输的协议&#xff0c;主要…

深入理解 Slab / Buddy 分配器与 MMU 映射机制

&#x1f4d6; 推荐阅读&#xff1a;《Yocto项目实战教程:高效定制嵌入式Linux系统》 &#x1f3a5; 更多学习视频请关注 B 站&#xff1a;嵌入式Jerry 深入理解 Slab / Buddy 分配器与 MMU 映射机制 在现代 Linux 内核中&#xff0c;物理内存的管理和虚拟地址的映射是系统性能…

Layui核心语法快速入门指南

Layui 基本语法学习指南 Layui 是一个经典的模块化前端框架&#xff0c;以其轻量易用、组件丰富著称。以下是 Layui 的核心语法结构和使用方法&#xff1a; 一、模块加载机制&#xff08;核心基础&#xff09; // 标准模块加载语法 layui.use([module1, module2], function()…

基于百度 iframe 框架与语音解析服务的数字人交互系统实现

在智能化交互场景中,数字人作为人机交互的重要载体,其语音交互能力与指令响应效率直接影响用户体验。本文将详细介绍如何基于百度提供的 iframe 框架与语音解析服务,实现数字人语音播报、文字展示及指令响应的完整业务流程,涵盖从插件初始化到实时语音交互的全链路实现逻辑…

高防服务器租用的优势有哪些?

高防服务器具有着强大的防护能力&#xff0c;可以帮助企业抵御各种网络攻击&#xff0c;其中包括大规模的DDOS攻击&#xff0c;高防服务器中还有着防火墙、流量清洗和负载均衡等多种安全技术&#xff0c;能够保证业务持续稳定的运行&#xff0c;降低了企业整体的损失和安全风险…

7.28 进制交换|迭代器模式|map|子集按位或|带参递归

lc701.二叉搜索树插入void dfs不行TreeNode* dfs&#xff0c;带接受参数处理的dfs当为空的时候&#xff0c;就可以添加插入if (!root){return new TreeNode(val);}插入位置root->left insertIntoBST(root->left, val);class Solution {public:TreeNode* insertIntoBST(T…

方法学习(二)

.一、变量作为实参使用&#xff1a;1.定义一个方法&#xff0c;比较两个整数的大小&#xff0c;如果第一个整数比第二个整数大&#xff0c;返回true否则返回false。public static void main(String[] args) {int i 3;int j 5;//传递的是i和j&#xff0c;但是真正传递的是i和j…

计算机视觉CS231n学习(1)

面向视觉识别的卷积神经网络 CS231n Introduction计算机视觉的历史 the history of computer vision 重要节点&#xff1a;1959 Hubel & Wiesel 利用和人比较相像的猫的视觉神经做实验&#xff1a;简单细胞反应灯的位置&#xff1b;复杂细胞反应灯的位置和移动&#xff1b;…