Delphi读写IC卡数据、修改IC卡认证密钥源码

本示例使用的设备:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com) 

 函数声明

unit declaredll;interface//读卡函数声明function piccreadex(ctrlword:byte;pserial:pbyte;area:byte;keyA1B0:byte;picckey:pbyte;piccdata0_2:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//写卡函数声明function piccwriteex(ctrlword:byte;pserial:pbyte;area:byte;keyA1B0:byte;picckey:pbyte;piccdata0_2:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//驱动蜂鸣器函数声明function pcdbeep(xms:integer):byte;stdcall;external 'OUR_MIFARE.dll';//修改单区密码函数声明function piccchangesinglekey(ctrlword:byte;pserial:pbyte;area:byte;keyA1B0:byte;piccoldkey:pbyte;piccnewkey:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//修改单区密码改单区AB密码或访问控制位函数声明function piccchangesinglekeyex(ctrlword:byte;serial:pbyte;area:byte;keyA1B0:byte;piccoldkey:pbyte;piccdata:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//读出设备编号函数声明function pcdgetdevicenumber(pdevicenumber:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//只读取卡号函数function piccrequest(pserial:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//发送显示function lcddispfull(lcdstr:PChar):byte;stdcall;external 'OUR_MIFARE.dll';//改写0区0块UIDfunction piccwriteserial(ctrlword:byte;pserial:pbyte;keyA1B0:byte;picckey:pbyte;piccdata:pbyte):byte;stdcall;external 'OUR_MIFARE.dll';//读7字节卡号function  piccrequest_ul(piccdata:pbyte):byte; stdcall;external 'OUR_MIFARE.dll';//读身份证UIDfunction  sfzrequest(piccdata:pbyte):byte; stdcall;external 'OUR_MIFARE.dll';//读iCLass CSNfunction  iso15693iclassreadcsn(piccdata:pbyte):byte; stdcall;external 'OUR_MIFARE.dll';
const//以下控制字的含义请查看本公司网站提供的动态库说明BLOCK0_EN = $01;  //读块0BLOCK1_EN = $02;  //读块1BLOCK2_EN = $04;   //读块2NEEDSERIAL = $08;  //是否需要只对指定系列号的卡操作EXTERNKEY = $10;   //是否使用外部密码NEEDHALT = $20;   //是否休眠本卡implementationend.

轻松读卡

procedure TForm1.Button9Click(Sender: TObject);
vari:integer;status:byte;//存放返回值myareano:byte;//区号authmode:byte;//密码类型,用A密码或B密码myctrlword:byte;//控制字mypicckey:array[0..5] of byte;//密码mypiccserial:array[0..3] of byte;//卡序列号mypiccdata:array[0..47] of byte;//卡数据缓冲str:string;
begin//控制字指定,控制字的含义请查看本公司网站提供的动态库说明myctrlword := BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;//指定区号myareano := 8;//指定为第8区//批定密码模式authmode := 1;//大于0表示用A密码认证,推荐用A密码认证//指定密码mypicckey[0] := $ff;mypicckey[1] := $ff;mypicckey[2] := $ff;mypicckey[3] := $ff;mypicckey[4] := $ff;mypicckey[5] := $ff;status := piccreadex(myctrlword,@mypiccserial,myareano,authmode,@mypicckey,@mypiccdata);case status of0:beginstr:='';for i:=0 to 47 dobeginstr:=str+IntToHex(mypiccdata[i],2);end;memo1.Text :=str;ShowMessage('读卡操作成功,卡内信息已显示在右栏。');end;8: ShowMessage('请将卡放在感应区');12:ShowMessage('卡密码认证失败!');elsebeginShowMessage(IntToStr(status));end;end;//返回解释{#define ERR_REQUEST 8//寻卡错误#define ERR_READSERIAL 9//读序列吗错误#define ERR_SELECTCARD 10//选卡错误#define ERR_LOADKEY 11//装载密码错误#define ERR_AUTHKEY 12//密码认证错误#define ERR_READ 13//读卡错误#define ERR_WRITE 14//写卡错误#define ERR_NONEDLL 21//没有动态库#define ERR_DRIVERORDLL 22//动态库或驱动程序异常#define ERR_DRIVERNULL 23//驱动程序错误或尚未安装#define ERR_TIMEOUT 24//操作超时,一般是动态库没有反映#define ERR_TXSIZE 25//发送字数不够#define ERR_TXCRC 26//发送的CRC错#define ERR_RXSIZE 27//接收的字数不够#define ERR_RXCRC 28//接收的CRC错}
end;

