Code 128

Code 128 är den idag vanligaste förekommande symbolkodningen av streckkod och används bland annat för märkning av artiklar, försändelser m.m. enligt GS1-128 systemet. Code 128 kan koda de 128 första tecknen i ASCII-kodningen men ger även en kompakt kodning av numreriska värden. I koden ingår även en kontrollkod för att säkra mot läsfel.

Koduppbyggnad

En Code 128 symbol består av följande delar:

  • Startkod
  • Data
  • Kontrollsiffra
  • Slutkod

Start och slutkod är en särskild teckenkombination som används av läsare för att avgöra vilken symbolkodning som används. För Code 128 anger även startkoden vilken teckengrupp som koden börjar med. Före en Startkod resp. efter en Slutkod måste det alltid finnas ett tomt område på minst 10 st ljusa enheter en sk. tyst zon.

Varje tecken i Code 128 består av totalt 11 st lika långa ljusa eller mörka element vilka i sin tur är uppdelade i 6 grupper (tre mörka och tre ljusa) varav den första alltid är en grupp av mörka. Ett undantag är Stopptecknet som har en sjunde extra mörk grupp på slutet. Varje grupp av element består av 1-4 element. Vanligtvis kallas mörka grupper för svarta och ljusa för vita men färgerna kan vara andra kombinationer av färger som till exempel blått och gult.

Omedelbart efter sista tecknet i datan och före Stopptecknet finns en kontrollsumma som beräknas på Starttecknet och Datan.

Kodning av tecken

Vilken kombination av mörka eller ljusa delar som ska användas för att koda ett visst ASCII-tecken går inte att beräkna från till exempel ASCII-värdet utan tas ur en tabell bestående av tre grupper (kolumner).

För att både klara att koda 128 ASCII tecken och på ett kompakt sätt visa det vanligaste förekommande, endast numreriska koder, används tre olika teckengrupper kallade 128A, 128B, 128C, vilka skiftas mellan med olika start eller skifttecken.

  • Teckengrupp 128A - De 95 första ASCII tecknen. Kontrolltecken 0-31, grundläggande symboler, siffror 0-9, versaler A-Z m.m.
  • Teckengrupp 128B - ASCII tecken 32-127. Grundläggande symboler, siffror 0-9, versaler A-Z, gemena a-z.
  • Teckengrupp 128C - Dubbelkodade siffror. Här kodas siffror 0-9 som par vilket till exempel gör att koden för 123456 bara blir tre tecken långt tecknen (12),(34),(56).

Sammansättningen av en Code 128 streckkod

För att skapa en kodsymbol behövs en viss logik.

Beroende på datan man vill koda så måste man välja vilken Teckengrupp man skall starta med och för att veta det måste man på något sätt analysera den kommande datan. Om man vet att de första två tecknen i datan är siffror ska man börja med en startkod-grupp C för att nyttja den kompakta kodningen av siffror. Det är dock inget formellt fel att koda en Startkod-grupp B men man måste då koda varje siffra med en 11 element lång kod. För varje gång man byter kodgrupp får man en viss overhead så den slutliga längden på symbolen är beroende av datans innehåll. Kompaktast i förhållande till antal kodade tecken är en kod med datainnehåll av ett jämnt antal siffror.

Beroende av om det tecken man vill koda finns med i den teckengrupp som senast valdes med en startkod eller gruppskiftkod väljer man om en ny gruppskiftkod måste läggas in eller om tecknet kod kan läggas ut direkt.

Kontrolltecknet beräknas på starttecknet och efterföljande data. Metoden som används heter Modulus 103 och går till så att startkoden adderas till efterföljande datateckens nummer (enligt tabell) multiplicerade med sin position. Första tecknet efter startkoden är position 1. När summan är klar delas den med 103 varefter resten i divisionen blir kontrolltecknet.

Exempel

Vi vill skapa en Code-128 streckod innehållande texten "Wiki1234"

Först väljs startkoden START_B för att kunna koda både versaler och gemena tecken. START_B är i tabellen kod nummer 104=11010010000 (OBS! en etta eller nolla här är här en längdenhet lång). Kontrollsumman är nu=104

W är ur tabellen kolumn B nummer 55=11101000110. Då detta är position ett blir bidraget för detta till kontrollsumman 1 * 55. Kontrollsumman är alltså nu 104+55=159

i är ur tabellen kolumn B nummer 73=10000110100. Detta är position 2 och bidraget för detta till kontrollsumman är 2 * 73=146. Kontrollsumman är alltså nu 104+55+146=305

k är ur tabellen kolumn B nummer 75=11000010010. Detta är position 3 och bidraget för detta till kontrollsumman är 3 * 75=225. Kontrollsumman är alltså nu 104+55+146+225=530

