校验位计算

计算条形码的校验位

Modulo 10

ActiveBarcode: Info ActiveBarcode会自动为条形码计算校验位。
无需手动计算或添加这些校验位。本文档仅为完整起见而提供。
根据模数计算校验和 10:
EAN 编码中使用了模数 10 的校验码,例如 EAN-13.

对于 EAN 码,校验位根据模 10 计算法计算,权重为 3。 加权 3 从右边第一个数字开始。 然后将各个数字乘以权重。 这些结果相加得出一个总和。 根据这个和计算出模 10。首先将总和除以 10。 除法的余数从 10 中减去。 减法的结果就是校验和/校验位。

下面是一个使用 EAN-13 代码进行模数转换 10 的计算示例:

数字: 4 0 0 7 6 3 0 0 0 0 1 1
重量: 1 3 1 3 1 3 1 3 1 3 1 3
成果: 4+0+0+21+6+9+0+0+0+0+1+3 = 44
计算校验和: 10 的下一个倍数的加法。 (50)
校验码 6


对于代码 25,校验位也是按照模 10 计算方法,以权重 3 计算的。 不过,权重 3 从左边第一个有用的数字开始。 然后将各个有用数字乘以权重。 将这些结果相加得出一个总和。 模数 10 就是从这个和中计算出来的。 首先将总和除以 10。 除法的余数从 10 中减去(计算到 10 的差值)。 减法的结果就是校验和/校验位。

下面是使用代码 25 进行模乘 10 计算的示例:

数字: 1 2 3 4 5
重量: 3 1 3 1 3
成果: 3+2+9+4+15 = 33
计算校验和: 10 的下一个倍数的加法。 (40)
校验码 7


使用 LeitcodeIdentcode 时,校验码也是按照模 10 计算方法计算的。 不过,这里的权重有所不同: 奇数位置的权重为 4,直线位置的权重为 9。 下面就是一个例子:

数字: 2 3 6 6 9 0 1 2 0 1 2 3 0
重量: 4 9 4 9 4 9 4 9 4 9 4 9 4
成果: 8+27+24+54+36+0+4+18+0+9+8+27+0 = 215
计算校验和: 10 的下一个倍数的加法。 (220)
校验码 5


使用 EAN-14 / ITF-14 / SCC-14 / DUN-14 编码的模数 10 计算示例:

数字: 0 4 0 0 7 6 3 0 0 0 0 1 1
重量: 3 1 3 1 3 1 3 1 3 1 3 1 3
成果: 0+4+0+0+21+6+9+0+0+0+0+1+3 = 44
计算校验和: 10 的下一个倍数的加法。 (50)
校验码 6

Modulo 11

ActiveBarcode: Info ActiveBarcode会自动为条形码计算校验位。
无需手动计算或添加这些校验位。本文档仅为完整起见而提供。
根据模数计算校验和 11:
例如,PZN就使用了模数 11 的校验码。ISBN 也使用 Modulo 11。

PZN
首先将所有数字分别乘以乘法器。 乘数与数字 1 的位置相对应。 将所有结果相加。然后将结果除以 11。 余数就是校验数。 如果校验位是 10,则该号码不得用作 PZN。 因此,代码无效。

计算示例

数字: 6 3 1 9 4 2
重量: 2 3 4 5 6 7
成果: 12+9+4+45+24+14 = 108
计算校验和: 108 / 11 = 9 剩余 9
校验码 9


ISBN-10 和 ISSN 校验和
首先将所有数字分别乘以乘法器。 乘数与数字 1 右起的位置相对应。 将所有结果相加。然后将结果除以 11。 从 11 减去余数,得到校验数位。
如果该校验和程序计算出结果 11,则校验和为 0。 结果 0 无法计算,因为上一步(除以 11 的余数)的结果不可能是 11。
也可能需要数字 10。 10 用 X 表示:"3-928444-00-X"。

计算示例

数字: 3 9 2 8 4 4 4 0 4
重量: 10 9 8 7 6 5 4 3 2
成果: 30 + 81 + 16 + 56 + 24 + 20 + 16 + 0 + 8 = 251
计算校验和: 251 / 11 = 22 剩余 9 -> 11 - 9 = 2
校验码 2

Modulo 16

