Code128编码.docx
《Code128编码.docx》由会员分享,可在线阅读,更多相关《Code128编码.docx(14页珍藏版)》请在冰豆网上搜索。
Code128编码
Code128码于1981年推出,是一种长度可变、连续性的字母数字条码。
与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大。
Code128特性:
1、具有A、B、C三种不同的编码类型,可提供标准ASCII中128个字元的编码使用;
2、允许双向扫描;
3、可自行决定是否加上检验位;
4、条码长度可调,但包括开始位和结束位在内,不可超过232个字元;
5、同一个128码,可以由A、B、C三种不同编码规则互换,既可扩大字元选择的范围,也可缩短编码的长度。
Code128各编码方式的编码范围:
1、Code128A:
标准数字和字母,控制符,特殊字符;
2、Code128B:
标准数字和字母,小写字母,特殊字符;
3、Code128C/EAN128:
[00]-[99]的数字对集合,共100个,即只能表示偶数位长度的数字。
Code128编码规则:
开始位 +[FNC1(为EAN128码时加)] +数据位 +检验位 +结束位
Code128检验位计算:
(开始位对应的ID值 +每位数据在整个数据中的位置×每位数据对应的ID值)%103
Code128编码表:
ID
Code128A
Code128B
Code128C
BandCode
编码值
0
SP
SP
0
212222
bbsbbssbbss
1
!
!
1
222122
bbssbbsbbss
2
"
"
2
222221
bbssbbssbbs
3
#
#
3
121223
bssbssbbsss
4
$
$
4
121322
bssbsssbbss
5
%
%
5
131222
bsssbssbbss
6
&
&
6
122213
bssbbssbsss
7
'
'
7
122312
bssbbsssbss
8
(
(
8
132212
bsssbbssbss
9
)
)
9
221213
bbssbssbsss
10
*
*
10
221312
bbssbsssbss
11
+
+
11
231212
bbsssbssbss
12
12
112232
bsbbssbbbss
13
-
-
13
122132
bssbbsbbbss
14
.
.
14
122231
bssbbssbbbs
15
/
/
15
113222
bsbbbssbbss
16
0
0
16
123122
bssbbbsbbss
17
1
1
17
123221
bssbbbssbbs
18
2
2
18
223211
bbssbbbssbs
19
3
3
19
221132
bbssbsbbbss
20
4
4
20
221231
bbssbssbbbs
21
5
5
21
213212
bbsbbbssbss
22
6
6
22
223112
bbssbbbsbss
23
7
7
23
312131
bbbsbbsbbbs
24
8
8
24
311222
bbbsbssbbss
25
9
9
25
321122
bbbssbsbbss
26
:
:
26
321221
bbbssbssbbs
27
;
;
27
312212
bbbsbbssbss
28
<
<
28
322112
bbbssbbsbss
29
=
=
29
322211
bbbssbbssbs
30
>
>
30
212123
bbsbbsbbsss
31
?
?
31
212321
bbsbbsssbbs
32
@
@
32
232121
bbsssbbsbbs
33
A
A
33
111323
bsbsssbbsss
34
B
B
34
131123
bsssbsbbsss
35
C
C
35
131321
bsssbsssbbs
36
D
D
36
112313
bsbbsssbsss
37
E
E
37
132113
bsssbbsbsss
38
F
F
38
132311
bsssbbsssbs
39
G
G
39
211313
bbsbsssbsss
40
H
H
40
231113
bbsssbsbsss
41
I
I
41
231311
bbsssbsssbs
42
J
J
42
112133
bsbbsbbbsss
43
K
K
43
112331
bsbbsssbbbs
44
L
L
44
132131
bsssbbsbbbs
45
M
M
45
113123
bsbbbsbbsss
46
N
N
46
113321
bsbbbsssbbs
47
O
O
47
133121
bsssbbbsbbs
48
P
P
48
313121
bbbsbbbsbbs
49
Q
Q
49
211331
bbsbsssbbbs
50
R
R
50
231131
bbsssbsbbbs
51
S
S
51
213113
bbsbbbsbsss
52
T
T
52
213311
bbsbbbsssbs
53
U
U
53
213131
bbsbbbsbbbs
54
V
V
54
311123
bbbsbsbbsss
55
W
W
55
311321
bbbsbsssbbs
56
X
X
56
331121
bbbsssbsbbs
57
Y
Y
57
312113
bbbsbbsbsss
58
Z
Z
58
312311
bbbsbbsssbs
59
[
[
59
332111
bbbsssbbsbs
60
\
\
60
314111
bbbsbbbbsbs
61
]
]
61
221411
bbssbssssbs
62
^
^
62
431111
bbbbsssbsbs
63
_
_
63
111224
bsbssbbssss
64
NUL
`
64
111422
bsbssssbbss
65
SOH
a
65
121124
bssbsbbssss
66
STX
b
66
121421
bssbssssbbs
67
ETX
c
67
141122
bssssbsbbss
68
EOT
d
68
141221
bssssbssbbs
69
ENQ
e
69
112214
bsbbssbssss
70
ACK
f
70
112412
bsbbssssbss
71
BEL
g
71
122114
bssbbsbssss
72
BS
h
72
122411
bssbbssssbs
73
HT
i
73
142112
bssssbbsbss
74
LF
j
74
142211
bssssbbssbs
75
VT
k
75
241211
bbssssbssbs
76
FF
I
76
221114
bbssbsbssss
77
CR
m
77
413111
bbbbsbbbsbs
78
SO
n
78
241112
bbssssbsbss
79
SI
o
79
134111
bsssbbbbsbs
80
DLE
p
80
111242
bsbssbbbbss
81
DC1
q
81
121142
bssbsbbbbss
82
DC2
r
82
121241
bssbssbbbbs
83
DC3
s
83
114212
bsbbbbssbss
84
DC4
t
84
124112
bssbbbbsbss
85
NAK
u
85
124211
bssbbbbssbs
86
SYN
v
86
411212
bbbbsbssbss
87
ETB
w
87
421112
bbbbssbsbss
88
CAN
x
88
421211
bbbbssbssbs
89
EM
y
89
212141
bbsbbsbbbbs
90
SUB
z
90
214121
bbsbbbbsbbs
91
ESC
{
91
412121
bbbbsbbsbbs
92
FS
|
92
111143
bsbsbbbbsss
93
GS
}
93
111341
bsbsssbbbbs
94
RS
~
94
131141
bsssbsbbbbs
95
US
DEL
95
114113
bsbbbbsbsss
96
FNC3
FNC3
96
114311
bsbbbbsssbs
97
FNC2
FNC2
97
411113
bbbbsbsbsss
98
SHIFT
SHIFT
98
411311
bbbbsbsssbs
99
CODEC
CODEC
99
113141
bsbbbsbbbbs
100
CODEB
FNC4
CODEB
114131
bsbbbbsbbbs
101
FNC4
CODEA
CODEA
311141
bbbsbsbbbbs
102
FNC1
FNC1
FNC1
411131
bbbbsbsbbbs
103
StartA
StartA
StartA
211412
bbsbssssbss
104
StartB
StartB
StartB
211214
bbsbssbssss
105
StartC
StartC
StartC
211232
bbsbssbbbss
106
Stop
Stop
Stop
2331112
bbsssbbbsbsbb
Code128编码示例:
以 95270078 为例
Code128A,开始位对应的ID为103,第1位数据9对应的ID为25,第2位数据5对应的ID为21,依此类推,可以计算检验位=(103+1*25+2*21+3*18+4*23+5*16+6*16+7*23+8*24)%103=21,即检验位的ID为21。
对照编码表,95270078编码表示为:
开始位StartA(bbsbssssbss)+数据位[9(bbbssbsbbss)+ 5(bbsbbbssbss)+ 2(bbssbbbssbs)+ 7(bbbsbbsbbbs)+ 0(bssbbbsbbss)+ 0(bssbbbsbbss)+ 7(bbbsbbsbbbs)+ 8(bbbsbssbbss)]+ 检验位21(bbsbbbssbss)+ 结束位Stop(bbsssbbbsbsbb),即:
bbsbssssbssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbsbbbssbssbbsssbbbsbsbb。
若要打印,只需将b用黑色线标出,s用白色线标出,一个简单的条形码生成程序就完成了!
128B与128A类似,128C只能对长度为偶数的数字串编码,每两个数字为一位,所以输出的信息压缩了一半,打印的条形码因此也就较短。
接上例,第1位数据95对应ID为95,第2位数据27对应ID为27,第3位数据00对应ID为0,第4位数据78对应ID为78,所以检验位=(105+1*95+2*27+3*0+4*78)%103=51
EAN128与Code128C相同,只是在开始位后加多一个控制位FNC1(ID为102),同时将FNC1做为第1位数据加入到检验位的计算。
各种方式的编码结果罗列如下:
编码方式
开始位
FNC1
数据位
检验位
结束位
编码结果
Code128A
StartA
无
9+5+2+7+0+0+7+8
(103+1*25+2*21+3*18+4*23+5*16+6*16+7*23+8*24)%103=21
Stop
bbsbssssbssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbsbbbssbssbbsssbbbsbsbb
Code128B
StartB
无
9+5+2+7+0+0+7+8
(104+1*25+2*21+3*18+4*23+5*16+6*16+7*23+8*24)%103=22
Stop
bbsbssbssssbbbssbsbbssbbsbbbssbssbbssbbbssbsbbbsbbsbbbsbssbbbsbbssbssbbbsbbssbbbsbbsbbbsbbbsbssbbssbbssbbbsbssbbsssbbbsbsbb
Code128C
StartC
无
95+27+00+78
(105+1*95+2*27+3*0+4*78)%103=51
Stop
bbsbssbbbssbsbbbbsbsssbbbsbbssbssbbsbbssbbssbbssssbsbssbbsbbbsbsssbbsssbbbsbsbb
EAN128
StartC
FNC1
95+27+00+78
(105+1*102+2*95+3*27+4*0+5*78)%103=44
Stop
bbsbssbbbssbbbbsbsbbbsbsbbbbsbsssbbbsbbssbssbbsbbssbbssbbssssbsbssbsssbbsbbbsbbsssbbbsbsbb
Code128條碼
Code128編碼方式是屬於比較複雜的一種條碼,應用起來比較有彈性,在1981年開始流行起來。
Code128條碼主要特性有:
1.有A,B,C三種不同的編碼型態,可以提供128個標準的ASCIIcode字元.
包括:
0~9的數字,英文大小寫,各種特殊符號,以及控制碼。
2.有一檢查碼,可自由決定是否要列印。
3.在可藉由A、B、C三種不同編碼型態交叉使用,以縮短條碼的長度。
4.可允許由左至右,或由右至左,雙向掃瞄。
Code128條碼基本結構
圖一
Code128條碼內容主要有四個部份:
1.起始碼(startcode)
2.資料碼(datacode)
3.結束碼(endcode)
4.檢查碼(checkcode):
可有可無
Code128條碼字元編碼方式
Code128每一字元條碼結構由3條Bar及3條Space所組成.又細分為11等分,組成不同粗細比。
字元最粗的線條最高可達最細的4倍。
例如:
起始碼CodeA
11010000100 條碼裡頭space最粗是最細線條的4倍
再舉個例子,我們以B型態中的特殊符號'/'說明
10111001100 最粗的bar是最細bar的3倍
起始碼與結束碼編碼方式
Code128條碼有A、B、C三種不同型態編碼的字元表,要選擇哪一種字元表取決於特殊控制碼CodeA,CodeB與CodeC。
起始碼也有三種編碼型態:
CodeA,CodeB,CodeC
當起始碼為CodeA時,後面的條碼資料則選擇A型態字元表編碼邏輯。
而起始碼為CodeB時,後面的條碼資料則選擇B型態字元表編碼邏輯。
若全部為數字時可選擇CodeC型態字元表編碼邏輯,以縮短條碼的列印長度。
每一類型的字元表內也有CodeA,CodeB,CodeC,但條碼編碼邏輯與起始碼不同,請參閱【Code128條碼字元表】
接下來我們看三種起始碼的條碼編碼方式
CodeA條碼資料為11010000100,條碼圖案為
,相對值為103。
CodeB條碼資料為11010010000,條碼圖案為
,相對值為104。
CodeC條碼資料為11010011100,條碼圖案為
,相對值為105。
結束碼編碼方式
A,B,C三種不同型態編碼方式,結束碼均固定為1100011101011,條碼圖案為
,相對值為106。
Code128條碼三種字元表型態編碼差異說明
1.A型態字元表,支援的資料碼包含:
標準ASCII=0~ASCII=95等字元及控制碼部份,以及7個Code128條碼專屬字元,共計103個字元,請參閱code128條碼字元表中的A型態。
(ASCII=0~31為控制碼,ASCII=32~95為可見字元。
)
2.B型態字元表包含:
標準ASCII=32~ASCII=127等字元,以及7個Code128條碼專屬字元,共計103個字元,請參閱code128條碼字元表中的B型態。
3.C型態字元表主要支援數字00~99的編碼使用,若使用長數字的資料時,可以用C型態編碼,可縮短條碼列印的長度。
數字00~99加上3個特殊控制字元,總共103個字元。
特殊控制字元說明
1.CodeA:
表示後面的字元編碼型態要使用Atable。
2.CodeB:
表示後面的字元編碼型態要使用Btable。
3.CodeC:
表示後面的字元編碼型態要使用Ctable。
4.Shift:
等於Shift鍵的作用。
5.FNC1:
等於F1鍵的作用。
6.FNC2:
等於F2鍵的作用。
7.FNC3:
等於F3鍵的作用。
8.FNC3:
等於F4鍵的作用。
Code128條碼應用實例說明
1.CodeC型態應用時機
我們舉以下例子,如果資料內如為數字0123456789,使用CodeA及CodeC條碼列印長度的差異,CodeC條碼列印出來的長度較短。
CodeA型態時的編碼如下圖
CodeC型態時的編碼如下圖
2.CodeA及CodeC型態混合應用時機
前面4個字元ABCB使用Atable編碼,所以起始碼以CodeA開始,然後在數字0123456789之前加上CodeC特殊控制碼,則後面的數字會轉換成Ctable編碼,如此就可以縮短條碼列印的長度。
Code128條碼檢查碼的計算方式
我們以起始碼CodeB編碼的Andy’s條碼來說明
步驟一.計算出S值
S=103+(d1*1)+(d2*2)+(d3*3)+(d4*4)+…
d1:
表示資料第1個字元
因為起始碼為CodeB,所以字元相對值使用Btable。
則S=103+(33*1)+(78*2)+(68*3)+(89*4)+(7*5)+(83*6)=103+33+156+204+356+35+498=1385
步驟二.將S值除以103,取其餘數M值。
1385/103=13…46?
取餘數M=46
步驟三.將M值46代入Btable找到相對值的字元為N,即檢查碼為N。