i är ur tabellen kolumn B nummer 73=10000110100. Detta är position 4 och bidraget för detta till kontrollsumman är 4 * 73=292. Kontrollsumman är alltså nu 530+292=822

För att få en kompaktare kod vid kodningen av siffrorna 12 byter vi nu till kodgrupp C varför tecknet Code_C (ur kolumn B) först ska läggas till. Code_C ur tabellen kolumn B nummer 99=10111011110. Detta är position 5 och bidraget för detta till kontrollsumman är 5 * 99=495. Kontrollsumman är alltså nu 822+495=1317

12 är ur tabellen kolumn C nummer 12=10110011100. Detta är position 6 och bidraget för detta till kontrollsumman är 6 * 12=72. Kontrollsumman är alltså nu 1317+72=1389

34 är ur tabellen kolumn C nummer 34=10001011000. Detta är position 7 och bidraget för detta till kontrollsumman är 7 * 34=238. Kontrollsumman är alltså nu 1389+238=1627

För att beräkna checksumman delas summan ovan 1627 med 103 och resten (Modulus) blir 82. Ur tabellen är nummer 82=10010011110

Sluttecknet är längre än övriga tecken och är 106=1100011101011

Hela sifferföljden 1101001000011101000110 1000011010011000010010 1000011010010111011110 1011001110010001011000 100100111101100011101011

Den sammanlagda koden blir till slut :

START_B11010010000
W11101000110
i10000110100
k11000010010
i10000110100
Code_C10111011110
1210110011100
3410001011000
Kontrollsiffra =8210010011110
Sluttecken1100011101011

Code 128 tabellen

En etta (1) i tabellens kodkolumn motsvarar ett Mörkt element.

NummerGrupp AGrupp BGrupp CKod
000011011001100
01!!0111001101100
02""0211001100110
03##0310010011000
04$$0410010001100
05%%0510001001100
06&&0610011001000
07''0710011000100
08((0810001100100
09))0911001001000
10**1011001000100
11++1111000100100
12,,1210110011100
13--1310011011100
14..1410011001110
15//1510111001100
16001610011101100
17111710011100110
18221811001110010
19331911001011100
20442011001001110
21552111011100100
22662211001110100
23772311101101110
24882411101001100
25992511100101100
26::2611100100110
27;;2711101100100
28<<2811100110100
29==2911100110010
30>>3011011011000
31??3111011000110
32@@3211000110110
33AA3310100011000
34BB3410001011000
35CC3510001000110
36DD3610110001000
37EE3710001101000
38FF3810001100010
39GG3911010001000
40HH4011000101000
41II4111000100010
42JJ4210110111000
43KK4310110001110
44LL4410001101110
45MM4510111011000
46NN4610111000110
47OO4710001110110
48PP4811101110110
49QQ4911010001110
50RR5011000101110
51SS5111011101000
52TT5211011100010
53UU5311011101110
54VV5411101011000
55WW5511101000110
56XX5611100010110
57YY5711101101000
58ZZ5811101100010
59[[5911100011010
60\\6011101111010
61]]6111001000010
62^^6211110001010
63__6310100110000
64NUL`6410100001100
65SOHa6510010110000
66STXb6610010000110
67ETXc6710000101100
68EOTd6810000100110
69ENQe6910110010000
70ACKf7010110000100
71BELg7110011010000
72BSh7210011000010
73HTi7310000110100
74LFj7410000110010
75VTk7511000010010
76FFl7611001010000
77CRm7711110111010
78SOn7811000010100
79SIo7910001111010
80DLEp8010100111100
81DC1q8110010111100
82DC2r8210010011110
83DC3s8310111100100
84DC4t8410011110100
85NAKu8510011110010
86SYNv8611110100100
87ETBw8711110010100
88CANx8811110010010
89EMy8911011011110
90SUBz9011011110110
91ESC{9111110110110
92FS9210101111000
93GS}9310100011110
94RS~9410001011110
95USDEL9510111101000
96FNC3FNC39610111100010
97FNC2FNC29711110101000
98SHIFTSHIFT9811110100010
99Code_CCode_C9910111011110
100Code_BFNC4Code_B10111101110
101FNC4Code_ACode_A11101011110
102FNC1FNC1FNC111110101110
103START_ASTART_ASTART_A11010000100
104START_BSTART_BSTART_B11010010000
105START_CSTART_CSTART_C11010011100
106STOPSTOPSTOP1100011101011

Media som används på denna webbplats

Code128 Wiki1234.gif
Texten "Wiki1234" som streckkod kodat i Code 128