Kód 128 - Code 128

Image
Svájci postai vonalkód, amely "RI 476 394 652 CH" kódolást tartalmaz a 128-B kódban

A 128-as kód egy nagy sűrűségű lineáris vonalkód szimbólum, amelyet az ISO/IEC 15417: 2007 határoz meg. Ezt alkalmazzák alfanumerikus vagy numerikus csak vonalkódok . Kódolhatja az ASCII mind a 128 karakterét, és egy kiterjesztési szimbólum (FNC4) segítségével az ISO/IEC 8859-1 szabványban meghatározott latin-1 karaktereket . Általában kompaktabb vonalkódokat eredményez, mint más módszerek, például a 39-es kód , különösen akkor, ha a szövegek többnyire számjegyeket tartalmaznak.

A GS1-128 (korábbi nevén UCC/EAN-128) a 128-as kód részhalmaza, és világszerte széles körben használják a hajózási és csomagolási iparban, mint az azonosító kódot a szállítói lánc konténereinek és raklapjainak szintjéhez.

Leírás

"Kód 128 szakaszok"
Vonalkód vázlata (128B kód).
1 : csendes zóna, 2 : kezdőkód, 3 : adat, 4 : ellenőrző összeg, 5 : leállítási kód

A Code 128 vonalkódnak hét szakasza van:

  1. Csendes zóna
  2. Start szimbólum
  3. Kódolt adatok
  4. Ellenőrző szimbólum (kötelező)
  5. Stop szimbólum
  6. Végső sáv (gyakran a stop szimbólum részének tekintik)
  7. Csendes zóna

A csekk szimbólum az összes szimbólum súlyozott összegéből ( modulo 103) számítódik ki .

Altípusok

A 128 -as kód 108 szimbólumot tartalmaz: 103 adatszimbólumot, 3 kezdő szimbólumot és 2 stop szimbólumot. Minden szimbólum három fekete sávból és három különböző szélességű fehér mezőből áll. Minden szélesség az alap "modul" többszöröse. Minden sáv és szóköz 1–4 modul széles, és a szimbólumok rögzített szélességűek: a három fekete és három fehér sáv szélességének összege 11 modul.

A leállítási minta két átfedő szimbólumból áll, és négy sávból áll. A leállítási minta lehetővé teszi a kétirányú szkennelést. Amikor a stop mintát balról jobbra olvassa (a szokásos esetben), a stop szimbólum (amelyet egy 2 modulos sáv követ) felismeri. Amikor a leállítási mintát jobbról balra olvassa, a fordított stop szimbólum (amelyet 2 modulos sáv követ) felismerhető. Ha a szkenner látja a megfordított stop szimbólumot, akkor tudja, hogy ki kell hagynia a 2 modulos sávot, és a vonalkód többi részét fordítva kell elolvasnia.

Neve ellenére a 128 -as kód nem tartalmaz 128 különböző szimbólumot, így nem képviselhet közvetlenül 128 kódpontot. Mind a 128 ASCII érték ábrázolásához három kódkészlet (A, B, C) között mozog. Az A és B kódkészlet együttesen mind a 128 ASCII karaktert lefedi. A C kódkészlet a számjegyek hatékony kódolására szolgál. A kezdeti részhalmaz kiválasztása a megfelelő indítási szimbólum használatával történik. Minden egyes kódkészleten belül a 103 adatkódpont egy része a másik két kódkészlet egyikére való áttérésre van fenntartva. A váltások az A és B kódkészletek 98 és 99 kódpontjaival, az A és C kódkészletek 100 -as és a B és C kódkészletek 101 -es kódváltásával történnek):

  • 128A (A kódkészlet) - ASCII karakterek 00–95 (0–9, A – Z és vezérlőkódok), speciális karakterek és FNC 1–4
  • 128B (B kódkészlet) - ASCII karakterek 32–127 (0–9, A – Z, a – z), speciális karakterek és FNC 1–4
  • 128C (C kódkészlet) - 00–99 (két számjegyet kódol egyetlen kódponttal) és FNC1

