本示例发卡器介绍:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com)
DLL命令定义表
.版本 2
.DLL命令 蜂鸣器嘀一声, 字节型, "OUR_MIFARE.dll", "pcdbeep"
.参数 xms, 整数型
.DLL命令 读取设备编号, 字节型, "OUR_MIFARE.dll", "pcdgetdevicenumber"
.参数 设备编号, 字节型, 传址 数组
.DLL命令 提示, 整数型, "user32", "MessageBoxA"
.参数 句柄, 整数型
.参数 提示内容, 文本型
.参数 提示内容, 文本型
.参数 类型, 整数型
.DLL命令 寻感应区内单张卡, 字节型, "OUR_MIFARE.dll", "iso15693inventory"
.参数 操作标志, 字节型
.参数 应用标识, 字节型
.参数 掩码长度, 字节型
.参数 卡号掩码, 字节型, 传址 数组
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 轻松读取15693卡数据, 字节型, "OUR_MIFARE.dll", "iso15693readex"
.参数 控制位, 字节型
.参数 应用标识, 字节型
.参数 起始块地址, 字节型
.参数 读写块数, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.参数 读卡数据缓冲, 字节型, 传址 数组
.DLL命令 轻松写数据到15693卡块内, 字节型, "OUR_MIFARE.dll", "iso15693writeex"
.参数 控制位, 字节型
.参数 应用标识, 字节型
.参数 起始块地址, 字节型
.参数 读写块数, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.参数 写卡数据缓冲, 字节型, 传址 数组
.DLL命令 寻感应区内多张卡, 字节型, "OUR_MIFARE.dll", "iso15693inventory16"
.参数 操作标志, 字节型
.参数 应用标识, 字节型
.参数 掩码长度, 字节型
.参数 卡号掩码, 字节型, 传址 数组
.参数 UID缓冲, 字节型, 传址 数组
.参数 缓冲长度, 字节型, 传址 数组
.DLL命令 让卡静止, 字节型, "OUR_MIFARE.dll", "iso15693stayquiet"
.参数 操作标志, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 让静止卡重启, 字节型, "OUR_MIFARE.dll", "iso15693resettoready"
.参数 操作标志, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 选中卡片, 字节型, "OUR_MIFARE.dll", "iso15693Select"
.参数 操作标志, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 读指定块数据, 字节型, "OUR_MIFARE.dll", "iso15693readblock"
.参数 操作标志, 字节型
.参数 起始块地址, 字节型
.参数 读写块数, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.参数 数据长度, 字节型, 传址 数组
.参数 读卡数据缓冲, 字节型, 传址 数组
.DLL命令 写数据到指定块, 字节型, "OUR_MIFARE.dll", "iso15693writeblock"
.参数 操作标志, 字节型
.参数 起始块地址, 字节型
.参数 读写块数, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.参数 数据长度, 字节型
.参数 写卡数据缓冲, 字节型, 传址 数组
.DLL命令 写应用标识, 字节型, "OUR_MIFARE.dll", "iso15693writeafi"
.参数 操作标志, 字节型
.参数 应用标识, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 写存储格式标识, 字节型, "OUR_MIFARE.dll", "iso15693writedsfid"
.参数 操作标志, 字节型
.参数 存储格式标识, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 读卡片系统信息, 字节型, "OUR_MIFARE.dll", "iso15693readinfo"
.参数 操作标志, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.参数 信息长度, 字节型, 传址 数组
.参数 卡片系统信息, 字节型, 传址 数组
.DLL命令 读取卡块安全状态, 字节型, "OUR_MIFARE.dll", "iso15693readsecuritystate"
.参数 操作标志, 字节型
.参数 起始块地址, 字节型
.参数 读写块数, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.参数 信息长度, 字节型, 传址 数组
.参数 卡片块安全信息, 字节型, 传址 数组
.DLL命令 锁应用标识, 字节型, "OUR_MIFARE.dll", "iso15693lockafi"
.参数 操作标志, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 锁存储格式标识, 字节型, "OUR_MIFARE.dll", "iso15693lockdsfid"
.参数 操作标志, 字节型
.参数 UID缓冲, 字节型, 传址 数组
.DLL命令 锁卡数据块, 字节型, "OUR_MIFARE.dll", "iso15693lockblock"
.参数 操作标志, 字节型
.参数 起始块地址, 字节型
.参数 UID缓冲, 字节型, 传址 数组
窗口程序集
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 显示错误
.参数 错误代码, 字节型
.局部变量 句柄, 整数型
.如果 (错误代码 = 8)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,未寻到发卡器上的卡!”, “提示”, 0)
.否则
.如果 (错误代码 = 9)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,读序列吗错误!”, “提示”, 0)
.否则
.如果 (错误代码 = 10)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,选卡错误!”, “提示”, 0)
.否则
.如果 (错误代码 = 11)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,装载密码错误!”, “提示”, 0)
.否则
.如果 (错误代码 = 12)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,密码认证错误!”, “提示”, 0)
.否则
.如果 (错误代码 = 13)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,读卡错误!”, “提示”, 0)
.否则
.如果 (错误代码 = 14)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,写卡错误!”, “提示”, 0)
.否则
.如果 (错误代码 = 21)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,没有动态库!”, “提示”, 0)
.否则
.如果 (错误代码 = 22)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,动态库或驱动程序异常!”, “提示”, 0)
.否则
.如果 (错误代码 = 23)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,驱动程序错误或发卡器未连接!”, “提示”, 0)
.否则
.如果 (错误代码 = 24)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,操作超时,一般是动态库没有反映!”, “提示”, 0)
.否则
.如果 (错误代码 = 25)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,发送字数不够!”, “提示”, 0)
.否则
.如果 (错误代码 = 26)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,发送的CRC错!”, “提示”, 0)
.否则
.如果 (错误代码 = 27)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,接收的字数不够!”, “提示”, 0)
.否则
.如果 (错误代码 = 28)
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,接收的CRC错!”, “提示”, 0)
.否则
提示 (句柄, “错误代码:” + 到文本 (错误代码) + “,未知的错误!”, “提示”, 0)
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.如果结束
.子程序 十六进制转十进制, 整数型
.参数 十六进制, 文本型
.局部变量 i, 整数型
.局部变量 十进制, 整数型
.计次循环首 (取文本长度 (十六进制), i)
十进制 = 十进制 × 16 + 寻找文本 (“0123456789ABCDEF”, 取文本中间 (到大写 (十六进制), i, 1), , 假) - 1
.计次循环尾 ()
返回 (十进制)
.子程序 _驱动发卡器响声_被单击
.局部变量 返回值, 字节型
返回值 = 蜂鸣器嘀一声 (100)
.如果 (返回值 ≠ 0)
显示错误 (返回值)
.否则
.如果结束
.子程序 _获取发卡器编号_被单击
.局部变量 句柄, 整数型
.局部变量 返回值, 字节型
.局部变量 设备编号, 字节型, 静态, "4"
返回值 = 读取设备编号 (设备编号)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
提示 (句柄, “读取成功,设备序列号:” + 到文本 (设备编号 [1]) + “-” + 到文本 (设备编号 [2]) + “-” + 到文本 (设备编号 [3]) + “-” + 到文本 (设备编号 [4]), “提示”, 0)
.否则
显示错误 (返回值)
.如果结束
.子程序 _轻松读15693卡_被单击
.局部变量 句柄, 整数型
.局部变量 返回值, 字节型
.局部变量 控制位, 字节型
.局部变量 应用标识, 字节型
.局部变量 起始地址, 字节型
.局部变量 读写块数, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 读写缓冲, 字节型, 静态, "255"
.局部变量 显示信息, 文本型
.局部变量 总数, 整数型
控制位 = 0
应用标识 = 十六进制转十进制 (应用标识框.内容)
起始地址 = 到字节 (起始地址框.内容)
读写块数 = 到字节 (读写块数框.内容)
.如果 (读写块数 > 12)
提示 (句柄, “轻松读写卡一次最多只能读写12块!”, “提示”, 0)
返回 ()
.否则
.如果结束
UID框.内容 = “”
读写数据.内容 = “”
返回值 = 轻松读取15693卡数据 (控制位, 应用标识, 起始地址, 读写块数, UID缓冲, 读写缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
显示信息 = “”
总数 = 1
.判断循环首 (总数 < 9)
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [总数]), 2)
总数 = 总数 + 1
.判断循环尾 ()
UID框.内容 = 显示信息
显示信息 = “”
总数 = 2
.判断循环首 (总数 ≤ 读写缓冲 [1] + 1)
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (读写缓冲 [总数]) + “ ”, 3)
总数 = 总数 + 1
.判断循环尾 ()
读写数据.内容 = 显示信息
.否则
显示错误 (返回值)
.如果结束
.子程序 _轻松写15693卡_被单击
.局部变量 句柄, 整数型
.局部变量 返回值, 字节型
.局部变量 控制位, 字节型
.局部变量 应用标识, 字节型
.局部变量 起始地址, 字节型
.局部变量 读写块数, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 读写缓冲, 字节型, 静态, "255"
.局部变量 显示信息, 文本型
.局部变量 总数, 整数型
.局部变量 每块字节数, 字节型
.局部变量 写卡信息, 字节集, , "0"
UID框.内容 = “”
控制位 = 0
应用标识 = 十六进制转十进制 (应用标识框.内容)
起始地址 = 到字节 (起始地址框.内容)
读写块数 = 到字节 (读写块数框.内容)
.如果 (读写块数 > 12)
提示 (句柄, “轻松读写卡一次最多只能读写12块!”, “提示”, 0)
返回 ()
.否则
.如果结束
.如果 (卡类型.现行选中项 = 0)
每块字节数 = 4
.否则
.如果 (卡类型.现行选中项 = 1)
每块字节数 = 8
.否则
每块字节数 = 32
.如果结束
.如果结束
读写缓冲 [1] = 读写块数 × 每块字节数
写卡信息 = 分割字节集 (到字节集 (读写数据.内容), 到字节集 (“ ”), )
.如果 (取数组成员数 (写卡信息) < 读写缓冲 [1])
.如果 (提示 (句柄, “写卡信息不足,是否尾部补0写入!”, “提示”, 1) ≠ 1)
返回 ()
.否则
.如果结束
.否则
.如果结束
总数 = 2
.判断循环首 (总数 ≤ 取数组成员数 (写卡信息) + 1)
读写缓冲 [总数] = 十六进制转十进制 (到文本 (写卡信息 [总数 - 1]))
总数 = 总数 + 1
.判断循环尾 ()
返回值 = 轻松写数据到15693卡块内 (控制位, 应用标识, 起始地址, 读写块数, UID缓冲, 读写缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
显示信息 = “”
总数 = 1
.判断循环首 (总数 < 9)
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [总数]), 2)
总数 = 总数 + 1
.判断循环尾 ()
UID框.内容 = 显示信息
提示 (句柄, “卡号:” + 显示信息 + “,写卡成功!”, “提示”, 0)
.否则
显示错误 (返回值)
.如果结束
.子程序 _寻单卡_被单击
.局部变量 返回值, 字节型
.局部变量 应用标识, 字节型
.局部变量 操作标志, 字节型
.局部变量 掩码长度, 字节型
.局部变量 卡号掩码, 字节型, 静态, "8"
.局部变量 UID缓冲, 字节型, 静态, "9"
.局部变量 显示信息, 文本型
.局部变量 数组指针, 整数型
UID框.内容 = “”
操作标志框.内容 = “36”
操作标志 = 十六进制转十进制 (操作标志框.内容)
应用标识 = 十六进制转十进制 (应用标识框.内容)
掩码长度 = 十六进制转十进制 (掩码长度框.内容)
返回值 = 寻感应区内单张卡 (操作标志, 应用标识, 掩码长度, 卡号掩码, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
存储格式标识框.内容 = 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [1]), 2)
显示信息 = “”
数组指针 = 2
.判断循环首 (数组指针 < 10)
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [数组指针]), 2)
数组指针 = 数组指针 + 1
.判断循环尾 ()
UID框.内容 = 显示信息
.否则
显示错误 (返回值)
.如果结束
.子程序 _同时寻多张卡_被单击
.局部变量 返回值, 字节型
.局部变量 应用标识, 字节型
.局部变量 操作标志, 字节型
.局部变量 掩码长度, 字节型
.局部变量 卡号掩码, 字节型, 静态, "8"
.局部变量 UID缓冲, 字节型, 静态, "1000"
.局部变量 缓冲长度, 字节型, 静态, "1"
.局部变量 显示信息, 文本型
.局部变量 数组指针, 整数型
.局部变量 UID指针, 整数型
UID框.内容 = “”
UID列表.清空 ()
操作标志框.内容 = “16”
操作标志 = 十六进制转十进制 (操作标志框.内容)
应用标识 = 十六进制转十进制 (应用标识框.内容)
掩码长度 = 十六进制转十进制 (掩码长度框.内容)
返回值 = 寻感应区内多张卡 (操作标志, 应用标识, 掩码长度, 卡号掩码, 缓冲长度, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
数组指针 = 1
.判断循环首 (数组指针 < 缓冲长度 [1])
显示信息 = “DSFID:” + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [数组指针]), 2) + “,UID:”
UID指针 = 1
.判断循环首 (UID指针 < 9)
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (UID缓冲 [UID指针 + 数组指针]), 2)
UID指针 = UID指针 + 1
.判断循环尾 ()
UID列表.加入项目 (显示信息, )
数组指针 = 数组指针 + 9
.判断循环尾 ()
UID列表.现行选中项 = 0
_UID列表_列表项被选择 ()
.否则
显示错误 (返回值)
.如果结束
.子程序 _UID列表_列表项被选择
.如果 (UID列表.取项目数 () > 0)
UID框.内容 = 取文本右边 (UID列表.内容, 16)
存储格式标识框.内容 = 取文本右边 (取文本左边 (UID列表.内容, 9), 2)
.否则
.如果结束
.子程序 _让卡静止_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 UID号, 文本型
.局部变量 UID指针, 整数型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
.如果结束
UID指针 = 1
.判断循环首 (UID指针 < 9)
UID缓冲 [UID指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - UID指针 × 2)
UID指针 = UID指针 + 1
.判断循环尾 ()
返回值 = 让卡静止 (操作标志, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,卡片已经静止,需要将卡拿开重刷才能再次寻到此卡!”, 0, “提示”, )
.否则
.如果 (返回值 = 40)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,进入静止(Quiet)状态失败!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.如果结束
.子程序 _让卡从静止中重起_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 UID号, 文本型
.局部变量 UID指针, 整数型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
.如果结束
UID指针 = 1
.判断循环首 (UID指针 < 9)
UID缓冲 [UID指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - UID指针 × 2)
UID指针 = UID指针 + 1
.判断循环尾 ()
返回值 = 让静止卡重启 (操作标志, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,已从静止中重起到准备状态!”, 0, “提示”, )
.否则
.如果 (返回值 = 42)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,从静止中重起准备失败!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.如果结束
.子程序 _选择卡_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 UID号, 文本型
.局部变量 UID指针, 整数型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
.如果结束
UID指针 = 1
.判断循环首 (UID指针 < 9)
UID缓冲 [UID指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - UID指针 × 2)
UID指针 = UID指针 + 1
.判断循环尾 ()
返回值 = 选中卡片 (操作标志, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,卡片已在选中状态!”, 0, “提示”, )
.否则
.如果 (返回值 = 41)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,使卡进入选中状态失败!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.如果结束
.子程序 _读一块数据_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 整数型
.局部变量 终止地址, 整数型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 数据长度, 字节型, 静态, "1"
.局部变量 数据缓冲, 字节型, 静态, "255"
.局部变量 UID号, 文本型
.局部变量 指针, 整数型
.局部变量 读写块地址, 整数型
.局部变量 显示信息, 文本型
读写数据.内容 = “”
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
起始地址 = 到字节 (起始地址框.内容)
终止地址 = 起始地址 + 到字节 (读写块数框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
.如果结束
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
显示信息 = “”
读写块地址 = 起始地址
.判断循环首 (读写块地址 < 终止地址)
返回值 = 读指定块数据 (操作标志, 读写块地址, 1, UID缓冲, 数据长度, 数据缓冲)
.如果 (返回值 = 0)
指针 = 1
.判断循环首 (指针 ≤ 数据长度 [1])
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (数据缓冲 [指针]), 2) + “ ”
指针 = 指针 + 1
.判断循环尾 ()
读写块地址 = 读写块地址 + 1
.否则
终止地址 = 读写块地址 - 1
.如果结束
.判断循环尾 ()
.如果 (读写块地址 = 终止地址)
蜂鸣器嘀一声 (100)
读写数据.内容 = 显示信息
信息框 (“UID:” + 删全部空 (UID框.内容) + “,读卡成功!”, 0, “提示”, )
.否则
信息框 (“在读取第:” + 到文本 (读写块地址) + “块时,返回错误代码:” + 到文本 (返回值), 0, “提示”, )
.如果结束
.子程序 _写一块数据_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 整数型
.局部变量 终止地址, 整数型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 数据长度, 字节型, 静态, "1"
.局部变量 数据缓冲, 字节型, 静态, "2000"
.局部变量 UID号, 文本型
.局部变量 指针, 整数型
.局部变量 写字节指针, 整数型
.局部变量 写卡信息, 字节集, , "0"
.局部变量 显示信息, 文本型
.局部变量 每块字节数, 字节型
.局部变量 写卡总长度, 整数型
.局部变量 块数据缓冲, 字节型, 静态, "32"
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
起始地址 = 到字节 (起始地址框.内容)
终止地址 = 起始地址 + 到字节 (读写块数框.内容)
.如果 (卡类型.现行选中项 = 0)
每块字节数 = 4
.否则
.如果 (卡类型.现行选中项 = 1)
每块字节数 = 8
.否则
每块字节数 = 32
.如果结束
.如果结束
写卡总长度 = 到数值 (读写块数框.内容) × 每块字节数
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
写卡信息 = 分割字节集 (到字节集 (读写数据.内容), 到字节集 (“ ”), )
.如果 (取数组成员数 (写卡信息) < 写卡总长度)
.如果 (信息框 (“写卡信息不足,是否尾部补0写入!”, 1, “提示”, ) = 1)
返回 ()
.否则
.如果结束
.否则
.如果结束
指针 = 1
.判断循环首 (指针 ≤ 取数组成员数 (写卡信息))
数据缓冲 [指针] = 十六进制转十进制 (到文本 (写卡信息 [指针]))
指针 = 指针 + 1
.判断循环尾 ()
写字节指针 = 0
.判断循环首 (起始地址 < 终止地址)
指针 = 1
.判断循环首 (指针 ≤ 每块字节数)
块数据缓冲 [指针] = 数据缓冲 [写字节指针 + 指针]
指针 = 指针 + 1
.判断循环尾 ()
返回值 = 写数据到指定块 (操作标志, 起始地址, 1, UID缓冲, 每块字节数, 块数据缓冲)
.如果 (返回值 = 0)
起始地址 = 起始地址 + 1
写字节指针 = 写字节指针 + 每块字节数
.否则
终止地址 = 起始地址 - 1
.如果结束
.判断循环尾 ()
.如果 (起始地址 = 终止地址)
蜂鸣器嘀一声 (100)
信息框 (“UID:” + 删全部空 (UID框.内容) + “,写卡成功!”, 0, “提示”, )
.否则
信息框 (“在写第:” + 到文本 (起始地址) + “块时,返回错误代码:” + 到文本 (返回值), 0, “提示”, )
.如果结束
.子程序 _写AFI_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 应用标识, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
应用标识 = 十六进制转十进制 (应用标识框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 写应用标识 (操作标志, 应用标识, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“写AIF操作成功!”, 0, “提示”, )
.否则
.如果 (返回值 = 46)
信息框 (“写AIF操作失败!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.如果结束
.子程序 _写DSFID_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 存储格式标识, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
存储格式标识 = 十六进制转十进制 (存储格式标识框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 写存储格式标识 (操作标志, 存储格式标识, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“写存储格式标识DSFID操作成功!”, 0, “提示”, )
.否则
.如果 (返回值 = 41)
信息框 (“写存储格式标识DSFID操作失败!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.如果结束
.子程序 _读取卡片系统信息_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 信息长度, 字节型, 静态, "1"
.局部变量 卡片系统信息, 字节型, 静态, "255"
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 读卡片系统信息 (操作标志, UID缓冲, 信息长度, 卡片系统信息)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
显示信息 = “”
指针 = 1
.判断循环首 (指针 ≤ 信息长度 [1])
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (卡片系统信息 [指针]) + “ ”, 3)
指针 = 指针 + 1
.判断循环尾 ()
读写数据.内容 = 显示信息
信息框 (“读取卡片系统信息成功!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.子程序 _读取块安全状态_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 字节型
.局部变量 读写块数, 字节型
.局部变量 信息长度, 字节型, 静态, "1"
.局部变量 卡片安全信息, 字节型, 静态, "255"
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
起始地址 = 到字节 (起始地址框.内容)
读写块数 = 到字节 (读写块数框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 读取卡块安全状态 (操作标志, 起始地址, 读写块数, UID缓冲, 信息长度, 卡片安全信息)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
显示信息 = “”
指针 = 1
.判断循环首 (指针 ≤ 信息长度 [1])
显示信息 = 显示信息 + 取文本右边 (“00” + 取十六进制文本 (卡片安全信息 [指针]) + “ ”, 3)
指针 = 指针 + 1
.判断循环尾 ()
读写数据.内容 = 显示信息
信息框 (“读取卡片块安全状态成功!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.子程序 _锁AFI_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型
.如果 (信息框 (“应用标识AFI锁定后将不能再修改,确定要锁定应用标识AFI吗?”, 1, “提示”, ) = 1)
返回 ()
.否则
.如果结束
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 锁应用标识 (操作标志, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“锁应用标识AFI操作成功!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.子程序 _锁DSFID_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型
.如果 (信息框 (“卡片存储格式标识DSFID锁定后将不能再修改,确定要锁定卡片存储格式标识DSFID吗?”, 1, “提示”, ) = 1)
返回 ()
.否则
.如果结束
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 锁存储格式标识 (操作标志, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“数据存储格式标识DSFID锁定成功!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束
.子程序 _锁数据块_被单击
.局部变量 返回值, 字节型
.局部变量 操作标志, 字节型
.局部变量 起始地址, 字节型
.局部变量 UID缓冲, 字节型, 静态, "8"
.局部变量 指针, 字节型
.局部变量 UID号, 文本型
.局部变量 显示信息, 文本型
.如果 (信息框 (“卡片数据块锁定后将不能再修改,确定要锁定卡片数据块吗?”, 1, “提示”, ) = 1)
返回 ()
.否则
.如果结束
操作标志框.内容 = “22”
操作标志 = 十六进制转十进制 (操作标志框.内容)
起始地址 = 到字节 (起始地址框.内容)
UID号 = 删全部空 (UID框.内容)
.如果 (取文本长度 (UID号) ≠ 16)
信息框 (“请输入16位16进制的UID或先执行寻卡操作!”, 0, “提示”, )
返回 ()
.否则
指针 = 1
.判断循环首 (指针 < 9)
UID缓冲 [指针] = 十六进制转十进制 (取文本左边 (UID号, 2))
UID号 = 取文本右边 (UID号, 16 - 指针 × 2)
指针 = 指针 + 1
.判断循环尾 ()
.如果结束
返回值 = 锁卡数据块 (操作标志, 起始地址, UID缓冲)
.如果 (返回值 = 0)
蜂鸣器嘀一声 (100)
信息框 (“数据块锁定成功!”, 0, “提示”, )
.否则
显示错误 (返回值)
.如果结束