轻松写卡

procedure TForm1.Button8Click(Sender: TObject);
vari:integer;status:byte;//存放返回值myareano:byte;//区号authmode:byte;//密码类型,用A密码或B密码myctrlword:byte;//控制字mypicckey:array[0..5] of byte;//密码mypiccserial:array[0..3] of byte;//卡序列号mypiccdata:array[0..47] of byte;//卡数据缓冲strls:string;
begin//控制字指定,控制字的含义请查看本公司网站提供的动态库说明myctrlword := BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY;//指定区号myareano := 8;//指定为第8区//批定密码模式authmode := 1;//大于0表示用A密码认证,推荐用A密码认证//指定密码mypicckey[0] := $ff;mypicckey[1] := $ff;mypicckey[2] := $ff;mypicckey[3] := $ff;mypicckey[4] := $ff;mypicckey[5] := $ff;strls := StringReplace(memo1.Lines.Text, #13#10, '', [rfReplaceAll])  + '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';for i := 0 to 47 dobeginmypiccdata[i] := strtoint('$'+midstr(strls,i*2+1,2))end;status := piccwriteex(myctrlword,@mypiccserial,myareano,authmode,@mypicckey,@mypiccdata);case status of0:beginpcdbeep(38);ShowMessage('将右栏16进制数据写入卡内成功!');end;8: ShowMessage('请将卡放在感应区');12:ShowMessage('卡密码认证失败!');elsebeginShowMessage('操作失败,错误代码:'+IntToStr(status));end;end;}
end;

修改卡片密钥

procedure TForm1.Button7Click(Sender: TObject);
varstatus:byte;//存放返回值myareano:byte;//区号authmode:byte;//密码类型,用A密码或B密码myctrlword:byte;//控制字mypiccoldkey:array[0..5] of byte;//新密码mypiccserial:array[0..5] of byte;//卡序列号mypiccdata:array[0..16] of byte;//旧密码
begin//控制字指定,控制字的含义请查看本公司网站提供的动态库说明myctrlword := EXTERNKEY;myareano := 1;authmode := 1;//指定旧密码mypiccoldkey[0] := $FF;mypiccoldkey[1] := $FF;mypiccoldkey[2] := $FF;mypiccoldkey[3] := $FF;mypiccoldkey[4] := $FF;mypiccoldkey[5] := $FF;//'指定新A密码mypiccdata[0] := $FF;mypiccdata[1] := $FF;mypiccdata[2] := $FF;mypiccdata[3] := $FF;mypiccdata[4] := $FF;mypiccdata[5] := $FF;//访问控制位,请慎重,改错可能导致卡做废************************************************************************************mypiccdata[6] := $FF;mypiccdata[7] := $07;mypiccdata[8] := $80;mypiccdata[9] := $69;//'指定新B密码mypiccdata[10] := $FF;mypiccdata[11] := $FF;mypiccdata[12] := $FF;mypiccdata[13] := $FF;mypiccdata[14] := $FF;mypiccdata[15] := $FF;mypiccdata[16] := 3; //为1表示更改访问控制位,为2表示更改B密码,为3表示同时更改访问控制位及B密码,A密码在任何情况下都更改!status := piccchangesinglekeyex(myctrlword,@mypiccserial,myareano,authmode,@mypiccoldkey,@mypiccdata);If  status = 0 thenbeginpcdbeep(100);ShowMessage('卡片密钥修改成功!');endelse if status = 8 thenbeginShowMessage('请将卡放在感应区');endelsebeginShowMessage('错误代码:' + IntToStr(status));end;
end;

 

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

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

相关文章

uni-app开发小程序,利用scroll-view实现自动滚动至对应数据

