使用Code128字体方式将文本设置为可用智能手机或扫码枪识别的条形码

背景

之前使用条形码一直是由应用软件的相应组件生成,Code128类型的条形码,如下图:
CorelDraw X4:
在这里插入图片描述
NiceLabel 标签制作:
在这里插入图片描述
在这里插入图片描述

之前也知道可以使用条码字体直接将文本设置为条码,但今天忽然发现直接使用字体生成的条码无法被扫码枪识别,特此记录此问题

上面是文本,下面是直接将文本设置为条码Code 128的字体,虽然表现形式为条码,但用手机智能相机或条码枪无法识别出来
在这里插入图片描述
下方是用组件生成的单个字符的条码,明显可见除字符本身前后都有附加部分的条码
在这里插入图片描述
A 这个字符只片在红框部分
在这里插入图片描述

目标与限定范围

只使用设置字体的方式,在CorelDraw X4、Word、Excel、Notepad中,将文本字符(数字符号字母)设置为条形码,条形码为Code128 B类编码
生成的条码在最前面有起始码,后缀有校验码和结束码,但所有AI给出的计算方式都无法正确得到可以使用的对应使用哪个ASCII码来作为文本字符来生成起始码校验码和结束码。
根据AI给的说明:
在这里插入图片描述
第一个字符的Code128编码值是104,实际经过不断尝试只有使用ASCII码为209的字符才能用下载到的Code128TTF字体生成对应的条码图形,如下图:
在这里插入图片描述
在这里插入图片描述

见上上图
上部分为 CorelDrawX4条码组件生成的
中部分为 使用字符设置条码字体Code128生成的
下部分为 使用的字符(使用的字符是不断试出来的)
首字符为ASCII 209
第2字符为ASCII 207
第3字符为内容字符3
第4字符为校验字符F
第5字符为结尾字符ASCII 211
字符间距需设置为0%,默认是20%
在这里插入图片描述
如果使用字符1,则校验字符需要使用B
如果使用字符2,则校验字符需要使用D
找了几个AI给出的算法,都有问题,对于Code 128 Set B 起始符是104
在这里插入图片描述

正确的计算方法如下
首位ASCII码 209
第2位ASCII码 207
从第3位开始为内容字符,内容字符按下表Code128B来确定其计算值(可输入字符的ASCII码-32)
比如内容是:11 首位权重值从2开始
校验位计算步骤:

  1. 17×2+17×3=85
  2. 85 mod 103 = 85
  3. 85查下表为小写u(小写u的ASCII码为85+32=117)
    则校验码字符u表示的条形码
    最后1位结束ASCII码:211
    ASCII码的输入方式为左手按住ALT,右手使用小键盘输入对应的ASCII码
    在这里插入图片描述

如下图:
在这里插入图片描述
对这个图片的文本设置字体为code128就能变成可用智能手机或条码枪识别的条形码
ÑÏ11uÓ
在Word中
在这里插入图片描述
在Excel中
在这里插入图片描述

问题

根据前面的计算方法(权重和)对(103)取模
结果值的区间为0-102
变换ASCII码的区间为32-134
即意味着字库中必须有ASCII码从32-134的对应条码形态,否则校验字符就无法正确显示

在网上找到如下几个所谓Code 128字体TTF文件
1、2008-4-3 7932字节
在这里插入图片描述
2、2004-1-29 7884字节
在这里插入图片描述
对于2004-1-29的1.2版本,前导的2个字符及结束整缺失对应的条码
如下图:
在这里插入图片描述
对于2008-4-3的2.0版本,可以正常显示第1第2以及结束符
在这里插入图片描述
但是ASCII 127-134 的字符条码缺失,如下图,第1个是126:
在这里插入图片描述
要么有更新版本的Code128TTF字体文件,不然就需要自己修改补齐ASCII127-134 这8个字符对应的条码才能正确生成校验字符的条码,否则就会在生成的条码中出现上面的白框

对以下字符串进行条码生成,可以得到95 97 99 101(对应ASCII 127 129 131 133)的校验码:
!?
"?
#?
$?

对以下字符串进行条码生成,可以得到96 98 100 102(对应ASCII 128 130 132 134)的校验码:
P
Q
R
S

通过其他条码组件生成对应的字符的条码后,修改TTF文件设置到对应的ASCII字上,即可满足前面的计算公式生成字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值