易语言读写 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

相关文章

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的