A csendes zóna minimális szélessége a 128 -as kódtól balra és jobbra 10x, ahol x a modul minimális szélessége. Kötelező a vonalkód bal és jobb oldalán.

Start/stop és kódolt adatok

A vonalkód minden szimbóluma három sávból és három szóközből áll. Minden rúd vagy szóköz 1, 2, 3 vagy 4 egység széles, a rudak szélességének összegének párosnak kell lennie (4, 6 vagy 8 egység), a szóközök szélességének összege pedig páratlan (3, 5 vagy 7 egység), és szimbólumonként összesen 11 egység. Például a "0" ASCII karakter kódolása 10011101100 néven tekinthető, ahol az 1 -es sorozat egy sáv, a 0 -ás pedig egy szóköz. Egyetlen 1 lenne a vékony vonal a vonalkódban. Három 1 -es sorrendben (111) háromszor vastagabb rudat jelöl, mint egyetlen 1 bar.

108 lehetséges 11 egység széles szimbólum létezik, és a kód az összes lehetséges szimbólumot használja. A szimbólumok közül kettő a stop (vonalkód vége), a stop és a reverse stop jelzésére szolgál. A két stop szimbólum azért különleges, mert mindig 2 egységnyi sáv követi őket, és 13 egység hosszú leállási mintát képeznek. A leállítási minta olvasása balról jobbra a stop szimbólum (ezt követi a 2 egységnyi sáv), és a stop minta jobbról balra történő olvasása a fordított stop szimbólum (amelyet 2 egységnyi sáv követ).

Ellenőrizze a számjegyek számítását

Az ellenőrző számjegy súlyozott modulo-103 ellenőrző összeg. Kiszámításához úgy kell kiszámítani, hogy a kezdő kód „értékét” összeadjuk az egyes szimbólumok „értékének” szorzataival, megszorozva a vonalkód karakterláncban elfoglalt helyével. Az indítási szimbólum és az első kódolt jel abban a helyzetben, 1. A termékek összege ezután redukáljuk modulo 103. A fennmaradó alakítjuk, majd vissza az egyik a 103 nem-határoló szimbólumok (utasításait követve alább ) és a mellékelt a vonalkód , közvetlenül a stop szimbólum előtt.

Például a következő táblázatban a PJJ123C alfanumerikus karakterlánchoz kiszámítjuk a 128 -as kód A változatának ellenőrző összegét:

Kód Érték Pozíció Érték ×
pozíció
A kezdőkód 103 1 103
P 48 1 48
J 42 2 84
J 42 3 126
1 17 4 68
2 18 5 90
3 19 6 114
C 35 7 245
Összeg 878
Maradék mod 103 54

A csekk szimbólum kiszámítása érdekében a shift és a kódváltó szimbólumokat ugyanúgy kell kezelni, mint a vonalkód bármely más szimbólumát. Az ellenőrző összeget a szimbólumértékek alapján számítják ki, függetlenül attól, hogy az adott pillanatban melyik kódkészlet aktív. Például a C kódkészlet "33" értéke és a B kódkészlet "A" értéke egyaránt a 128 -as kód 33 -as értéke, és az ellenőrző számjegyet a szimbólum vonalkódon belüli pozíciójának 33 -szorosa alapján számítják ki. .

Az FNC4 használata magas (128–255) karakterek kódolására

Az FNC4 speciális szimbólum ("Funkció 4"), amely csak az A és B kódkészletekben található, használható a Latin-1 ( ISO-8859-1 ) karakterek kódolására a Code 128 vonalkódban. A szolgáltatás nem széles körben támogatott, és nem használható a GS1-128-ban. Ha egyetlen FNC4 van jelen egy karakterláncban, akkor a következő szimbólum a szokásos módon ASCII -re konvertálódik, majd 128 hozzáadódik az ASCII -értékhez. (Ha a következő szimbólum eltolás, akkor egy második szimbólumot használunk a karakter megszerzésére.) Ha két FNC4 -et használnak egymás után, akkor az összes következő karaktert úgy kell kezelni, hogy a karakterlánc vagy egy másik pár FNC4 . A kettős FNC4 -ek között egyetlen FNC4 -et használnak annak jelzésére, hogy a következő karakter szabványos ASCII lesz .

