打印
[51单片机]

条形码编码之Code128、EAN128

[复制链接]
2470|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李香兰|  楼主 | 2015-8-20 21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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编码表





相关帖子

沙发
李香兰|  楼主 | 2015-8-20 21:05 | 只看该作者
IDCode128ACode128BCode128CBandCode编码值
0SP SP0212222bbsbbssbbss
1!!1222122bbssbbsbbss
2""2222221bbssbbssbbs
3##3121223bssbssbbsss
4$$4121322bssbsssbbss
5%%5131222bsssbssbbss
6&&6122213bssbbssbsss
7''7122312bssbbsssbss
8((8132212bsssbbssbss
9))9221213bbssbssbsss
10**10221312bbssbsssbss
11++11231212bbsssbssbss
12,,12112232bsbbssbbbss
13--13122132bssbbsbbbss
14..14122231bssbbssbbbs
15//15113222bsbbbssbbss
160016123122bssbbbsbbss
171117123221bssbbbssbbs
182218223211bbssbbbssbs
193319221132bbssbsbbbss
204420221231bbssbssbbbs
215521213212bbsbbbssbss
226622223112bbssbbbsbss
237723312131bbbsbbsbbbs
248824311222bbbsbssbbss
259925321122bbbssbsbbss
26::26321221bbbssbssbbs
27;;27312212bbbsbbssbss
28<<28322112bbbssbbsbss
29==29322211bbbssbbssbs
30>>30212123bbsbbsbbsss
31??31212321bbsbbsssbbs
32@@32232121bbsssbbsbbs
33AA33111323bsbsssbbsss
34BB34131123bsssbsbbsss
35CC35131321bsssbsssbbs
36DD36112313bsbbsssbsss
37EE37132113bsssbbsbsss
38FF38132311bsssbbsssbs
39GG39211313bbsbsssbsss
40HH40231113bbsssbsbsss
41II41231311bbsssbsssbs
42JJ42112133bsbbsbbbsss
43KK43112331bsbbsssbbbs
44LL44132131bsssbbsbbbs
45MM45113123bsbbbsbbsss
46NN46113321bsbbbsssbbs
47OO47133121bsssbbbsbbs
48PP48313121bbbsbbbsbbs
49QQ49211331bbsbsssbbbs
50RR50231131bbsssbsbbbs
51SS51213113bbsbbbsbsss
52TT52213311bbsbbbsssbs
53UU53213131bbsbbbsbbbs
54VV54311123bbbsbsbbsss
55WW55311321bbbsbsssbbs
56XX56331121bbbsssbsbbs
57YY57312113bbbsbbsbsss
58ZZ58312311bbbsbbsssbs
59[[59332111bbbsssbbsbs
60\\60314111bbbsbbbbsbs
61]]61221411bbssbssssbs
62^^62431111bbbbsssbsbs
63__63111224bsbssbbssss
64NUL`64111422bsbssssbbss
65SOHa65121124bssbsbbssss
66STXb66121421bssbssssbbs
67ETXc67141122bssssbsbbss
68EOTd68141221bssssbssbbs
69ENQe69112214bsbbssbssss
70ACKf70112412bsbbssssbss
71BELg71122114bssbbsbssss
72BSh72122411bssbbssssbs
73HTi73142112bssssbbsbss
74LFj74142211bssssbbssbs
75VTk75241211bbssssbssbs
76FFI76221114bbssbsbssss
77CRm77413111bbbbsbbbsbs
78SOn78241112bbssssbsbss
79SIo79134111bsssbbbbsbs
80DLEp80111242bsbssbbbbss
81DC1q81121142bssbsbbbbss
82DC2r82121241bssbssbbbbs
83DC3s83114212bsbbbbssbss
84DC4t84124112bssbbbbsbss
85NAKu85124211bssbbbbssbs
86SYNv86411212bbbbsbssbss
87ETBw87421112bbbbssbsbss
88CANx88421211bbbbssbssbs
89EMy89212141bbsbbsbbbbs
90SUBz90214121bbsbbbbsbbs
91ESC{91412121bbbbsbbsbbs
92FS|92111143bsbsbbbbsss
93GS}93111341bsbsssbbbbs
94RS~94131141bsssbsbbbbs
95USDEL95114113bsbbbbsbsss
96FNC3FNC396114311bsbbbbsssbs
97FNC2FNC297411113bbbbsbsbsss
98SHIFTSHIFT98411311bbbbsbsssbs
99CODECCODEC99113141bsbbbsbbbbs
100CODEBFNC4CODEB114131bsbbbbsbbbs
101FNC4CODEACODEA311141bbbsbsbbbbs
102FNC1FNC1FNC1411131bbbbsbsbbbs
103StartAStartAStartA211412bbsbssssbss
104StartBStartBStartB211214bbsbssbssss
105StartCStartCStartC211232bbsbssbbbss
106StopStopStop2331112bbsssbbbsbsbb


使用特权

评论回复
板凳
李香兰|  楼主 | 2015-8-20 21:05 | 只看该作者
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



Code 128 條碼
Code 128 編碼方式是屬於比較複雜的一種條碼,應用起來比較有彈性,在1981年開始流行起來。
Code 128 條碼主要特性有:
1.有A,B,C三種不同的編碼型態,可以提供128個標準的ASCII code字元.
   包括: 0~9的數字,英文大小寫,各種特殊符號,以及控制碼。
2.有一檢查碼,可自由決定是否要列印。
3.在可藉由A、B、C三種不同編碼型態交叉使用,以縮短條碼的長度。
4.可允許由左至右,或由右至左,雙向掃瞄。

Code 128 條碼基本結構
圖一
Code 128 條碼內容主要有四個部份:
1.起始碼 (start code)
2.資料碼 (data code)
3.結束碼 (end code)
4.檢查碼 (check code):可有可無

使用特权

评论回复
地板
李香兰|  楼主 | 2015-8-20 21:06 | 只看该作者
Code 128 條碼字元編碼方式
Code 128 每一字元條碼結構由3條Bar及3條Space所組成.又細分為11等分,組成不同粗細比。字元最粗的線條最高可達最細的4倍。
例如:起始碼Code A
11010000100       條碼裡頭space最粗是最細線條的4倍
再舉個例子,我們以B型態中的特殊符號'/'說明
10111001100      最粗的bar是最細bar的3倍

起始碼與結束碼編碼方式
Code 128 條碼有A、B、C三種不同型態編碼的字元表,要選擇哪一種字元表取決於特殊控制碼Code A,Code B與Code C。
起始碼也有三種編碼型態:Code A,Code B,Code C
當起始碼為Code A時,後面的條碼資料則選擇A型態字元表編碼邏輯。
而起始碼為Code B時,後面的條碼資料則選擇B型態字元表編碼邏輯。
若全部為數字時可選擇Code C型態字元表編碼邏輯,以縮短條碼的列印長度。
每一類型的字元表內也有Code A,Code B,Code C,但條碼編碼邏輯與起始碼不同,請參閱【Code 128 條碼字元表】
接下來我們看三種起始碼的條碼編碼方式
Code A條碼資料為11010000100,條碼圖案為 ,相對值為103。
Code B條碼資料為11010010000,條碼圖案為 ,相對值為104。
Code C條碼資料為11010011100,條碼圖案為 ,相對值為105。
結束碼編碼方式
A,B,C三種不同型態編碼方式,結束碼均固定為1100011101011,條碼圖案為,相對值為106。

Code 128 條碼三種字元表型態編碼差異說明
1.A 型態字元表,支援的資料碼包含:標準ASCII=0 ~ ASCII=95等字元及控制碼部份,以及7個Code 128 條碼專屬字元,共計103個字元,請參閱code 128 條碼字元表中的A型態。(ASCII=0~31為控制碼,ASCII=32~95為可見字元。)
2.B型態字元表包含:標準ASCII=32 ~ ASCII=127等字元,以及7個Code 128 條碼專屬字元,共計103個字元,請參閱code 128 條碼字元表中的B型態。
3.C型態字元表主要支援數字00~99的編碼使用,若使用長數字的資料時,可以用C型態編碼,可縮短條碼列印的長度。數字00~99加上3個特殊控制字元,總共103個字元。
特殊控制字元說明
1.Code A:表示後面的字元編碼型態要使用A table。
2.Code B:表示後面的字元編碼型態要使用B table。
3.Code C:表示後面的字元編碼型態要使用C table。
4.Shift:等於Shift鍵的作用。
5.FNC 1:等於F1鍵的作用。
6.FNC 2:等於F2鍵的作用。
7.FNC 3:等於F3鍵的作用。
8.FNC 3:等於F4鍵的作用。

使用特权

评论回复
5
李香兰|  楼主 | 2015-8-20 21:06 | 只看该作者
Code 128 條碼應用實例說明

1.Code C型態應用時機

我們舉以下例子,如果資料內如為數字0123456789,使用Code A及Code C條碼列印長度的差異,Code C條碼列印出來的長度較短。

Code A型態時的編碼如下圖





Code C型態時的編碼如下圖





2.Code A及Code C型態混合應用時機



前面4個字元ABCB使用A table編碼,所以起始碼以Code A開始,然後在數字0123456789之前加上Code C特殊控制碼,則後面的數字會轉換成C table編碼,如此就可以縮短條碼列印的長度。

Code 128 條碼檢查碼的計算方式

我們以起始碼Code B編碼的Andy’s條碼來說明



步驟一.計算出S值

S=103+(d1*1)+(d2*2)+ (d3*3)+ (d4*4)+ …

d1:表示資料第1個字元

因為起始碼為Code B,所以字元相對值使用B table。

則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代入B table找到相對值的字元為N,即檢查碼為N。

提醒:

若資料碼裡有Code A,Code B,Code C型態轉換,檢查碼代入的依據均以起始碼相對應的字元組型態為主。
起始符(Unicode=00CC):ì

终止符(Unicode=00CE):Î

value95(Unicode=00C3):Ã

value96(Unicode=00C4):Ä

value97(Unicode=00C5):Å

value98(Unicode=00C6):Æ

value99(Unicode=00C7):Ç

value100(Unicode=00C8):è

value101(Unicode=00C9):é

value102(Unicode=00CA):ê

使用特权

评论回复
6
mnh12232| | 2016-11-1 12:42 | 只看该作者
非常详细,对绘制显示条形码  生成代码帮助很大

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

248

帖子

0

粉丝