文章来源

image.png

条形码的种类

条码码制是指条码符号的类型,各种条码符号都是由符合特定编码规则的条和空组合而成,具有固定的编码容量和条码字符集。

一维码的码制有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条形码由六部分组成。

  1. 空白区域
  2. 起始标记
  3. 数据区
  4. 校验符
  5. 终止符
  6. 空白区域

Code 128条码指定相互间隔的3个条形和3个空白(共六个单元)代表一个字符,每个字符由一个条开始,以一个空结束。 在条形码字体中,最后一个条形通常与终止符一起组合成一个更宽的终止符。

简单示例

image.png

我们以上面的条形码为例进行说明。

  • 我们把条形码的粗细从低到高按1,2,3,4进行编码。
    image.png
  • 按照6个一组对条形码进行分组并标记编码。

    211232 112232 131123 121241 2331112

    我们看到,把编码按照6个为一组,进行分组,其中,最后一组为23311127位数,尾部总是为2331112,在下方编码表中能到到对应的值为106, 代表code128编码结束。

  • 去掉起始标记和终止符

    头有三种:

    • A)211412
    • B)211214
    • C)211232。

    这分别表示此code128的三种类型。我们看到示例中的起始编码是211232,属于code128C。
    去掉首位的结果如下:

    112232 131123 121241

  • 查找code128编码表得出最后的结果,其中最后一位为校验符。

    12 34 82

所以,以上是我们对'1234'字符串进行编码后的二维码结果。

复杂一些的条形码

image.png

我们以上面的条形码为例进行说明。

  • 我们把条形码的粗细从低到高按1,2,3,4进行编码。
  • 按照6个一组对条形码进行分组并标记编码。

    211214 ~ 221132 ~ 123221 ~ 221231 ~ 223112 ~ 213212 ~ 212222 ~ 311141 ~ 2331112

    我们看到,把编码按照6个为一组,进行分组,其中,最后一组为23311127位数,尾部总是为2331112,在下方编码表中能到到对应的值为106, 代表code128编码结束。

  • 去掉起始标记和终止符
    我们看到示例中的起始编码是211214,属于code128B。
    去掉首位的结果如下:

    221132 ~ 123221 ~ 221231 ~ 223112 ~ 213212 ~ 212222 ~ 311141

  • 查找code128编码表得出最后的结果

    3 1 4 6 5 SP CODEAFNC1

练习题。那下面这个二维码是对什么字符串进行编码的结果呢?

image.png

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 编码对照表

饭等米
114 声望13 粉丝

前端新人