易语言读写 NXP15693 ICODE、富士通MB89R118卡UID标签源码

2023-11-11 21:30

本文主要是介绍易语言读写 NXP15693 ICODE、富士通MB89R118卡UID标签源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 本示例发卡器介绍: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, “提示”, )
.否则
    显示错误 (返回值)
.如果结束

这篇关于易语言读写 NXP15693 ICODE、富士通MB89R118卡UID标签源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/392923

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态