WPF—激活Mifare S50/S70卡(射频识别)

项目分析:所谓的激活“卡”就是往卡内的指定扇区写入指定的数据,该指定的数据能够与射频模块对接,达到射频识别的效果。

硬件配置:一张未激活的S50卡  一个USB接口的读卡器(无需安装驱动)

开发环境:win10专业版 + VS2013

提供的需求文档:Winform的Demo(有源码)、USB Reader的开发文档 、第三方动态库(读卡写卡)

第一步:写了一个简单的WPF界面,因为必须要输入两遍学号,所以还写了一个跳转界面。效果如下:

           

以上左图为界面一,单击确认键跳转到右图的界面二,同时将界面二中第二次输入的学号同界面一输入的学号进行比较,如若不同,提示重输。

这里涉及到两个界面的如何传值问题,方法如下:

首先在界面二的后台代码中定义一个可读可写的共有属性,

public string tranTxt { get; set; }  //定义一个可读可写的共有属性

接着在界面一的后台中将输入框输入的文本传给这个具有共有属性的字符串,以下这段代码写在“确认”按钮的处理事件中,

 string q = txtBox1.Text;
 InputAgain inputagain = new InputAgain();
 inputagain.tranTxt = q;  //inputagain为窗口二的一个实例化对象
 this.Close();
 inputagain.ShowDialog();

最后在界面二的后台的“写入”按钮的处理事件中 比较两个值的大小即可,

 else if (tranTxt != txtBox2.Text)
 {
       MessageBox.Show("两次输入的学号不同!");
 }

至此,界面的基本逻辑基本完成。(还有一个判断输入框的文本内容是否为纯数字的逻辑,在此不再赘述。)

第二步:实现激活S50卡的逻辑

首先导入第三方的动态库,鼠标右键解决方案,选择添加“引用”,选择文件夹中的两个动态库,一直提示错误。如下:

     

刚开始以为第三方的动态库是由32位的编译器编译的,而我的电脑是64位的,所以行不通,后来将目标平台改成32位的还是行不通。

最后解决方法是鼠标右键解决方案,选择添加“现有项”,就可以正确导入了。

接着添加一个类,用来导入动态库中的方法。

Reader类的代码如下:

class Reader
    {

        [DllImport("function.dll")]
        public static extern int MF_Read(byte mode, byte blk_add, byte num_blk, [In]byte[] snr, [In]byte[] buffer);//在指定位置读取指定长度

        [DllImport("function.dll")]
        public static extern int MF_Write(byte mode, byte blk_add, byte num_blk, [In]byte[] snr, [In]byte[] buffer);//在指定位置写入数据
    }

注意,每个方法导入前都要导入一遍动态库,否则会报错。即[DllImport("function.dll")]需导入多次。。。。。。。

接着在界面二的后台代码中就可以调用动态库中的方法了,由于是Reader.cs 是静态类,所以可以直接调用。

读卡如下:

            ///<summary>
            ///读取卡内信息
            ///</summary>int nRet3 = Reader.MF_Read(mode1, blk_add, num_blk, snr1, buffer1);

写卡如下:

            ///<summary>
            ///写卡
            ///</summary>
            int nRet4 = Reader.MF_Write(mode2, blk_add2, num_blk2, snr2, buffer2);

由于写卡方法  int nRet4 = Reader.MF_Write(mode2, blk_add2, num_blk2, snr2, buffer2);  中 有个参数buffer2要求的数据类型是字节数组,而输入框输入的内容是文本字符串,需要转换成字节数组,

我的方法是,先将文本字符串转换成十进制字符串,再转换成十六进制字符串,最后转换成字节数组。

最终效果图:

      

至此,已经激活了这张S50的卡。(版权问题,不提供主要代码,不提供源码,如有技术问题,可以私信交流)

时间: 2024-11-05 16:00:32

WPF—激活Mifare S50/S70卡(射频识别)的相关文章

S70卡

产品名称:Mifare 4K(S70)卡 芯片类型:Philips Mifare 1 S70(MOA2) 存储容量:32Kbit,32个分区,每分区两组密码 工作频率:13.56 MHz 通讯速率:106KBoud 读写距离:2.5-10cm 读写时间:1-2ms 工作温度:-20℃-55℃ 擦写寿命:>100,000次 数据保存:>10年 外形尺寸:ISO标准卡 85.6x54x0.80 / 异形卡 封装材料:PVC.PET.PETG.0.13mm铜线 封装工艺:PVC层压 执行标准:ISO