Vonalkód szélessége

A Code128 6 szimbólumhoz 6 váltakozó sáv és szóköz kombinációját adja meg (mindegyikből 3). Így minden szimbólum egy sávval kezdődik, és szóközzel végződik. Vonalkód -betűtípusok esetén az utolsó sávot általában a stop szimbólummal kombinálják, hogy szélesebb megállási mintát hozzanak létre. A következő táblázat részletezi az egyes oszlopokhoz tartozó szélességeket és az egyes szimbólumok szóközét. Az egyes oszlopok vagy terek szélessége 1, 2, 3 vagy 4 egység (modul) lehet. A fenti példát használva egy „A” -t 10100011000 mintával, vagy 111323 szélességgel ábrázolunk az alábbi táblázatokban.

A szélességek értékét úgy számítják ki, hogy megszámolják a minta minden egyes futásának hosszát, majd 0 -t a mintában, balról indulva. Mindig 6 futás lesz, és e 6 futás hossza képezi a Szélesség értéket. Például a 10100011000 minta használatával a futáshossz 1 (1. számjegy), 1 (0. számjegy), 1 (1. számjegy), 3 (0. számjegy), 2 (1. számjegy), 3 (0. számjegy). Ha csak az egyes futások hosszát jelenti, akkor 1, 1, 1, 3, 2, 3 lesz, ezáltal 111323 szélességi értéket kap.

