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
英文地址,請注明出處:http://en.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;…