射频识别技术漫谈(14)——Mifare S50与S70的存取控制

存取控制指符合什么条件才能对卡片进行操作. S50和S70的块分为数据块和控制块,对数据块的操作有"读"."写"."加值"."减值(含传输和存储)"四种,对控制块的操作只有"读"和"写"两种. S50和S70的每个扇区有两组密码KeyA和KeyB,所谓的"条件"就是针对这两组密码而言,包括"验证密码A可以操作(KeyA)"."验证密码B可

射频识别技术漫谈(13)——Mifare S50与Mifare S70

Mifare S50和Mifare S70又常被称为Mifare Standard.Mifare Classic.MF1,是遵守ISO14443A标准的卡片中应用最为广泛.影响力最大的的一员.而Mifare S70的容量是S50的4倍,S50的容量是1K字节,S70的容量为4K字节.读写器对卡片的操作时序和操作命令,二者完全一致. Mifare S50和Mifare S70的每张卡片都有一个4字节的全球唯一序列号,卡上数据保存期为10年,可改写10万次,读无限次.一般的应用中,不用考虑卡片是否会

NXP Mifare S50标准IC卡- 访问位(Access Bits) 分析

Mifare S50 标准IC卡有1K 字节的EEPROM,主要用来存储数据和控制信息.1K 字节的EEPROM分成16 个区,每区又分成4 段,每1段中有16 个字节.每个区的最后一个段叫“尾部"(trailer),它包括两个密钥和这个区中每一个段的访问条件(可编程). 存储器组织(Memory Organization) 存储器访问(Memory Access) 在任何存储器操作前,卡需要先被选择,并经过认证(KEYA或KEYB).对于可寻址的数据块的可能的存储器操作取决于使用的key和存储

MIFARE系列3——卡能源和数据传递

在MIFARE卡中,能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上,不再需要额外的组件.线圈嵌入塑料中,形成了一个无源的非接触卡. 读卡器向IC发一组固定频率的电磁波,卡内有一个IC串联谐振电路,其频率与读写器的频率相同,这样便产生电磁共振,从而使电容内有了电荷,在电容的另一端接有一个单向通的电子泵,将电容内的电荷送到另一个电容内储存,当储存积累的电荷达到2V时,此电源可作电源为其他电路提供工作电压,将卡内数据发射出去或接收读写器的数据. 在卡片上的微晶片外面一般封装了保护层.保护

射频识别技术漫谈(11)——Mifare系列卡的共性

Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfire等,由于Mifare的巨大影响力,业内有时把其它公司生产的遵守ISO14443A标准的射频卡也称为"Mifare",尤其是Mifare S50卡片,几乎就是ISO14443A标准的代言人. 至于"Mifare"这个名字的由来,据说1998年Philips收购了瑞士的

射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计

电子门锁是现代星级酒店管理电子化.智能化的重要电子设备.相较于传统的机械锁,基于RFID技术的电子门锁使用方便,易于管理,安全性高,可实现对开锁用户的分优先级自动管理,对房间入住信息实现自动统计与报表输出. 1  系统整体分析 MF1 S50和S70卡是遵守ISO14443A国际标准的非接触式逻辑加密卡,S50卡内共有1024字节非易失性存储空间,分为16个扇区,每个扇区包含4个数据块,每个扇区都有一组独立的密码A和B,扇区内的每个数据块都可单独设置存取条件.S70存储结构与S50类似,存储空间

Mifare系列6-射频卡与读写器的通信(转)

文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38085415 1. 复位应答(Answer to request) 读写器呼叫磁场内的卡片,卡片对呼叫做出应答.对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入 休眠状态的卡片,卡唤醒(WAKE-UP,0x52).其中卡请求(REQA)只能呼叫处于休闲(Idle)状态的卡片,卡唤醒(WAKE-UP)可以呼 叫所有卡片,包括处于休

MIFARE系列6——射频卡与读写器的通讯

1. 复位应答(Answer to request) 读写器呼叫磁场内的卡片,卡片对呼叫做出应答.对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠状态的卡片,卡唤醒(WAKE-UP,0x52).其中卡请求(REQA)只能呼叫处于休闲(Idle)状态的卡片,卡唤醒(WAKE-UP)可以呼叫所有卡片,包括处于休眠(Halt)和休闲状态的卡片. 收到卡呼叫命令后,卡片将对命令做出应答(AnswerTo Request,ATQA), 读写器以特定的协