128 -as kód
Érték Hexadecimális érték 128A 128B 128C Betűtípus elhelyezése
(gyakori/nem gyakori/vonalkódok)
Bar/Space
Kód Latin-1 Minta Szélességek
0 00 tér tér 00 32 vagy 194 vagy 207 /212 /252 vagy  vagy Ï / Ô / ü 11011001100 212222
1 01 ! ! 01 33 ! 11001101100 222122
2 02 " " 02 34 " 11001100110 222221
3 03 # # 03 35 # 10010011000 121223
4 04 $ $ 04 36 $ 10010001100 121322
5 05 % % 05 37 % 10001001100 131222
6 06 & & 06 38 & 10011001000 122213
7 07 ' ' 07 39 ' 10011000100 122312
8 08 ( ( 08 40 ( 10001100100 132212
9 09 ) ) 09 41 ) 11001001000 221213
10 0a * * 10 42 * 11001000100 221312
11 0b + + 11 43 + 11000100100 231212
12 0c , , 12 44 , 10110011100 112232
13 0d - - 13 45 - 10011011100 122132
14 0e . . 14 46 . 10011001110 122231
15 0f / / 15 47 / 10111001100 113222
16 10 0 0 16 48 0 10011101100 123122
17 11 1 1 17 49 1 10011100110 123221
18 12 2 2 18 50 2 11001110010 223211
19 13 3 3 19 51 3 11001011100 221132
20 14 4 4 20 52 4 11001001110 221231
21 15 5 5 21 53 5 11011100100 213212
22 16 6 6 22 54 6 11001110100 223112
23 17 7 7 23 55 7 11101101110 312131
24 18 8 8 24 56 8 11101001100 311222
25 19 9 9 25 57 9 11100101100 321122
26 1a : : 26 58 : 11100100110 321221
27 1b ; ; 27 59 ; 11101100100 312212
28 1c < < 28 60 < 11100110100 322112
29 1d = = 29 61 = 11100110010 322211
30 1e > > 30 62 > 11011011000 212123
31 1f ? ? 31 63 ? 11011000110 212321
32 20 @ @ 32 64 @ 11000110110 232121
33 21 A A 33 65 A 10100011000 111323
34 22 B B 34 66 B 10001011000 131123
35 23 C C 35 67 C 10001000110 131321
36 24 D D 36 68 D 10110001000 112313
37 25 E E 37 69 E 10001101000 132113
38 26 F F 38 70 F 10001100010 132311
39 27 G G 39 71 G 11010001000 211313
40 28 H H 40 72 H 11000101000 231113
41 29 én én 41 73 én 11000100010 231311
42 2a J J 42 74 J 10110111000 112133
43 2b K K 43 75 K 10110001110 112331
44 2c L L 44 76 L 10001101110 132131
45 2d M M 45 77 M 10111011000 113123
46 2e N N 46 78 N 10111000110 113321
47 2f O O 47 79 O 10001110110 133121
48 30 P P 48 80 P 11101110110 313121
49 31 Q Q 49 81 Q 11010001110 211331
50 32 R R 50 82 R 11000101110 231131
51 33 S S 51 83 S 11011101000 213113
52 34 T T 52 84 T 11011100010 213311
53 35 U U 53 85 U 11011101110 213131
54 36 V V 54 86 V 11101011000 311123
55 37 W W 55 87 W 11101000110 311321
56 38 x x 56 88 x 11100010110 331121
57 39 Y Y 57 89 Y 11101101000 312113
58 3a Z Z 58 90 Z 11101100010 312311
59 3b [ [ 59 91 [ 11100011010 332111
60 3c \ \ 60 92 \ 11101111010 314111
61 3d ] ] 61 93 ] 11001000010 221411
62 3e ^ ^ 62 94 ^ 11110001010 431111
63 3f _ _ 63 95 _ 10100110000 111224
64 40 NUL ` 64 96 ` 10100001100 111422
65 41 SOH a 65 97 a 10010110000 121124
66 42 STX b 66 98 b 10010000110 121421
67 43 ETX c 67 99 c 10000101100 141122
68 44 EOT d 68 100 d 10000100110 141221
69 45 ENQ e 69 101 e 10110010000 112214
70 46 ACK f 70 102 f 10110000100 112412
71 47 BEL g 71 103 g 10011010000 122114
72 48 BS h 72 104 h 10011000010 122411
73 49 HT én 73 105 én 10000110100 142112
74 4a LF j 74 106 j 10000110010 142211
75 4b VT k 75 107 k 11000010010 241211
76 4c FF l 76 108 l 11001010000 221114
77 4d CR m 77 109 m 11110111010 413111
78 4e ÍGY n 78 110 n 11000010100 241112
79 4f SI o 79 111 o 10001111010 134111
80 50 DLE o 80 112 o 10100111100 111242
81 51 DC1 q 81 113 q 10010111100 121142
82 52 DC2 r 82 114 r 10010011110 121241
83 53 DC3 s 83 115 s 10111100100 114212
84 54 DC4 t 84 116 t 10011110100 124112
85 55 NAK u 85 117 u 10011110010 124211
86 56 SYN v 86 118 v 11110100100 411212
87 57 ETB w 87 119 w 11110010100 421112
88 58 TUD x 88 120 x 11110010010 421211
89 59 EM y 89 121 y 11011011110 212141
90 5a ALATTI z 90 122 z 11011110110 214121
91 5b KILÉPÉS { 91 123 { 11110110110 412121
92 5c FS | 92 124 | 10101111000 111143
93 5d GS } 93 125 } 10100011110 111341
94 5e RS ~ 94 126 ~ 10001011110 131141
95 5f MINKET DEL 95 195 /200 /240 Ã / È / ð 10111101000 114113
96 60 FNC 3 FNC 3 96 196 /201 /241 Ä / É / ñ 10111100010 114311
97 61 FNC 2 FNC 2 97 197 /202 /242 Å / Ê / ò 11110101000 411113
98 62 Shift B A váltás 98 198 /203 /243 Æ / Ë / ó 11110100010 411311
99 63 C kód C kód 99 199 /204 /244 Ç / Ì / ô 10111011110 113141
100 64 B kód FNC 4 B kód 200 /205 /245 È / Í / õ 10111101110 114131
101 65 FNC 4 A kód A kód 201 /206 /246 É / Î / ö 11101011110 311141
102 66 FNC 1 FNC 1 FNC 1 202 /207 /247 Ê / Ï / ÷ 11110101110 411131
103 67 A kezdőkód 203 /208 /248 Ë / Ð / ø 11010000100 211412
104 68 B indító kód 204 /209 /249 Ì / Ñ / ù 11010010000 211214
105 69 C kód indítása 205/210/250 Í / Ò / ú 11010011100 211232
106 6a Álljon meg - - 11000111010 233111
- - Fordított stop - - 11010111000 211133
- - Leállítási minta (7 sáv/szóköz) 206 /211 /251 Î / Ó / û 1100011101011 2331112

