Code 128

Get Expert Help

Code 128 Specification

Code 128, so called because it can encode all 128 ASCII characters, is the preferred symbology for many barcode applications. It also is considered the most easily read barcode with the highest message integrity.

Code 128 has three different character sets defined in the table below as Code Set A, Code Set B and Code Set C. Any of these codes may be selected by appropriate selection of start character. Special ‘shift’ characters in each Code Set enable an alternative Code Set to be substituted during the scanning process. If the data consists only of numeric data then Code Set C provides twice the packing density of Code Sets A and B. Each code set has one or more characters reserved for special functions.

The Code 128 Specification requires the inclusion of a check digit. The barcode symbol structure consists of:

  • A quiet zone, or white space to the left of the bars
  • Start character
  • A variable number of data characters
  • Check digit
  • Stop character
  • A quiet zone or white space to the right of the bars

The quiet zone should be at least ten times the width of the narrowest bar/space element.

Each character in the barcode symbol is composed of six bars and six spaces. (The stop character has six bars and five spaces as the final symbol will always have one fewer space than bars.)

Each bar or space can be one of four different unit widths. The narrowest possible bar or space will thus be one quarter the width of the widest. The table holds the bar/space widths for all the Code 128 character set. Notice that the sum of the barwidths in any character is always even, and the sum of the space widths is odd. The first column in the table, ‘The Value’, is the value used to calculate the check digit.

The Code 128 specification allows for Human readable information to be printed anywhere outside of the symbol area.

Guidance on the use of START, CODE and SHIFT characters

The following guidance should be followed to minimize the symbol length.

NOTE: The Bars & Stripes barcode software automatically choose the correct START, CODE, and SHIFT characters in accordance with the following guidelines.

1. Starting from the left:

(a) If the data begins with four or more digits use start character ‘C’.
(b) Otherwise, if a control character occurs in the data before any lower case character
use start character ‘A’.
(c) Otherwise use start character ‘B’.

2. If start character ‘C’ is used and an odd number of digits begin the data, insert code ‘A’
or code ‘B’ before the last digit, using guidelines 1(b) and 1(c) above to choose between
code ‘A’ and Code ‘B’.

3. If four or more digits occur together when in character sets ‘A’ or ‘B’:

(a) If there is an even number of digits in the group insert code ‘C’ before the first digit.
(b) If there is an odd number of digits in the group insert code ‘C’ immediately after the
first digit.

4. When in character set ‘B’ and a control character appears in the data:

(a) If following the control character there is a lower case character before another
control character appears insert the shift character before the control character.
(b) Otherwise insert code ‘A’ before the control character.

5. When in character set ‘A’ and a lower case character appears in the data:

(a) If following the lower case character there is a control character before another lower
case character, insert the shift character before the lower case character.
(b) Otherwise insert code ‘B’ before the lower case character.

6. When in character set ‘C’ and a non-numeric character occurs in the data insert code ‘A’
or ‘B’ before the non-numeric character using guidelines 1(b) and 1(c) above to choose
between code ‘A’ and code ‘B’.

Check Digit Calculation

