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 redigera

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 redigera

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 redigera

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 redigera

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_B 11010010000
W 11101000110
i 10000110100
k 11000010010
i 10000110100
Code_C 10111011110
12 10110011100
34 10001011000
Kontrollsiffra =82 10010011110
Sluttecken 1100011101011

Code 128 tabellen redigera

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

Nummer Grupp A Grupp B Grupp C Kod
00 00 11011001100
01 ! ! 01 11001101100
02 " " 02 11001100110
03 # # 03 10010011000
04 $ $ 04 10010001100
05 % % 05 10001001100
06 & & 06 10011001000
07 ' ' 07 10011000100
08 ( ( 08 10001100100
09 ) ) 09 11001001000
10 * * 10 11001000100
11 + + 11 11000100100
12 , , 12 10110011100
13 - - 13 10011011100
14 . . 14 10011001110
15 / / 15 10111001100
16 0 0 16 10011101100
17 1 1 17 10011100110
18 2 2 18 11001110010
19 3 3 19 11001011100
20 4 4 20 11001001110
21 5 5 21 11011100100
22 6 6 22 11001110100
23 7 7 23 11101101110
24 8 8 24 11101001100
25 9 9 25 11100101100
26 : : 26 11100100110
27 ; ; 27 11101100100
28 < < 28 11100110100
29 = = 29 11100110010
30 > > 30 11011011000
31 ? ? 31 11011000110
32 @ @ 32 11000110110
33 A A 33 10100011000
34 B B 34 10001011000
35 C C 35 10001000110
36 D D 36 10110001000
37 E E 37 10001101000
38 F F 38 10001100010
39 G G 39 11010001000
40 H H 40 11000101000
41 I I 41 11000100010
42 J J 42 10110111000
43 K K 43 10110001110
44 L L 44 10001101110
45 M M 45 10111011000
46 N N 46 10111000110
47 O O 47 10001110110
48 P P 48 11101110110
49 Q Q 49 11010001110
50 R R 50 11000101110
51 S S 51 11011101000
52 T T 52 11011100010
53 U U 53 11011101110
54 V V 54 11101011000
55 W W 55 11101000110
56 X X 56 11100010110
57 Y Y 57 11101101000
58 Z Z 58 11101100010
59 [ [ 59 11100011010
60 \ \ 60 11101111010
61 ] ] 61 11001000010
62 ^ ^ 62 11110001010
63 _ _ 63 10100110000
64 NUL ` 64 10100001100
65 SOH a 65 10010110000
66 STX b 66 10010000110
67 ETX c 67 10000101100
68 EOT d 68 10000100110
69 ENQ e 69 10110010000
70 ACK f 70 10110000100
71 BEL g 71 10011010000
72 BS h 72 10011000010
73 HT i 73 10000110100
74 LF j 74 10000110010
75 VT k 75 11000010010
76 FF l 76 11001010000
77 CR m 77 11110111010
78 SO n 78 11000010100
79 SI o 79 10001111010
80 DLE p 80 10100111100
81 DC1 q 81 10010111100
82 DC2 r 82 10010011110
83 DC3 s 83 10111100100
84 DC4 t 84 10011110100
85 NAK u 85 10011110010
86 SYN v 86 11110100100
87 ETB w 87 11110010100
88 CAN x 88 11110010010
89 EM y 89 11011011110
90 SUB z 90 11011110110
91 ESC { 91 11110110110
92 FS 92 10101111000
93 GS } 93 10100011110
94 RS ~ 94 10001011110
95 US DEL 95 10111101000
96 FNC3 FNC3 96 10111100010
97 FNC2 FNC2 97 11110101000
98 SHIFT SHIFT 98 11110100010
99 Code_C Code_C 99 10111011110
100 Code_B FNC4 Code_B 10111101110
101 FNC4 Code_A Code_A 11101011110
102 FNC1 FNC1 FNC1 11110101110
103 START_A START_A START_A 11010000100
104 START_B START_B START_B 11010010000
105 START_C START_C START_C 11010011100
106 STOP STOP STOP 1100011101011