Az "A kód", a "B kód" és a "C kód" szimbólumok miatt a következő szimbólumok értelmezése a megfelelő alkód szerint történik (pl. 128A, 128B vagy 128C). A "Shift" szimbólum egyetlen szimbólum értelmezését váltja az A és B alkódok között.

A kódolt ASCII karakter a ténylegesen használt vonalkód-betűtípustól függ. Különösen a 0 -as és 95 -ös érték feletti ASCII -karakterek eltérőek lehetnek a telepített betűtípusban.

Az FNC x kódokat speciális célokra használják. Az FNC1 a vonalkód elején egy GS1-128 vonalkódot jelez , amely az Egységes Kódtanács által kiosztott 2-3 vagy 4 számjegyű alkalmazás-azonosítóval kezdődik , amely a következő számjegyeket magyarázza. Például a 421 alkalmazás-azonosító azt jelzi, hogy az ISO 3166-1 numerikus országkód és a szállítás irányítószáma következik. Így a Fehér Ház amerikai irányítószáma általában "(421) 840 20500" lesz, de valójában " " kódolású[Start C] [FNC1] 42 18 40 20 50 [Code A] 16 [Check symbol 92] [Stop]

Ellenőrizze a számjegyszámítást a fenti irányítószám -példához:

Érték Súly Súly × érték
Kezdje C 105 1 105
FNC1 102 1 102
42 42 2 84
18 18 3 54
40 40 4 160
20 20 5 100
50 50 6 300
A kód 101 7 707
0 16 8 128
Összeg = 1740
1740 Mod 103 = 92

Elérhetőség

A végfelhasználó számára a 128-as kódú vonalkódokat vagy egy külső alkalmazás hozhatja létre a vonalkód képének létrehozásához, vagy egy betűtípus-alapú vonalkód-megoldás. Bármelyik megoldás megköveteli egy alkalmazás vagy egy alkalmazás hozzáadását az ellenőrző számjegy kiszámításához és a vonalkód létrehozásához.

Vonalkód optimalizálása

A C kódkészlet egy kódszimbólumot használ két számjegy ábrázolására, így ha a szöveg csak számjegyeket tartalmaz, általában rövidebb vonalkódokat eredményez. Ha azonban a karakterlánc csak néhány számjegyet tartalmaz, vagy nem számjegyű karakterrel keveredik, nem mindig kompaktabb kódot eredményez, mint az A vagy B kódkészlet. A C kódkészlet használata két számjegyre egy szimbólumot ment, de egy módba kerül -shift szimbólum a készletbe való belépéshez és kilépéshez. Így csak akkor érdemes használni, ha elegendő egymást követő számjegy van. Például az "X00Y" karakterlánc A vagy B kódkészlettel történő kódolásához 7 kódszimbólumra ( [Start B] 56 16 16 57 [checksum] [Stop]) van szükség, míg a "C" kódkészlet használata a "00" kóddal 8 szimbólum hosszú kódot eredményez ( [Start B] 56 [Code C] 00 [Code B] 57 [checksum] [Stop]).

