当前位置: 首页 > news >正文

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ft=t&id=615391857885 

一、读取旧Ntag卡的UID和数据

    Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click'轻松读卡'技术支持:'网站:Dim i, j As IntegerDim cardidhex, authkey, Str As StringDim status, myctrlword, comedc As Byte '存放返回值Dim mypiccserial(7) As Byte '卡序列号Dim mypicckey(0 To 3) As Byte '认证密码Dim mypiccdata(0 To 3) As Byte '读卡的数据缓冲,Ultralight卡及NTAG21x卡的数组长度必须为16个字节,写卡的为4个字节Dim piccdata(0 To 8191) As ByteDim myblockaddr As Byte '起始块地址Dim myblocksize As Byte '总块数If CheckBox3.Checked ThenIf Len(Trim(TextBox7.Text)) < 8 Theni = MsgBox("卡认证密码位数不足!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")If i <> vbOK ThenTextBox7.Select()Exit SubEnd IfElseauthkey = Trim(TextBox7.Text)For i = 0 To 3mypicckey(i) = CByte("&H" & Mid(authkey, i * 2 + 1, 2))NextEnd Ifmyctrlword = &H10  '需要认证卡密码后再继续Elsemyctrlword = 0End Ifmyblockaddr = CByte(rwbeginp.Value)myblocksize = CByte(rwps.Value)j = 0For i = myblockaddr To myblockaddr + myblocksize - 1status = piccreadex_ntag(myctrlword, mypiccserial(0), mypicckey(0), i, 1, mypiccdata(0))If status = 0 Thenpiccdata(j * 4 + 0) = mypiccdata(0)piccdata(j * 4 + 1) = mypiccdata(1)piccdata(j * 4 + 2) = mypiccdata(2)piccdata(j * 4 + 3) = mypiccdata(3)j = j + 1ElseExit ForEnd IfNextSelect Case statusCase 0pcdbeep(50)cardidhex = ""For i = 0 To 6cardidhex = cardidhex + Strings.Right("00" + Hex(mypiccserial(i)), 2)NextTextBox8.Text = cardidhexcardidhex = ""For i = 0 To myblocksize * 4 - 1cardidhex = cardidhex + Strings.Right("00" + Hex(piccdata(i)), 2)NextRichTextBox1.Text = cardidhexlcddispfull("读卡成功!                        ")MsgBox("读卡成功!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "提示")Case 8lcddispfull("请将卡放在感应区!                        ")MsgBox("请将卡放在感应区!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case 12lcddispfull("读块" + Convert.ToString(i) + "失败,密码错误!                       ")MsgBox("读块" + Convert.ToString(i) + "失败,密码错误!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case 13lcddispfull("读块" + Convert.ToString(i) + "失败,可能需要验证密码!                       ")MsgBox("读块" + Convert.ToString(i) + "失败,可能需要验证密码!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case 23MsgBox("请连上USB读写器!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case Elselcddispfull("读块" + Convert.ToString(i) + "时操作异常,返回代码:" + Convert.ToString(status) + "                        ")MsgBox("读块" + Convert.ToString(i) + "时操作异常,返回代码:" + Convert.ToString(status), MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")End SelectEnd Sub

二、将读取的UID和数据写入新标签

    Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click'技术支持:'网站:Dim i, j As IntegerDim cardidhex, authkey, Str, writstr As StringDim status, myctrlword, comedc As Byte '存放返回值Dim mypiccserial(7) As Byte '卡序列号Dim mypicckey(0 To 3) As Byte '认证密码Dim mypiccdata(0 To 3) As Byte '写卡的为4个字节Dim myblockaddr As Byte '起始块地址Dim myblocksize As Byte '总块数Dim piccdata(0 To 8100) As ByteDim rwlen As IntegerIf rwps.Value < 1 ThenMsgBox("写卡页数必须大于0!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Exit SubEnd Ifmyblockaddr = CByte(rwbeginp.Value)myblocksize = CByte(rwps.Value)If CheckBox3.Checked ThenIf Len(Trim(TextBox7.Text)) < 8 Theni = MsgBox("卡认证密码位数不足!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")If i <> vbOK ThenTextBox7.Select()Exit SubEnd IfElseauthkey = Trim(TextBox7.Text)For i = 0 To 3mypicckey(i) = CByte("&H" & Mid(authkey, i * 2 + 1, 2))NextEnd Ifmyctrlword = &H10  '需要认证卡密码后再继续Elsemyctrlword = 0End Ifrwlen = myblocksize * 4If Not checkhexstr(RichTextBox1.Text.Trim(), rwlen, piccdata) ThenMessageBox.Show("写卡信息不足,建议先读取对应块内数据后再改写!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)ReturnEnd Ifj = 0For i = myblockaddr To myblockaddr + myblocksize - 1mypiccdata(0) = piccdata(j * 4 + 0)mypiccdata(1) = piccdata(j * 4 + 1)mypiccdata(2) = piccdata(j * 4 + 2)mypiccdata(3) = piccdata(j * 4 + 3)If i = 2 Thenmypiccdata(2) = 0mypiccdata(3) = 0status = picclock_ntag(0, mypiccdata(0))   '2块的后两个字节是静态锁Elsestatus = piccwriteex_ntag(myctrlword, mypiccserial(0), mypicckey(0), i, 1, mypiccdata(0))End IfIf status = 0 Thenj = j + 1ElseExit ForEnd IfNextSelect Case statusCase 0pcdbeep(50)cardidhex = ""For i = 0 To 6cardidhex = cardidhex + Strings.Right("00" + Hex(mypiccserial(i)), 2)NextTextBox8.Text = cardidhexlcddispfull("写卡成功!                        ")MsgBox("写卡成功!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "提示")Case 8lcddispfull("请将卡放在感应区!                        ")MsgBox("请将卡放在感应区!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case 12lcddispfull("写块" + Convert.ToString(i) + "时失败,卡密码错误!                        ")MsgBox("写块" + Convert.ToString(i) + "时失败,卡密码错误!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case 14lcddispfull("写块" + Convert.ToString(i) + "时失败,可能需要验证密码或页已经锁定!                        ")MsgBox("写块" + Convert.ToString(i) + "时失败,可能需要验证密码或页已经锁定!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case 23MsgBox("请连上USB读写器!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")Case Elselcddispfull("写块" + Convert.ToString(i) + "时操作异常,代码:" + Convert.ToString(status) + "                        ")MsgBox("写块" + Convert.ToString(i) + "时操作异常,返回代码:" + Convert.ToString(status), MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "提示")End SelectEnd Sub

 

http://www.lqws.cn/news/196291.html

相关文章:

  • iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform
  • Vue3学习(4)- computed的使用
  • 基于功能基团的3D分子生成扩散模型 - D3FG 评测
  • wpf ListBox 去除item 单击样式
  • Lodash原型污染漏洞原理详解
  • 模拟法解题的思路与算法分享
  • Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
  • Docker、Wsl 打包迁移环境
  • JAVA-springboot log日志
  • Android第十五次面试总结(第三方组件和adb命令)
  • 通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
  • Java编程之原型模式
  • python并发编程
  • 【C++ 真题】P1747 好奇怪的游戏
  • 【数据结构初阶】单链表
  • 计算机操作系统(十五)死锁的概念与死锁的处理方法
  • 使用VHD虚拟磁盘安装双系统,避免磁盘分区
  • C语言:数据的存储
  • SQL Server全局搜索:在整个数据库中查找特定值的高效方法
  • 个人电脑部署本地大模型+UI
  • 从混乱到秩序:探索管理系统如何彻底改变工作流程
  • C++指针(二)
  • 怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • Python打卡第46天
  • N8N概述
  • [假面骑士] 龙骑浅谈
  • 第三章支线一 ·原能之核:语法起源
  • 驱控边界在哪里?知名舵机品牌伟创动力CNTE2025展带来答案
  • Vue基础(14)_列表过滤、列表排序