VB.net读写S50/F08IC卡,修改卡片密码控制位源码

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

 函数声明

Module Module1'读卡函数声明Public Declare Function piccreadex Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByRef serial As Byte, ByVal area As Byte, ByVal keyA1B0 As Byte, ByRef picckey As Byte, ByRef piccdata0_2 As Byte) As Byte'写卡函数声明Public Declare Function piccwriteex Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByRef serial As Byte, ByVal area As Byte, ByVal keyA1B0 As Byte, ByRef picckey As Byte, ByRef piccdata0_2 As Byte) As Byte'修改单区函数声明Public Declare Function piccchangesinglekey Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByRef serial As Byte, ByVal area As Byte, ByVal keyA1B0 As Byte, ByRef piccoldkey As Byte, ByRef piccnewkey As Byte) As Byte'让设备发出声响函数声明Public Declare Function pcdbeep Lib "OUR_MIFARE.dll" (ByVal xms As Long) As Byte'读取设备编号函数声明Public Declare Function pcdgetdevicenumber Lib "OUR_MIFARE.dll" (ByRef devicenumber As Byte) As Byte'寻卡并返回该卡的序列号Public Declare Function piccrequest Lib "OUR_MIFARE.dll" (ByRef serial As Byte) As Byte'密码认证方式1,用外部密码认证,必须指定外部密码。本函数必须在piccrequest或piccrequestex函数执行之后运行,并且要紧接着调用,中途不能调用其他函数。Public Declare Function piccauthkey1 Lib "OUR_MIFARE.dll" (ByRef serial As Byte, ByVal area As Byte, ByVal keyA1B0 As Byte, ByRef picckey As Byte) As Byte'读出一块的数据,也就是16个字节。必须在执行piccrequest或 Piccrequestex函数,接着执行piccauthkey1或 piccauthkey2函数,然后执行piccread才能成功读出一块的数据。Public Declare Function piccread Lib "OUR_MIFARE.dll" (ByVal block As Byte, ByRef blockdata As Byte) As Byte'写一块的数据,也就是16个字节。必须在执行piccrequest或 Piccrequestex函数,接着执行piccauthkey1或 piccauthkey2函数,然后执行piccread才能成功读出一块的数据。Public Declare Function piccwrite Lib "OUR_MIFARE.dll" (ByVal block As Byte, ByRef blockdata As Byte) As Byte'修改卡A/B密码及控制字Public Declare Function piccchangesinglekeyex Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByRef serial As Byte, ByVal area As Byte, ByVal keyA1B0 As Byte, ByRef piccoldkey As Byte, ByRef piccnewkey As Byte) As Byte'控制字定义,控制字指定,控制字的含义请查看本公司网站提供的动态库说明Public Const BLOCK0_EN = &H1 '操作第0块Public Const BLOCK1_EN = &H2 '操作第1块Public Const BLOCK2_EN = &H4 '操作第2块Public Const NEEDSERIAL = &H8 '仅对指定序列号的卡号操作Public Const EXTERNKEY = &H10 '需要在参数中指定认证密码Public Const NEEDHALT = &H20 '操作后休眠该卡,必须拿开卡再放回感应区才能重新感应到卡
End Module

轻松读卡 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim status As Byte '存放返回值Dim myareano As Byte '区号Dim authmode As Byte '密码类型,用A密码或B密码Dim myctrlword As Byte '控制字Dim mypiccserial(3) As Byte '卡序列号,从0~3四个字节Dim mypicckey(5) As Byte '密码,从0~5六个字节Dim mypiccdata(47) As Byte '卡数据缓冲,从0~47四十八个字节Dim hexstr As StringDim i As Integer'控制字指定,控制字的含义请查看本公司网站提供的动态库说明myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY'指定区号myareano = ComboBox1.SelectedIndex        '指定为第区        '批定密码模式authmode = ComboBox2.SelectedIndex        '大于0表示用A密码认证,推荐用A密码认证'指定密码Tryhexstr = TextBox2.Text.Trim()mypicckey(0) = "&H" & hexstr.Substring(0, 2)mypicckey(1) = "&H" & hexstr.Substring(2, 2)mypicckey(2) = "&H" & hexstr.Substring(4, 2)mypicckey(3) = "&H" & hexstr.Substring(6, 2)mypicckey(4) = "&H" & hexstr.Substring(8, 2)mypicckey(5) = "&H" & hexstr.Substring(10, 2)CatchMessageBox.Show("卡片认证密码错误,请输入12位正确的16进制卡密码!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)TextBox2.Select()ReturnEnd Trystatus = piccreadex(myctrlword, mypiccserial(0), myareano, authmode, mypicckey(0), mypiccdata(0))If status = 0 Thenhexstr = ""For i = 0 To 47hexstr = hexstr + mypiccdata(i).ToString("X2") + " "NextTextBox3.Text = hexstrstatus = piccread((myareano + 1) * 4 - 1, mypiccdata(0))If status = 0 Thenhexstr = ""For i = 0 To 15hexstr = hexstr + mypiccdata(i).ToString("X2") + " "NextTextBox4.Text = hexstrEnd IfElseTextBox3.Text = ""TextBox4.Text = ""disperrinf(status)End IfEnd Sub

