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.Click
        Dim 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 String
        Dim i As Integer

        '控制字指定,控制字的含义请查看本公司网站提供的动态库说明
        myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY

        '指定区号
        myareano = ComboBox1.SelectedIndex        '指定为第区        '批定密码模式
        authmode = ComboBox2.SelectedIndex        '大于0表示用A密码认证,推荐用A密码认证

        '指定密码
        Try
            hexstr = 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)
        Catch
            MessageBox.Show("卡片认证密码错误,请输入12位正确的16进制卡密码!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox2.Select()
            Return
        End Try


        status = piccreadex(myctrlword, mypiccserial(0), myareano, authmode, mypicckey(0), mypiccdata(0))
        If status = 0 Then
            hexstr = ""
            For i = 0 To 47
                hexstr = hexstr + mypiccdata(i).ToString("X2") + " "
            Next
            TextBox3.Text = hexstr

            status = piccread((myareano + 1) * 4 - 1, mypiccdata(0))
            If status = 0 Then
                hexstr = ""
                For i = 0 To 15
                    hexstr = hexstr + mypiccdata(i).ToString("X2") + " "
                Next
                TextBox4.Text = hexstr
            End If
        Else
            TextBox3.Text = ""
            TextBox4.Text = ""
            disperrinf(status)
        End If
    End Sub

轻松写卡

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim i As Integer
        Dim 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密码认证

        '指定密码
        Try
            hexstr = 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)
        Catch
            MessageBox.Show("卡片认证密码错误,请输入12位正确的16进制卡密码!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox2.Select()
            Return
        End Try


        '指定写卡数据
        Try
            hexstr = TextBox3.Text.Trim()
            For i = 0 To 47
                mypiccdata(i) = "&H" & hexstr.Substring(i * 3, 2)
            Next i
        Catch
            MessageBox.Show("写卡数据输入错误,请输入48个正确的16进制写卡数据!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox3.Select()
            Return
        End Try

        status = piccwriteex(myctrlword, mypiccserial(0), myareano, authmode, mypicckey(0), mypiccdata(0))
        If status = 0 Then
            pcdbeep(50)
            MessageBox.Show("写卡成功!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            disperrinf(status)
        End If
    End Sub

 修改卡片密码及控制位

 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim i As Integer
        Dim 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 String

        i = MessageBox.Show("    您确定要修改卡片的密码吗,如确定修改请一定记住新密码,否则卡片将报废!", "示例提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If i <> 6 Then
            Return
        End If

        '控制字指定,控制字的含义请查看本公司网站提供的动态库说明
        myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY

        '指定区号
        myareano = ComboBox1.SelectedIndex        '指定为第区        '批定密码模式
        authmode = ComboBox2.SelectedIndex        '大于0表示用A密码认证,推荐用A密码认证

        '指定密码
        Try
            hexstr = 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)
        Catch
            MessageBox.Show("卡片认证密码错误,请输入12位正确的16进制卡密码!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox2.Select()
            Return
        End Try


        '指定新密码,注意:指定新密码时一定要记住,否则有可能找不回密码,导致该卡报废。
        Try
            hexstr = TextBox4.Text.Trim()
            For i = 0 To 15
                mypiccnewkey(i) = "&H" & hexstr.Substring(i * 3, 2)
            Next i
            mypiccnewkey(16) = 3    '3是表示同时更改A、B、 密码权限访问字,为2表示密码权限访问字不更改,只改A、B密码,为0表示只改A密码
        Catch
            MessageBox.Show("新密码输入错误,请输入6字节A密码+4字节控制位+6字节B密码(16进制)!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox4.Select()
            Return
        End Try

        status = piccchangesinglekey(myctrlword, mypiccserial(0), myareano, authmode, mypiccoldkey(0), mypiccnewkey(0))
        If status = 0 Then
            pcdbeep(50)
            MessageBox.Show("修改卡片密码成功!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            disperrinf(status)
        End If
    End Sub

 读写卡操作异常说明

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

servlet乱码问题

问题&#xff1a;中文乱码 解决&#xff1a;加框的部分

给折腿的罗技G512键盘换键帽

文章目录 1\. 引言2\. 操作2.1. 用打火机烤2.2. 用钳子拔出来2.2.1. 拔出成功2.2.2. 放大细看2.3. 更换键帽 1. 引言 G512的轴采用的是塑料连接&#xff0c;特别容易腿折在里面&#xff0c;换着的时候&#xff0c;得先把这个卡在里面的塑料腿拿出来才行 放大效果图 2. 操作 可…

用js切割文字,超出省略

因为项目需要,当人员超过两个事则进行超出省略,如将一个 “张三,李四,王五”,这样的字串切割成"张三,李四…" 效果: 主要用的是基础的切割法 isOutlier(text) {if (!text || text "") return;const parts text.split(","); // 使用逗号将字…

电力感知边缘计算网关产品设计方案-业务流程设计

1.工业数据通信流程 工业数据是由仪器仪表、PLC、DCS等工业生产加工设备提供的,通过以太网连接工业边缘计算网关实现实时数据采集。按照现有的通信组网方案,在理想通信状态下可以保证有效获取工业数据的真实性和有效性。 边缘计算数据通信框架图: 2.边缘计算数据处理方案 …

Zeet构建多云战略充分发挥云的优势

大型企业通常拥有基础设施和应用团队&#xff0c;有能力围绕自己的业务需求构建所需平台。但对于技术团队精简、预算紧张的小企业来说&#xff0c;定制平台往往不现实而且难以扩展&#xff0c;是负担不起的“奢侈品”。 这一情况催生了平台即服务&#xff08;PaaS&#xff09;…

Azure Machine Learning - 什么是 Azure AI 搜索?

Azure AI 搜索&#xff08;以前称为“Azure 认知搜索”&#xff09;在传统和对话式搜索应用程序中针对用户拥有的内容提供大规模的安全信息检索。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦…

如何进行手动脱壳

脱壳的目的就是找到被隐藏起来的OEP&#xff08;入口点&#xff09; 这里我一共总结了三种方法&#xff0c;都是些自己的理解希望对你们有用 单步跟踪法 一个程序加了壳后&#xff0c;我们需要找到真正的OEP入口点&#xff0c;先运行&#xff0c;找到假的OEP入口点后&#x…

【2023云栖】大模型驱动DataWorks数据开发治理平台智能化升级

随着大模型掀起AI技术革新浪潮&#xff0c;大数据也进入了与AI深度结合的创新时期。2023年云栖大会上&#xff0c;阿里云DataWorks产品负责人田奇铣发布了DataWorks Copilot、DataWorks AI增强分析、DataWorks湖仓融合数据管理等众多新产品能力&#xff0c;让DataWorks这款已经…

文档明明在桌面上却不显示?5个方法轻松解决!

“我之前保存文档的时候明明选择保存在桌面&#xff0c;上次看的时候文件还在&#xff0c;但是今天打开电脑后发现我保存在桌面的文档不见了&#xff0c;这是为什么呢&#xff1f;还有机会找回我的文件吗&#xff1f;” 在日常使用电脑时&#xff0c;有些用户为了方便&#xff…

SAP权限设计简介

介绍 小技巧 -ERP 权限控制 繁中求简 , 闲聊一下 SAP 复杂权限设计的基本思想。 特别是适合大集团业务的 ERP 系统 , 应该提供一个非常完善的权限控制机制 , 甚至允许将权限控制字段细到字段级别&#xff0c;如果权限控制都做不到这点&#xff0c;估计产品销售就够呛&#x…

来聊聊阿里1688 /拼多多API接口接入| 让需求回到产品端

昨儿办公室讨论起了1688。 对&#xff0c;就是阿里搞批发的那个网站。 在上面&#xff0c;你可以买到各种各样价格低廉的产品&#xff0c;比如&#xff0c;办公用具、女孩子的皮筋、小孩子的玩具等等。 在小批量上&#xff0c;它和拼多多定价类似&#xff0c;但二者的赛道却不同…

物流实时数仓:采集通道搭建

系列文章目录 物流实时数仓&#xff1a;环境搭建 文章目录 系列文章目录前言一、环境准备1.前置环境2.hbase安装1.上传并解压2.配置环境变量3.拷贝jar包4.编写配置文件5.分发配置文件 3.Redis安装1.安装需要的编译环境2.上传并解压文件3.编译安装4.后台访问 4.ClickHouse安装5…

抽象类和接口

抽象类和接口 文章目录 抽象类和接口抽象类抽象类概念抽象类语法抽象类特性抽象类的作用 接口接口的概念语法规则接口使用接口特性接口类型是一种引用类型&#xff0c;但是不能直接new接口的对象接口中每一个方法都是public的抽象方法.接口中的方法是不能在接口中实现的&#x…

(亲测有效)VMware Windows虚拟机扩容

场景&#xff1a; VMware安装了一个windows系统&#xff0c;现在windows系统剩余空间不足&#xff0c;需要扩容。 解决步骤&#xff1a; 关闭虚拟机&#xff0c;状态如下&#xff1a; 2、点击编辑虚拟机设置-》扩展 3、输入最大磁盘大小-》点击扩展 4、等待成功后&#xff0c…

Python爬虫实战-批量爬取豆瓣电影排行信息

大家好&#xff0c;我是python222小锋老师。 近日锋哥又卷了一波Python实战课程-批量爬取豆瓣电影排行信息&#xff0c;主要是巩固下Python爬虫基础 视频版教程&#xff1a; Python爬虫实战-批量爬取豆瓣电影排行信息 视频教程_哔哩哔哩_bilibiliPython爬虫实战-批量爬取豆瓣…

光伏拉晶厂RFID智能化生产工序管理

一、项目背景 随着全球能源短缺和气候变暖的挑战日益突显&#xff0c;清洁能源已成为国内能源发展的主要目标之一&#xff0c;作为清洁能源的重要组成部分&#xff0c;光伏行业在过去几十年中取得了巨大的发展&#xff0c;成为我国的战略性新兴产业之一。在智能制造的大环境下…

Git 提交竟然还能这么用?

大家好&#xff0c;我是鱼皮。Git 是主流的代码版本控制系统&#xff0c;是团队协作开发中必不可少的工具。 之前已经给大家分享过 Git / GitHub 的学习指南&#xff0c;感兴趣的同学可以先看视频了解&#xff1a;https://www.bilibili.com/video/BV1KZ4y1e7cG。 这篇文章&am…

企业微信机器人定时发送图文信息,后续无需人工操作

企业微信群机器人是企业微信的内置功能&#xff0c;可以理解为是一个群提醒通知工具&#xff0c;接收数据并自动发送信息到企业微信群中。 数环通实现打通定时器和企业微信机器人的对接&#xff0c;定时执行自动化流程&#xff0c;无需人工干预&#xff0c;实现工作流程自动化&…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。在这个背景下&#xff0c;Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

《微信小程序开发从入门到实战》学习十八

3.3 开发创建投票页面 3.3.5 数据的双向传递 通过上一小节的代码和预览效果可以看到使用时间函数可以将视图层传递到逻辑层。 视图层数据由小程序管理&#xff0c;逻辑层通常保存在data对象&#xff0c;必须由开发者自己管理。 微信开发工具的AppData的面板可以实时查看到页…