Knowledge Base Article

New Search

Understanding barcodes, how they are formed, the different types of barcodes

Everyone has seen barcodes on items in grocery store. They are a series of vertical lines and spaces that represent information which can be interpreted by optical scanning and decoding devices. By using barcodes and a good, clean barcode reader (or scanner) the time it takes to read data is significantly reduced and simplified.

To complicate things, there are many different types of barcodes. The barcodes supported by i2 include:

  • Code 39
  • UPC-A
  • EAN-13
  • Code 28
  • UPC-E
  • ISBN Addon 2
  • Code 93
  • Codabar
  • ISBN Addon 5
  • Interleaved 2/5
  • EAN-8
  • Airline 2 of 5
  • BCD Matrix
  • Matrix 2 of 5
  • Code 32
  • Invert 2 of 5
  • Datalogic 2 of 5
  • PDF 417


Each of these barcodes has their place and unique use however some are more popular than others. For the purposes of simplicity, well look at 128 (Code 28) which is among the most popular and widely used barcodes.

Sample Code 128 Barcode


One of the reasons for the popularity of Code 128 is that it allows the full ASCII 128 character set to be encoded. By using 4 different bar and space widths it achieves a more compact symbol than would be possible using the older binary (Two bar/space widths) barcodes.

Code 128 may be scanned bidirectionally and there is no restriction on the number of characters allowed in each symbol. There is of course a practical limit determined by the physical size of the resulting barcode and the scanning equipment.

So, let's look at how the barcode actually works and how it is made to represent alpha-numeric characters.

Code 128 has three different character sets. (See the table below - Code Set A, Code Set B and Code Set C). Each code set has one or more characters reserved for special functions. The barcode symbol structure consists of...

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

Code 128 barcode structure

Value
Code Set
Code Set
Code Set
Bar/Space
 
A B C 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
I
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 A
Start A
Start A
2 1 1 4 1 2
104
Start B
Start B
Start B
2 1 1 2 1 4
105
Start C
Start C
Start C
2 1 1 2 3 2
106
Stop
Stop
Stop
2 3 3 1 1 1 2

What's a Check Digit?

The check digit is a Modulus 103 checksum. It is calculated by summing the start code 'value' to the products of each character's 'value' multiplied by its position in the barcode string. The left most character is position 1. The sum of the start code value and the products is divided by 103. The remainder is the check digits 'value'.

By calculating this check digit we can make certain whether a good read has been achieved for our barcode and ensure the integrity of the read.

For example, to represent "Code 128" our barcode would look like this...

 



Value
Total
Start Code B 104
104
Position 1 C 35 1 x 35 = 35
Position 2 o 79 2 x 79 = 158
Position 3 d 68 3 x 68 = 204
Position 4 e 69 4 x 69 = 276
Position 5
0 5 x 0 = 0
Position 6 1 17 6 x 17 = 102
Position 7 2 18 7 x 18 = 126
Position 8 8 24 8 x 24 = 192




1197

1197/103 = 11 remainder 64

The check digit is the character from the table with value 64

When it comes to reading barcodes within documents, it makes you glad that i2 does all this calculating for you! As you can see, barcodes are an accurate and fast way of saving and retrieving data with extremely low failure rates. The trick is to make sure you do a good scan and ensure you read your barcodes with an accurate processing application