ActiveBarcode: Info ActiveBarcode会自动为条形码计算校验位。
无需手动计算或添加这些校验位。本文档仅为完整起见而提供。
根据模数计算校验和 16:
条形码符号 Codabar 使用 Modulo 16。 下面举例说明如何根据模 16 计算校验位:

数字: A 7 8 9 A
参考编号: 16 7 8 9 16
参考编号总和: 56
计算校验和: 56 / 16 = 3 剩余 8
difference: 16 - 8 = 8
校验码 参考编号 8 = 8

参考编号:
00 = 0
01 = 1
02 = 2
03 = 3
04 = 4
05 = 5
06 = 6
07 = 7
08 = 8
09 = 9
10 = -
11 = $
12 = :
13 = /
14 = .
15 = +
16 = A
17 = B
18 = C
19 = D

Modulo 43

ActiveBarcode: Info ActiveBarcode会自动为条形码计算校验位。
无需手动计算或添加这些校验位。本文档仅为完整起见而提供。
根据模数计算校验和 43:
例如,代码 39就使用了模数 43 的校验码。

首先,为代码的所有字符分配参考编号。 这些参考编号将加到总数中。 这个总数除以 43。 该分部的其余部分与校验和相对应,然后用与参考编号相对应的字符来代替。

计算示例

数字: 1 5 9 A Z
参考编号: 1 +5 +9 +10 +35
参考编号总和: 60
计算校验和: 60 / 43 = 1 剩余 17
校验码 "H" (参考编号 17)

参考编号:
00 0
01 1
02 2
03 3
04 4
05 5
06 6
07 7
08 8
09 9
10 A
11 B
12 C
13 D
14 E
15 F
16 G
17 H
18 I
19 J
20 K
21 L
22 M
23 N
24 O
25 P
26 Q
27 R
28 S
29 T
30 U
31 V
32 W
33 X
34 Y
35 Z
36 -
37 .
38 Space
39 $
40 /
41 +
42 %


根据模 43 计算校验和的代码示例

Excel VBA 代码,用于根据模 43 计算校验和,例如 HIBC 代码:
' calc modulo 43
‘ returns the input string plus the check character
' demo for www.activebarcode.com
Public Function MOD43CheckChar(sValue As String) As String
    Const charSet As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
    Dim i As Integer
    Dim T As Long
    For i = 1 To Len(Trim(UCase(sValue)))
        T = InStr(charSet, Mid(sValue, i, 1)) - 1 + T
    Next i
    MOD43CheckChar = sValue & Mid$(charSet, (T Mod 43 + 1), 1)
End Function

Modulo 47

ActiveBarcode: Info ActiveBarcode会自动为条形码计算校验位。
无需手动计算或添加这些校验位。本文档仅为完整起见而提供。
根据模数计算校验和 47:
例如,代码 93就使用了模数 47 的校验字符。

Code 93 使用 2 种校验和,即所谓的 C 校验和和所谓的 K 校验和。 两者的计算原理相同。 但是,K校验和也包含C校验和。

在计算过程中,首先为代码的所有字符分配参考编号。 代码中的每个数字都有权重,并从后面开始递增。 因此,最后一个位置的权重为 1,倒数第二个位置的权重为 2,以此类推。 在每种情况下,参考编号都乘以权重。 由此得出的单项结果相加。

现在这个总数除以 47。 该分部的剩余部分与校验和相对应,校验和使用参考编号编码为字符。

K校验和的确定方法相同。 不过,这次使用的是代码字符串--与第一次校验和一样--加上 C 校验和作为基础。 第一个确定的校验和会被纳入第二个校验和的计算中。

计算示例

Checksum with Modulo47

参考编号 Code 93:

00 0
01 1
02 2
03 3
04 4
05 5
06 6
07 7
08 8
09 9
10 A
11 B
12 C
13 D
14 E
15 F
16 G
17 H
18 I
19 J
20 K
21 L
22 M
23 N
24 O
25 P
26 Q
27 R
28 S
29 T
30 U
31 V
32 W
33 X
34 Y
35 Z
36 -
37 .
38 Space
39 $
40 /
41 +
42 %
43 ($)
44 (%)
45 (/)
46 (+)
- * Start/Stop