摘要:二维码运用越来越广泛了,目前在医院中一个二维码可以串联多个系统,二维码的内容也可以设置一些特殊字符去达成系统便捷性。本次遇到为二维码中开头内置了回车和空格,在程序判断为回车(KEY_ENTER)时就会触发业务逻辑,这个时候由于第一个KEY_CODE就是回车(有点诡异偶发莫名出现一个随机字符),内容不正确将会导致业务失败。
一、问题现状
测试环境如下:
系统:windwos11 家庭版
扫码器:壹码通6621
注:以上为测试环境,非生产环境。对于此问题可以由扫码器厂家解决,也可以为软件厂家解决,都不复杂只需要将不符合数据剔除即可。
二维码内容开头自带回车换行,不清楚是否因为此而导致会随意出现一个字符,导致程序页面跳转,业务处理失败。
二、解决办法
解决有两种,可以由软件开发剔除脏数据,或者由扫码器厂家剔除回车换行、空格等不需要的字符。
注:这里个人建议具备开发能力推荐自己修改,这样可控性高,且软件更新后 不需要为每一台扫码器设备刷新固件且存在不同型号的扫码器固件不通用。还有另一点,目前采用的 USB HID一KBW(USB虚拟键盘) 模式,如果二维码做有中文将会乱码,因为扫码器自身为 ASCII 编码,如果有中文需要自己采用十六进读取数据转化为汉字。
通过 USB 虚拟串口技术获取二维码十六进内容,文章所有相关工具包见下方链接,注意工具仅适用于壹码通 6621 扫码器,主要工具如下:
| 名称 | 含义 |
|---|---|
| sscom5.13.1.exe | 串口工具 |
| CRW_VCP 32_64.inf | USB虚拟化串口驱动,注意在 windwos10 和 windows11 中系统已自带,不需要安装驱动,如果 windows10 不能正常可以尝试安装 drivers_v1.0.2(2020.10.10).exe 驱动 |
| 壹码通二维码识别模组固件更新操作.docx | 内含壹码通扫码器固件升级操作和 windows7 系统 USB 转虚拟串口驱动安装操作 |
| EMTxx2x-20230117_211023_del_200d0a-project.bin.pkg | 扫码器删除回车换行、空格的固件,仅支持 壹码通 6621 扫码器 |
| EMTxx2x-20220809_104944_240-project.bin.pkg | 码器初始固件,未做任何特需设置,仅支持 壹码通 6621 扫码器 |
| upgrade_tool.exe | 固件升级工具 |
2.1 软件逻辑处理
新增字符长度判断,如果在换行回车键之前获取到的内容为空或者长度小于5,将作为脏数据不做业务处理。在获取符合数据后进行页面跳转业务处理。因为扫码器可以在任何页面触发(此处采用 Fragment),所以判断在指定扫码页面才可以处理数据,如果不在指定页面则不处理。
2.2 扫码器固件刷机
具体刷机内容参见下方工具包:壹码通 EM-6621 模组固件更新工具,这里记录一下因为使用了串口工具,在未关闭串口情况下进行刷固件的失败的提示。
三、ASCII码一览表,ASCII码对照表
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。
ASCII 编码于 1967 年第一次发布,最后一次更新是在 1986 年,迄今为止共收录了 128 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 1234567890)、标点符号(,.!等)、特殊符号(@#$%^&等)以及一些具有控制功能的字符(往往不会显示出来)。
ASCII 编码是美国人给自己设计的,他们并没有考虑欧洲那些扩展的拉丁字母,也没有考虑韩语和日语,我大中华几万个汉字更是不可能被重视。计算机也是美国人发明的,起初使用的就是 ASCII 码,只能显示英文字符。各个国家为了让本国公民也能正常使用计算机,开始效仿 ASCII 开发自己的字符编码,例如 ISO/IEC 8859(欧洲字符集)、shift_Jis(日语字符集)、GBK(中文字符集)等。
| 二进制 | 十进制 | 十六进制 | 字符/缩写 | 解释 |
|---|---|---|---|---|
| 00000000 | 0 | 00 | NUL (NULL) | 空字符 |
| 00000001 | 1 | 01 | SOH (Start Of Headling) | 标题开始 |
| 00000010 | 2 | 02 | STX (Start Of Text) | 正文开始 |
| 00000011 | 3 | 03 | ETX (End Of Text) | 正文结束 |
| 00000100 | 4 | 04 | EOT (End Of Transmission) | 传输结束 |
| 00000101 | 5 | 05 | ENQ (Enquiry) | 请求 |
| 00000110 | 6 | 06 | ACK (Acknowledge) | 回应/响应/收到通知 |
| 00000111 | 7 | 07 | BEL (Bell) | 响铃 |
| 00001000 | 8 | 08 | BS (Backspace) | 退格 |
| 00001001 | 9 | 09 | HT (Horizontal Tab) | 水平制表符 |
| 00001010 | 10 | 0A | LF/NL(Line Feed/New Line) | 换行键 |
| 00001011 | 11 | 0B | VT (Vertical Tab) | 垂直制表符 |
| 00001100 | 12 | 0C | FF/NP (Form Feed/New Page) | 换页键 |
| 00001101 | 13 | 0D | CR (Carriage Return) | 回车键 |
| 00001110 | 14 | 0E | SO (Shift Out) | 不用切换 |
| 00001111 | 15 | 0F | SI (Shift In) | 启用切换 |
| 00010000 | 16 | 10 | DLE (Data Link Escape) | 数据链路转义 |
| 00010001 | 17 | 11 | DC1/XON (Device Control 1/Transmission On) |
设备控制1/传输开始 |
| 00010010 | 18 | 12 | DC2 (Device Control 2) | 设备控制2 |
| 00010011 | 19 | 13 | DC3/XOFF (Device Control 3/Transmission Off) |
设备控制3/传输中断 |
| 00010100 | 20 | 14 | DC4 (Device Control 4) | 设备控制4 |
| 00010101 | 21 | 15 | NAK (Negative Acknowledge) | 无响应/非正常响应/拒绝接收 |
| 00010110 | 22 | 16 | SYN (Synchronous Idle) | 同步空闲 |
| 00010111 | 23 | 17 | ETB (End of Transmission Block) | 传输块结束/块传输终止 |
| 00011000 | 24 | 18 | CAN (Cancel) | 取消 |
| 00011001 | 25 | 19 | EM (End of Medium) | 已到介质末端/介质存储已满/介质中断 |
| 00011010 | 26 | 1A | SUB (Substitute) | 替补/替换 |
| 00011011 | 27 | 1B | ESC (Escape) | 逃离/取消 |
| 00011100 | 28 | 1C | FS (File Separator) | 文件分割符 |
| 00011101 | 29 | 1D | GS (Group Separator) | 组分隔符/分组符 |
| 00011110 | 30 | 1E | RS (Record Separator) | 记录分离符 |
| 00011111 | 31 | 1F | US (Unit Separator) | 单元分隔符 |
| 00100000 | 32 | 20 | (Space) | 空格 |
| 00100001 | 33 | <

1万+

被折叠的 条评论
为什么被折叠?



