由于最近在弄一个用Winform实现基于"博斯得"打印机实现打印预览的玩意遇到了几个问题。
在打印条码的时候实际打印的条码长度和预览差距很大于是就查网上查了一下资料熟悉了一下条形码的构成和解读,往下看
- 认识Code128编码规则
依次是 :
禁止区 开始字符 编码区 一个校验字符 停止字符

禁止区:前后两个停止区也是条码的一部分,为了保证条码的可识别性
开始字符和停止字符:Code128有三种:每种开始字符都不一样,结尾字符固定不变

图表1
CodeA: Start 211412 Stop 2331112
CodeB: Start 211214 Stop 2331112
CodeC: Start 211232 Stop 2331112
编码区:就是条码的数据咯扫码扫出来的数据就存在编码区。
校验字符后边解释>>>>>
示例:打印一个数据为02的条码
可以清晰的看到条码有很多白块和黑块组成
白块:由窄到宽 共四种,用1,2,3,4表示 其中1代表白色最窄区域 4代表白色最宽区域
白块:由窄到宽 共四种,用1,2,3,4表示 其中1代表黑色最窄区域 4代表黑色最宽区域

02条码图片
现在我们把图里面的标注写一下:
211214(开始字符) 123122 223211 213131 2331112(停止字符)
从"图表1"可以查到编码 "211214"属于Code128B
关于上面几组数据代表什么意思请读者往下看自然而然就理解了>>>
那么现在问题来了"图表1"最后的二进制代表什么呢?
我们先仔细观察上面五组数据,有什么发现?是不是每组数据加起来都是11(停止字符除外)
211214:每个数字加起来总和等于11,
123122:也是11
223211:也是11
倒回去看看"图表1"最后的二进制是不是也是11位?算了我还是图片粘贴过来把😒

图表1
没看出来没关系 我再举个例子(拿"开始字符"(211214)举例)
黑 白 黑 白 黑 白 (都是3黑3白组成一个字符)
2 1 1 2 1 4 (开始字符)
11 0 1 00 1 0000 (编码值)
所有我得出结论:
黑色用编码值"1"表示 ,白色用编码值"0"表示
现在解释黑块和白块为什么有的细有的粗还有"211214"代表什么意思>>>>>>
开始字符"(211214)举例:
2:从编码值理解就是连续打印两次黑块
1:也就是打印一次白色
1:打印一次黑色
2:打印2次白色
1:打印一次黑色
4:打印4次白色(这个就看起来比较粗了)
翻到上面"02条码图片"看看图片里面是不是这样打印的
最后说一下校验位
我们从打印好的 "02"条形码解码出来可以得到下面
211214(开始字符) 123122(0) 223211(2) 213131(53) 2331112(停止字符)
这里只说一下213131(53)这个校验位咋个来的公式:
CodeB编码的校验码算法: nmu%103
num= 104+(1*第一个字符对应的"ID"值)+(2*第一个字符对应的"ID"值)+.......(n*第n个字符的"ID"值)
ID CodeA CodeB CodeC BardCode 编码值

Code128编码图片
从"Code128编码图片"可以看出 123122(0) 对应"ID"16 223211(2)对应"ID"18 下面来实际算一下
CodeB编码的校验码= 104+(1*16)+(2*18)%103 = 53 (这个53就是校验码的"ID"了)

可以看出"ID"53对应的校验码是"213131"和我们实际值是对应的
以上所有叙述都是针对Code128B的
Code128C和128A下次补充
没有解释到位和清除的还请各大网友指正我再做修改,避免误导新人