uniapp scroll-view 官网 vue文件内容&#xff1a;dom: <scroll-view scroll-y :scroll-into-view"seqToView"><view class"pop-scroll"><viewv-for"(item,index) in seqList":id"seq- item":key"index"cl…

性能测试你还不会做?看看这篇文章你就懂了!

性能测试的概述 性能&#xff1a;百度百科定义&#xff1a;器物的性质与效用。 生活中&#xff1a;买手机&#xff0c;买电脑&#xff0c;买车 –》 性能好&#xff1a;快&#xff08;时间短&#xff09;、资源 软件的性能&#xff1a;软件在允许的范围内使用过程中的反应的…

微信运营神器:从群发到批量添加,让你的微信营销更轻松

在这个数字化时代&#xff0c;微信已经成为了我们生活中不可或缺的一部分。对于许多企业和个人来说&#xff0c;微信营销也是非常重要的一部分。但是&#xff0c;微信营销并不是一件容易的事情&#xff0c;需要花费大量的时间和精力。为了解决这个问题&#xff0c;今天我们将向…

易涝积水点监测,内涝积水监测仪安装

城市内涝对人们来讲会有很多影响&#xff0c;比如出行需要绕远路或者家中涌入污水导致淤泥堆积&#xff0c;这还有可能让屋内的家具受到破坏&#xff0c;既影响正常生活也造成了经济损失。在街道上还可能对交通、通讯、电力等基础设施造成严重威胁。因此政府如果能实时监测路面…

2024消费行业数字化增长,从“盲人摸象”到“按图索骥”

自2015年“互联网”兴起以来&#xff0c;消费行业就面临着消费者、市场和数字化技术的碎片化挑战。在数字中台的推动下&#xff0c;消费企业开始“一路向C”&#xff0c;将各种企业资源平台化&#xff0c;期望用后端数字化推动前端的增长。而2023年大模型和生成式AI&#xff0c…

如何截留快手行业意向用户:10个合规方法大揭秘

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着互联网的发展&#xff0c;快手已成为一个巨大的流量池&#xff0c;吸引了无数用户。其中&#xff0c;不乏许多行业的意向用户。如何截留这些意向用户&#xff0c;成…

想考教师编制专业不对口怎么办?

很多人在想要步入教师行业时&#xff0c;会遇到一个问题&#xff1a;专业不对口。这种情况可能会让你感到困惑和沮丧&#xff0c;但不要气馁&#xff0c;因为有很多方法可以让你实现自己的梦想。 可以通过提高自己的教育水平和能力来弥补专业不对口的缺陷。你可以通过参加教师资…

荧光量子效率是LED灯的重要性能指标之一

荧光量子效率积分球可以提供准确的荧光量子效率测试结果。荧光量子效率是LED灯的重要性能指标之一&#xff0c;它反映了LED灯在特定波长激发下发出的荧光光的强度。通过荧光量子效率积分球测试&#xff0c;可以获得准确的荧光量子效率值&#xff0c;从而对LED灯的性能进行评估和…

Linux--初识和基本的指令(2)

目录 前言 1. 指令 1.1 cd其它携带指令 1.2 ls其它携带指令 1.3 which指令 1.4 alias指令 1.5 mkdir其他携带指令 1.7 yum -y install 安装指令 1.8 stat指令 1.9解决指令失控状态 1.10 rmdir&&rm指令 1.11 man指令 1.12 cp指令 1.13 mv指令 1.14 nano…

手持式无线通信频谱分析仪 MS2713E

MS2713E 手持式无线通信频谱分析仪 安立手持式无线通信频谱分析仪 MS2713E 旨在处理最恶劣的现场条件&#xff0c;使您能够监控、定位、识别和分析各种蜂窝、2G/3G/4G、陆地移动无线电、Wi-Fi 和广播信号。多功能 Spectrum Master 在定位和识别宽频率范围内的信号时&#xff0…

内测分发平台的合作生态和生态效应如何

大家好&#xff0c;我是咕噜-凯撒&#xff0c;随着移动互联网和智能设备的快速发展&#xff0c;越来越多的开发者和企业开始关注产品的质量和体验。而内测分发平台则成为了一种重要的工具&#xff0c;能够帮助他们更好地测试、优化和推广产品。在此过程中&#xff0c;内测分发平…