轻松写卡

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickDim i As IntegerDim status As Byte '存放返回值Dim myareano As Byte '区号Dim authmode As Byte '密码类型,用A密码或B密码Dim myctrlword As Byte '控制字Dim mypicckey(5) As Byte '密码Dim mypiccserial(3) As Byte '卡序列号Dim mypiccdata(47) As Byte '卡数据缓冲Dim hexstr As String'控制字指定,控制字的含义请查看本公司网站提供的动态库说明myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY'指定区号myareano = ComboBox1.SelectedIndex        '指定为第区        '批定密码模式authmode = ComboBox2.SelectedIndex        '大于0表示用A密码认证,推荐用A密码认证'指定密码Tryhexstr = TextBox2.Text.Trim()mypicckey(0) = "&H" & hexstr.Substring(0, 2)mypicckey(1) = "&H" & hexstr.Substring(2, 2)mypicckey(2) = "&H" & hexstr.Substring(4, 2)mypicckey(3) = "&H" & hexstr.Substring(6, 2)mypicckey(4) = "&H" & hexstr.Substring(8, 2)mypicckey(5) = "&H" & hexstr.Substring(10, 2)CatchMessageBox.Show("卡片认证密码错误,请输入12位正确的16进制卡密码!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)TextBox2.Select()ReturnEnd Try'指定写卡数据Tryhexstr = TextBox3.Text.Trim()For i = 0 To 47mypiccdata(i) = "&H" & hexstr.Substring(i * 3, 2)Next iCatchMessageBox.Show("写卡数据输入错误,请输入48个正确的16进制写卡数据!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)TextBox3.Select()ReturnEnd Trystatus = piccwriteex(myctrlword, mypiccserial(0), myareano, authmode, mypicckey(0), mypiccdata(0))If status = 0 Thenpcdbeep(50)MessageBox.Show("写卡成功!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Information)Elsedisperrinf(status)End IfEnd Sub

 修改卡片密码及控制位

 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickDim i As IntegerDim status As Byte '存放返回值Dim myareano As Byte '区号Dim authmode As Byte '密码类型,用A密码或B密码Dim myctrlword As Byte '控制字Dim mypiccserial(3) As Byte '卡序列号Dim mypiccoldkey(5) As Byte '旧密码Dim mypiccnewkey(16) As Byte '新密码Dim hexstr As Stringi = MessageBox.Show("    您确定要修改卡片的密码吗,如确定修改请一定记住新密码,否则卡片将报废!", "示例提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)If i <> 6 ThenReturnEnd If'控制字指定,控制字的含义请查看本公司网站提供的动态库说明myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY'指定区号myareano = ComboBox1.SelectedIndex        '指定为第区        '批定密码模式authmode = ComboBox2.SelectedIndex        '大于0表示用A密码认证,推荐用A密码认证'指定密码Tryhexstr = TextBox2.Text.Trim()mypiccoldkey(0) = "&H" & hexstr.Substring(0, 2)mypiccoldkey(1) = "&H" & hexstr.Substring(2, 2)mypiccoldkey(2) = "&H" & hexstr.Substring(4, 2)mypiccoldkey(3) = "&H" & hexstr.Substring(6, 2)mypiccoldkey(4) = "&H" & hexstr.Substring(8, 2)mypiccoldkey(5) = "&H" & hexstr.Substring(10, 2)CatchMessageBox.Show("卡片认证密码错误,请输入12位正确的16进制卡密码!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)TextBox2.Select()ReturnEnd Try'指定新密码,注意:指定新密码时一定要记住,否则有可能找不回密码,导致该卡报废。Tryhexstr = TextBox4.Text.Trim()For i = 0 To 15mypiccnewkey(i) = "&H" & hexstr.Substring(i * 3, 2)Next imypiccnewkey(16) = 3    '3是表示同时更改A、B、 密码权限访问字,为2表示密码权限访问字不更改,只改A、B密码,为0表示只改A密码CatchMessageBox.Show("新密码输入错误,请输入6字节A密码+4字节控制位+6字节B密码(16进制)!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)TextBox4.Select()ReturnEnd Trystatus = piccchangesinglekey(myctrlword, mypiccserial(0), myareano, authmode, mypiccoldkey(0), mypiccnewkey(0))If status = 0 Thenpcdbeep(50)MessageBox.Show("修改卡片密码成功!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Information)Elsedisperrinf(status)End IfEnd Sub

 读写卡操作异常说明

 Private Sub disperrinf(ByVal errcode As Byte)Select Case errcodeCase 1MessageBox.Show("0~2块数据都没读出来,可能刷卡太块。但卡序列号已被读出!", "示例程序", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 2MessageBox.Show("第0块已被读出,但1~2块读取失败。卡序列号已被读出来!", "示例程序", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 3MessageBox.Show("第0、1块已被读出,但2块读取失败。卡序列号已被读出来!", "示例程序", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 8MessageBox.Show("未寻到卡,请将卡放在感应区!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 9MessageBox.Show("读序列码错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 10MessageBox.Show("选卡错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 11MessageBox.Show("装载密码错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 12MessageBox.Show("卡密码认证错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 13MessageBox.Show("读卡错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 14MessageBox.Show("写卡错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 18MessageBox.Show("写UID错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 21MessageBox.Show("没有动态库!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 22MessageBox.Show("动态库或驱动程序异常!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 23MessageBox.Show("驱动程序错误或尚未安装!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 24MessageBox.Show("操作超时,一般是动态库没有反映!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 25MessageBox.Show("发送字数不够!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 26MessageBox.Show("发送的CRC错!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 27MessageBox.Show("接收的字数不够!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case 28MessageBox.Show("接收的CRC错!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)Case ElseMessageBox.Show("返回码(对应的说明请看例子中的注释):" + errcode.ToString(), "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)End SelectEnd Sub

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

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

相关文章

基于单片机K型热电偶温度采集报警系统

**单片机设计介绍&#xff0c; 基于单片机K型热电偶温度采集报警系统 文章目录 一 概要简介系统特点系统组成工作原理应用领域 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于单片机K型热电偶温度采集报警系统介绍 简介 该系统是基于单片…

【论文阅读笔记】Deep learning for time series classification: a review

【论文阅读笔记】Deep learning for time series classification: a review 摘要 在这篇文章中&#xff0c;作者通过对TSC的最新DNN架构进行实证研究&#xff0c;探讨了深度学习算法在TSC中的当前最新性能。文章提供了对DNNs在TSC的统一分类体系下在各种时间序列领域中的最成功…

8 Redis与Lua

LUA脚本语言是C开发的&#xff0c;类似存储过程,是为了实现完整的原子性操作&#xff0c;可以用来补充redis弱事务的缺点. 1、LUA脚本的好处 2、Lua脚本限流实战 支持分布式 import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis…

Excel 文件比较工具 xlCompare 11.01 Crack

比较两个 Excel 文件之间的差异 xlCompare. xlCompare.com 是性能最佳的 Excel diff 工具&#xff0c;用于比较两个 Excel 文件或工作表并在线突出显示差异。xlCompare 包括免费的在线 Excel 和 CSV 文件比较服务以及用于比较和合并 Excel 文件的强大桌面工具。如果您想在线了…

软件测试: 测试用例

一. 软件测试四要素 测试环境,操作步骤,测试数据,预期结果 二. 基于需求进行测试用例的设计 基于需求设计测试用例是测试设计和开发测试用例的基础,第一步就要分析测试需求,验证需求是否正确,完整,无二义性,并且逻辑自洽.在需求正确的基础上细化测试需求,从测试需求提炼出一…

React整理总结(五、Redux)

1.Redux核心概念 纯函数 确定的输入&#xff0c;一定会产生确定的输出&#xff1b;函数在执行过程中&#xff0c;不能产生副作用 store 存储数据 action 更改数据 reducer 连接store和action的纯函数 将传入的state和action结合&#xff0c;生成一个新的state dispatc…

猫12分类:使用yolov5训练检测模型

前言&#xff1a; 在使用yolov5之前&#xff0c;尝试过到百度飞桨平台&#xff08;小白不建议&#xff09;、AutoDL平台&#xff08;这个比较友好&#xff0c;经济实惠&#xff09;训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置…

hdfsClient_java对hdfs进行上传、下载、删除、移动、打印文件信息尚硅谷大海哥

Java可以通过Hadoop提供的HDFS Java API来控制HDFS。通过HDFS Java API&#xff0c;可以实现对HDFS的文件操作&#xff0c;包括文件的创建、读取、写入、删除等操作。 具体来说&#xff0c;Java可以通过HDFS Java API来创建一个HDFS文件系统对象&#xff0c;然后使用该对象来进…

集合的自反关系和对称关系

集合的自反关系和对称关系 一&#xff1a;集合的自反关系1&#xff1a;原理&#xff1a;2&#xff1a;代码实现 二&#xff1a;对称关系1&#xff1a;原理&#xff1a;2&#xff1a;代码实现 三&#xff1a;总结 一&#xff1a;集合的自反关系 1&#xff1a;原理&#xff1a; …

【python】直方图正则化详解和示例

直方图正则化&#xff08;Histogram Normalization&#xff09;是一种图像增强技术&#xff0c;目的是改变图像的直方图以改善图像的质量。具体来说&#xff0c;它通过将图像的直方图调整为指定的形状&#xff0c;以增强图像的对比度和亮度。 直方图正则化的基本步骤如下&…

【Android Jetpack】Hilt的理解与浅析

文章目录 依赖注入DaggerHiltKoin添加依赖项Hilt常用注解的含义HiltAndroidAppAndroidEntryPointInjectModuleInstallInProvidesEntryPoint Hilt组件生命周期和作用域如何使用 Hilt 进行依赖注入 本文只是进行了简单入门&#xff0c;博客仅当做笔记用。 依赖注入 依赖注入是一…

某60区块链安全之不安全的随机数实战二学习记录

区块链安全 文章目录 区块链安全不安全的随机数实战二实验目的实验环境实验工具实验原理实验内容EXP利用 不安全的随机数实战二 实验目的 学会使用python3的web3模块 学会以太坊不安全的随机数漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理 由…

吴恩达《机器学习》9-1:代价函数

一、引入新标记方法 首先&#xff0c;引入一些新的标记方法&#xff0c;以便更好地讨论神经网络的代价函数。考虑神经网络的训练样本&#xff0c;其中每个样本包含输入 x 和输出信号 y。我们用 L 表示神经网络的层数&#xff0c;表示每层的神经元个数&#xff08;表示输出层神…

基于单片机GPS轨迹定位和里程统计系统

**单片机设计介绍&#xff0c; 基于单片机GPS轨迹定位和里程统计系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 一个基于单片机、GPS和里程计的轨迹定位和里程统计系统可以被设计成能够在移动的交通工具中精确定位车辆的位置…

Spring Boot - 自定义注解来记录访问路径以及访问信息,并将记录存储到MySQL

1、准备阶段 application.properties&#xff1b;yml 可通过yaml<互转>properties spring.datasource.urljdbc:mysql://localhost:3306/study_annotate spring.datasource.usernameroot spring.datasource.password123321 spring.datasource.driver-class-namecom.mysq…

【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…

苹果CMS首涂第30套可装修DIY主题模板免授权版

这是一款可以装修的主题&#xff0c;类似淘宝店装修一样&#xff0c;可以针对首页、栏目页、详情页、播放页进行自定义装修&#xff0c;内置10个模块自由选择、添加、修改、删除、排序操作&#xff0c;后续升级还会增加更多实用和个性模块供选择&#xff0c;主题内包含的导航、…

Actor对象的引用 怎么设置他的材质?或设置是否启用重力?

这个蓝图我是想当重叠触发,将另一个Target Actor(一个球体)设置他的z增加50,但是为什么在触发的时候会抽搐?而且我想要设置他的材质等等这些属性都不行

什么是希尔伯特空间?

照片由 丹克里斯蒂安佩杜雷什 on Unsplash 一、说明 在本文中&#xff0c;我们将探讨希尔伯特空间这个非常重要的主题。希尔伯特空间由于其特性而经常出现在物理和工程中。为了理解希尔伯特空间&#xff0c;我们从度量空间的定义开始。 二、基础概念 集合是定义明确的元素的集合…

Flutter 使用 device_info_plus 遇到的问题

问题&#xff1a;引用device_info_plus 插件出现了异常&#xff0c;不知道为啥打开项目的时候就不能用了。 解决&#xff1a;改了版本解决 Target of URI doesnt exist: package:device_info_plus/device_info_plus.dart. (Documentation) Try creating the file reference…