A C kódkészlet használata csak az alábbi feltételek mellett előnyös:

A számjegyek elhelyezkedése Az egymást követő számjegyek száma
az adatok kezdete 4+
az adatok vége 4+
az adatok közepe (A vagy B kódkészletből származó szimbólumokkal körülvéve) 6+
teljes adat 2 vagy 4+ (de nem 3)

A karakterlánc végén a C kódkészletre való átmenet késleltetéséig, amíg páros számjegy marad, elkerülhető egy további szimbólum. Tekintsük a "... 01234" karakterláncot: késleltetett kapcsoló termel, ... 0 [Code C] 12 34 [checksum] [Stop]de korai kapcsoló ... [Code C] 01 23 [Code A] 4 [checksum] [Stop].

Például, tekintettel a "098x1234567y23" karakterláncra, a vonalkód hosszának megtakarítása a C kódkészlet használatával csak akkor érhető el, ha azt a karakterlánc középső részére alkalmazzák. A karakterlánc elejére és végére a C kódkészletre való váltás nem hatékony. Mivel a karakterlánc közepén páratlan számú számjegy található, a páratlannak más kódot kell használnia, de nem mindegy, hogy ez az első vagy az utolsó; 16 szimbólum szükséges mindkét esetben:, [Start B] 0 9 8 x 1 [Code C] 23 45 67 [Code B] y 2 3 [checksum] [Stop]vagy [Start B] 0 9 8 x [Code C] 12 34 56 [Code B] 7 y 2 3 [checksum] [Stop].

A kapott vonalkód hosszának optimalizálása fontos, ha olyan vonalkód -olvasókat használnak, amelyeknek a teljes vonalkódképet egyszerre kell érzékelniük, hogy elolvassák, például a közönséges lézerszkennereket . Minél hosszabb a vonalkód, annál nagyobb távolságra van szükség a lézeres vonalkódolvasó vonalkód -képétől, ami megnehezíti vagy lehetetlenné teszi az olvasást bizonyos küszöbhosszak/távolságok felett.

Az optimális kódolás megtalálható egy dinamikus programozási algoritmus segítségével.

Hivatkozások

Külső linkek

Mintakód

  • ZXing - Többplatformos nyílt forráskódú vonalkódolvasó / -generátor, Java verzióval (alapprojekt) és az ActionScript, C ++, C#, ObjectiveC és Ruby portokkal.
  • Python vonalkód 128 - Úgy tűnik, hogy ez a kód egy pixel széles dobozokat rajzol. Úgy tűnik, hogy egy rövid sor hosszú vonalkódból lett módosítva, amely vonalakat húzott volna. A "Fekete dobozok" méretének meg kell egyeznie a "Fehér dobozokkal".
  • GenCode128 - A Code128 ingyenes C# forráskód megvalósítása. Szinte minden funkció megvalósult, de nem 100% -os.
  • Barcode1DTools Ruby drágakő - Rubin forráskód számos 1D vonalkód szimbólumhoz, beleértve a 128 -as kódot is.
  • Perl vonalkód generáló kód - Perl forráskód sok 1D vonalkód szimbólumhoz, beleértve a 128 -as kódot is.
  • Vonalkód :: Code128 - Ingyenes Perl vonalkód generáló modul.
  • GOCR - Ingyenes OCR, 128 -as kódfelismeréssel .
  • Vonalkód 128 -as kód - A Code128 ingyenes JavaScript forráskód -megvalósítása.
  • Barcode4J - Ingyenes Java API a Code128 és más szabványos vonalkódok megvalósításával.
  • JavaScript-kód 128 -A Code128 és más lineáris vonalkódok nyílt forráskódú JavaScript-implementációja.
  • Bemutatjuk a Code 128 vonalkódok létrehozását Útmutató a szöveg 128 kódú vonalkódokká konvertálásához. Lazarus (nyílt forráskódú, többplatformos GUI Pascal) számára írva, de általános használatra.