条形码的种类
条码码制是指条码符号的类型,各种条码符号都是由符合特定编码规则的条和空组合而成,具有固定的编码容量和条码字符集。
一维码的码制有100多种编码模式,常用的包括EAN码、UPC码、39码、交叉25码、128码、93码及Codabar库德巴码等。
--来源百度百科
各种详细编码规则,感兴趣可以进行深入研究。
微信小程序wxbarcode编码类型、使用以及问题
微信小程序wxbarcode使用的是code128编码。
npm install wxbarcode
import wxbarcode from 'wxbarcode'
Page({
onShow() {
const CustomerId = '123456'
let _ = ''
if (`${CustomerId}`.length % 2 !== 0) {
_ = ' '
}
wxbarcode.barcode('barcode', CustomerId + _, 520, 160);
}
})
注意(问题!!!):
由于wxbarcode里的条码编码是使用的code128,如果我们所编码的内容为纯数字的内容,会使用code128C编码方式,但是要求编码的字符串长度为偶数位,如果是奇数,会要求在最后一位前用code128B进行转码声明,从wxbarcode源码中能看到,最后一位添加的是63,对应code128B编码中的'_'
。所以如果是对12345
进行编码,最终扫码出来的结果会是12345_
。所以代码中针对编码的CustomerId
长度进行了判断,是奇数位的话最后追加一个空格。
<view class="barcode">
<canvas canvas-id="barcode" />
</view>
.barcode canvas {
width: 520rpx;
height: 160rpx;
}
其他可能的问题:
条码扫码不成功
- 请尝试修改条码生成宽高设置。该案例使用的是
520*160
- 如果背景色值不纯,请尝试设置条码四周的边距
- 请尝试修改条码生成宽高设置。该案例使用的是
如何肉眼识别微信小程序条码
那如果我们看到一个code128生成的条形码,不通过条码枪,如何来识别条形码对应的内容是什么呢?其实就是我们生成条形码的一个逆向过程。
一个Code 128条形码由六部分组成。
- 空白区域
- 起始标记
- 数据区
- 校验符
- 终止符
- 空白区域
Code 128条码指定相互间隔的3个条形和3个空白(共六个单元)代表一个字符,每个字符由一个条开始,以一个空结束。 在条形码字体中,最后一个条形通常与终止符一起组合成一个更宽的终止符。
简单示例
我们以上面的条形码为例进行说明。
- 我们把条形码的粗细从低到高按1,2,3,4进行编码。
按照6个一组对条形码进行分组并标记编码。
211232
112232
131123
121241
2331112
我们看到,把编码按照6个为一组,进行分组,其中,最后一组为
2331112
7位数,尾部总是为2331112
,在下方编码表中能到到对应的值为106, 代表code128编码结束。去掉起始标记和终止符
头有三种:
- A)211412
- B)211214
- C)211232。
这分别表示此code128的三种类型。我们看到示例中的起始编码是
211232
,属于code128C。
去掉首位的结果如下:112232
131123
121241
查找code128编码表得出最后的结果,其中最后一位为校验符。
12
34
82
所以,以上是我们对'1234'
字符串进行编码后的二维码结果。
复杂一些的条形码
我们以上面的条形码为例进行说明。
- 我们把条形码的粗细从低到高按1,2,3,4进行编码。
按照6个一组对条形码进行分组并标记编码。
211214
~
221132~
123221~
221231~
223112~
213212~
212222~
311141~
2331112我们看到,把编码按照6个为一组,进行分组,其中,最后一组为
2331112
7位数,尾部总是为2331112
,在下方编码表中能到到对应的值为106, 代表code128编码结束。去掉起始标记和终止符
我们看到示例中的起始编码是211214
,属于code128B。
去掉首位的结果如下:221132
~
123221~
221231~
223112~
213212~
212222~
311141查找code128编码表得出最后的结果
3
1
4
6
5
SP CODEAFNC1
练习题。那下面这个二维码是对什么字符串进行编码的结果呢?
wxbarcode内置编码数组
// code128 B
var PATTERNS = [
[1, 2, 3, 1, 2, 2, 0, 0], // 0
[1, 2, 3, 2, 2, 1, 0, 0], // 1
[2, 2, 3, 2, 1, 1, 0, 0], // 2
[2, 2, 1, 1, 3, 2, 0, 0], // 3
[2, 2, 1, 2, 3, 1, 0, 0], // 4
[2, 1, 3, 2, 1, 2, 0, 0], // 5
[2, 2, 3, 1, 1, 2, 0, 0], // 6
[3, 1, 2, 1, 3, 1, 0, 0], // 7
[3, 1, 1, 2, 2, 2, 0, 0], // 8
[3, 2, 1, 1, 2, 2, 0, 0], // 9
]
// code128 C
var PATTERNS = [
[2, 1, 2, 2, 2, 2, 0, 0], // 0
[2, 2, 2, 1, 2, 2, 0, 0], // 1
[2, 2, 2, 2, 2, 1, 0, 0], // 2
[1, 2, 1, 2, 2, 3, 0, 0], // 3
[1, 2, 1, 3, 2, 2, 0, 0], // 4
[1, 3, 1, 2, 2, 2, 0, 0], // 5
[1, 2, 2, 2, 1, 3, 0, 0], // 6
[1, 2, 2, 3, 1, 2, 0, 0], // 7
[1, 3, 2, 2, 1, 2, 0, 0], // 8
[2, 2, 1, 2, 1, 3, 0, 0], // 9
[2, 2, 1, 3, 1, 2, 0, 0], // 10
[2, 3, 1, 2, 1, 2, 0, 0], // 11
[1, 1, 2, 2, 3, 2, 0, 0], // 12
[1, 2, 2, 1, 3, 2, 0, 0], // 13
[1, 2, 2, 2, 3, 1, 0, 0], // 14
[1, 1, 3, 2, 2, 2, 0, 0], // 15
[1, 2, 3, 1, 2, 2, 0, 0], // 16
[1, 2, 3, 2, 2, 1, 0, 0], // 17
[2, 2, 3, 2, 1, 1, 0, 0], // 18
[2, 2, 1, 1, 3, 2, 0, 0], // 19
[2, 2, 1, 2, 3, 1, 0, 0], // 20
[2, 1, 3, 2, 1, 2, 0, 0], // 21
[2, 2, 3, 1, 1, 2, 0, 0], // 22
[3, 1, 2, 1, 3, 1, 0, 0], // 23
[3, 1, 1, 2, 2, 2, 0, 0], // 24
[3, 2, 1, 1, 2, 2, 0, 0], // 25
[3, 2, 1, 2, 2, 1, 0, 0], // 26
[3, 1, 2, 2, 1, 2, 0, 0], // 27
[3, 2, 2, 1, 1, 2, 0, 0], // 28
[3, 2, 2, 2, 1, 1, 0, 0], // 29
[2, 1, 2, 1, 2, 3, 0, 0], // 30
[2, 1, 2, 3, 2, 1, 0, 0], // 31
[2, 3, 2, 1, 2, 1, 0, 0], // 32
[1, 1, 1, 3, 2, 3, 0, 0], // 33
[1, 3, 1, 1, 2, 3, 0, 0], // 34
[1, 3, 1, 3, 2, 1, 0, 0], // 35
[1, 1, 2, 3, 1, 3, 0, 0], // 36
[1, 3, 2, 1, 1, 3, 0, 0], // 37
[1, 3, 2, 3, 1, 1, 0, 0], // 38
[2, 1, 1, 3, 1, 3, 0, 0], // 39
[2, 3, 1, 1, 1, 3, 0, 0], // 40
[2, 3, 1, 3, 1, 1, 0, 0], // 41
[1, 1, 2, 1, 3, 3, 0, 0], // 42
[1, 1, 2, 3, 3, 1, 0, 0], // 43
[1, 3, 2, 1, 3, 1, 0, 0], // 44
[1, 1, 3, 1, 2, 3, 0, 0], // 45
[1, 1, 3, 3, 2, 1, 0, 0], // 46
[1, 3, 3, 1, 2, 1, 0, 0], // 47
[3, 1, 3, 1, 2, 1, 0, 0], // 48
[2, 1, 1, 3, 3, 1, 0, 0], // 49
[2, 3, 1, 1, 3, 1, 0, 0], // 50
[2, 1, 3, 1, 1, 3, 0, 0], // 51
[2, 1, 3, 3, 1, 1, 0, 0], // 52
[2, 1, 3, 1, 3, 1, 0, 0], // 53
[3, 1, 1, 1, 2, 3, 0, 0], // 54
[3, 1, 1, 3, 2, 1, 0, 0], // 55
[3, 3, 1, 1, 2, 1, 0, 0], // 56
[3, 1, 2, 1, 1, 3, 0, 0], // 57
[3, 1, 2, 3, 1, 1, 0, 0], // 58
[3, 3, 2, 1, 1, 1, 0, 0], // 59
[3, 1, 4, 1, 1, 1, 0, 0], // 60
[2, 2, 1, 4, 1, 1, 0, 0], // 61
[4, 3, 1, 1, 1, 1, 0, 0], // 62
[1, 1, 1, 2, 2, 4, 0, 0], // 63
[1, 1, 1, 4, 2, 2, 0, 0], // 64
[1, 2, 1, 1, 2, 4, 0, 0], // 65
[1, 2, 1, 4, 2, 1, 0, 0], // 66
[1, 4, 1, 1, 2, 2, 0, 0], // 67
[1, 4, 1, 2, 2, 1, 0, 0], // 68
[1, 1, 2, 2, 1, 4, 0, 0], // 69
[1, 1, 2, 4, 1, 2, 0, 0], // 70
[1, 2, 2, 1, 1, 4, 0, 0], // 71
[1, 2, 2, 4, 1, 1, 0, 0], // 72
[1, 4, 2, 1, 1, 2, 0, 0], // 73
[1, 4, 2, 2, 1, 1, 0, 0], // 74
[2, 4, 1, 2, 1, 1, 0, 0], // 75
[2, 2, 1, 1, 1, 4, 0, 0], // 76
[4, 1, 3, 1, 1, 1, 0, 0], // 77
[2, 4, 1, 1, 1, 2, 0, 0], // 78
[1, 3, 4, 1, 1, 1, 0, 0], // 79
[1, 1, 1, 2, 4, 2, 0, 0], // 80
[1, 2, 1, 1, 4, 2, 0, 0], // 81
[1, 2, 1, 2, 4, 1, 0, 0], // 82
[1, 1, 4, 2, 1, 2, 0, 0], // 83
[1, 2, 4, 1, 1, 2, 0, 0], // 84
[1, 2, 4, 2, 1, 1, 0, 0], // 85
[4, 1, 1, 2, 1, 2, 0, 0], // 86
[4, 2, 1, 1, 1, 2, 0, 0], // 87
[4, 2, 1, 2, 1, 1, 0, 0], // 88
[2, 1, 2, 1, 4, 1, 0, 0], // 89
[2, 1, 4, 1, 2, 1, 0, 0], // 90
[4, 1, 2, 1, 2, 1, 0, 0], // 91
[1, 1, 1, 1, 4, 3, 0, 0], // 92
[1, 1, 1, 3, 4, 1, 0, 0], // 93
[1, 3, 1, 1, 4, 1, 0, 0], // 94
[1, 1, 4, 1, 1, 3, 0, 0], // 95
[1, 1, 4, 3, 1, 1, 0, 0], // 96
[4, 1, 1, 1, 1, 3, 0, 0], // 97
[4, 1, 1, 3, 1, 1, 0, 0], // 98
[1, 1, 3, 1, 4, 1, 0, 0], // 99
[1, 1, 4, 1, 3, 1, 0, 0], // 100
[3, 1, 1, 1, 4, 1, 0, 0], // 101
[4, 1, 1, 1, 3, 1, 0, 0], // 102
[2, 1, 1, 4, 1, 2, 0, 0], // 103
[2, 1, 1, 2, 1, 4, 0, 0], // 104
[2, 1, 1, 2, 3, 2, 0, 0], // 105
[2, 3, 3, 1, 1, 1, 2, 0] // 106
]
code128 编码对照表
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。