Step 1: Starting with the the 1st data character, number each characters position.

		Start

		codeB C o d e   1 2 8		<--start code + message characters

		1 2 3 4 5 6 7 8		<--position values

		Step 2: From the table below, multiply each characters value, by its position number.

		Example: C = 35 (from table) and its position number is 1.

		The product is (35 * 1) = 35

		Step 3: Sum the products from Step 2 and add to the start code value.
	104 + (35 * 1) + (79 * 2) + (68 * 3) + (69 * 4)

		+ (0 * 5) + (17 * 6) + (18 * 7) + (24 * 8) = 1197

		Step 4: Divide the result by 103 and find the remainder.

		1197 / 103 = 11  with remainder of 64.

		Step 5: From the table, find the character with this value

		(in this case the backtic character (`))
CODE 128 CHARACTER SET
VALUE CODE
SET A
CODE
SET B
CODE
SET C
BAR PATTERN
B S B S B S
0 SP SP 00 2 1 2 2 2 2
1 ! ! 01 2 2 2 1 2 2
2 02 2 2 2 2 2 1
3 # # 03 1 2 1 2 2 3
4 $ $ 04 1 2 1 3 2 2
5 % % 05 1 3 1 2 2 2
6 & & 06 1 2 2 2 1 3
7 07 1 2 2 3 1 2
8 ( ( 08 1 3 2 2 1 2
9 ) ) 09 2 2 1 2 1 3
10 * * 10 2 2 1 3 1 2
11 + + 11 2 3 1 2 1 2
12 12 1 1 2 2 3 2
13 13 1 2 2 1 3 2
14 . . 14 1 2 2 2 3 1
15 / / 15 1 1 3 2 2 2
16 0 0 16 1 2 3 1 2 2
17 1 1 17 1 2 3 2 2 1
18 2 2 18 2 2 3 2 1 1
19 3 3 19 2 2 1 1 3 2
20 4 4 20 2 2 1 2 3 1
21 5 5 21 2 1 3 2 1 2
22 6 6 22 2 2 3 1 1 2
23 7 7 23 3 1 2 1 3 1
24 8 8 24 3 1 1 2 2 2
25 9 9 25 3 2 1 1 2 2
26 : : 26 3 2 1 2 2 1
27 ; ; 27 3 1 2 2 1 2
28 < < 28 3 2 2 1 1 2
29 = = 29 3 2 2 2 1 1
30 > > 30 2 1 2 1 2 3
31 ? ? 31 2 1 2 3 2 1
32 @ @ 32 2 3 2 1 2 1
33 A A 33 1 1 1 3 2 3
34 B B 34 1 3 1 1 2 3
35 C C 35 1 3 1 3 2 1
36 D D 36 1 1 2 3 1 3
37 E E 37 1 3 2 1 1 3
38 F F 38 1 3 2 3 1 1
39 G G 39 2 1 1 3 1 3
40 H H 40 2 3 1 1 1 3
41 I I 41 2 3 1 3 1 1
42 J J 42 1 1 2 1 3 3
43 K K 43 1 1 2 3 3 1
44 L L 44 1 3 2 1 3 1
45 M M 45 1 1 3 1 2 3
46 N N 46 1 1 3 3 2 1
47 O O 47 1 3 3 1 2 1
48 P P 48 3 1 3 1 2 1
49 Q Q 49 2 1 1 3 3 1
50 R R 50 2 3 1 1 3 1
51 S S 51 2 1 3 1 1 3
52 T T 52 2 1 3 3 1 1
53 U U 53 2 1 3 1 3 1
54 V V 54 3 1 1 1 2 3
55 W W 55 3 1 1 3 2 1
56 X X 56 3 3 1 1 2 1
57 Y Y 57 3 1 2 1 1 3
58 Z Z 58 3 1 2 3 1 1
59 [ [ 59 3 3 2 1 1 1
60 60 3 1 4 1 1 1
61 ] ] 61 2 2 1 4 1 1
62 ^ ^ 62 4 3 1 1 1 1
63 _ _ 63 1 1 1 2 2 4
64 NUL 64 1 1 1 4 2 2
65 SOH a 65 1 2 1 1 2 4
66 STX b 66 1 2 1 4 2 1
67 ETX c 67 1 4 1 1 2 2
68 EOT d 68 1 4 1 2 2 1
69 ENQ e 69 1 1 2 2 1 4
70 ACK f 70 1 1 2 4 1 2
71 BEL g 71 1 2 2 1 1 4
72 BS h 72 1 2 2 4 1 1
73 HT i 73 1 4 2 1 1 2
74 LF j 74 1 4 2 2 1 1
75 VT k 75 2 4 1 2 1 1
76 FF l 76 2 2 1 1 1 4
77 CR m 77 4 1 3 1 1 1
78 SO n 78 2 4 1 1 1 2
79 SI o 79 1 3 4 1 1 1
80 DLE p 80 1 1 1 2 4 2
81 DC1 q 81 1 2 1 1 4 2
82 DC2 r 82 1 2 1 2 4 1
83 DC3 s 83 1 1 4 2 1 2
84 DC4 t 84 1 2 4 1 1 2
85 NAK u 85 1 2 4 2 1 1
86 SYN v 86 4 1 1 2 1 2
87 ETB w 87 4 2 1 1 1 2
88 CAN x 88 4 2 1 2 1 1
89 EM y 89 2 1 2 1 4 1
90 SUB z 90 2 1 4 1 2 1
91 ESC { 91 4 1 2 1 2 1
92 FS | 92 1 1 1 1 4 3
93 GS } 93 1 1 1 3 4 1
94 RS ~ 94 1 3 1 1 4 1
95 US DEL 95 1 1 4 1 1 3
96 FNC 3 FNC 3 96 1 1 4 3 1 1
97 FNC 2 FNC 2 97 4 1 1 1 1 3
98 SHIFT SHIFT 98 4 1 1 3 1 1
99 CODE C CODE C 99 1 1 3 1 4 1
100 CODE B FNC 4 CODE B 1 1 4 1 3 1
101 FNC 4 CODE A CODE A 3 1 1 1 4 1
102 FNC 1 FNC 1 FNC 1 4 1 1 1 3 1
.
103 START (CODE A) 2 1 1 4 1 2
104 START (CODE B) 2 1 1 2 1 4
105 START (CODE C) 2 1 1 2 3 2
. B S B S B S B
. STOP 2 3 3 1 1 1 2
Where B=Bar and S=Space; For definitions of FNC2 – FNC4; see USC-128 Specifications