The PDF417 bar code (also called a
symbol) consists of 3 to 90 rows, each of which is like a small linear bar code. Each row has: • A
quiet zone. This is a mandated minimum amount of white space before the bar code begins. • A start pattern which identifies the format as PDF417. • A "row left" codeword containing information about the row (such as the row number and error correction level). • 1–30 data
codewords: Codewords are a group of bars and spaces representing one or more numbers, letters, or other symbols. • A "row right" codeword with more information about the row. • A stop pattern. • Another quiet zone. All rows are the same width; each row has the same number of codewords.
Codewords PDF417 uses a
base 929 encoding. Each codeword represents a number from 0 to 928. The codewords are represented by patterns of dark (bar) and light (space) regions. Each of these patterns contains four bars and four spaces (where the 4 in the name comes from). The total width is 17 times the width of the narrowest allowed vertical bar (the X dimension); this is where the 17 in the name comes from. Each pattern starts with a bar and ends with a space. The row height must be at least 3 times the minimum width: Y ≥ 3 X. There are three distinct bar–space patterns used to represent each codeword. These patterns are organized into three groups known as
clusters. The clusters are labeled 0, 3, and 6. No bar–space pattern is used in more than one cluster. The rows of the symbol cycle through the three clusters, so row 1 uses patterns from cluster 0, row 2 uses cluster 3, row 3 uses cluster 6, and row 4 again uses cluster 0. Which cluster can be determined by an equation: : K = b_1 - b_2 + b_3 - b_4 + 9 \,\, \pmod 9 Where
K is the cluster number and the
bi refer to the width of the
i-th black bar in the symbol character (in
X units). Alternatively: : K = E_1 - E_2 + E_5 - E_6 + 9 \,\, \pmod 9 Where
Ei is the
i-th edge-to-next-same-edge distance. Odd indices are the leading edge of a bar to the leading edge of the next bar; even indices are for the trailing edges. One purpose of the three clusters is to determine which row (mod 3) the codeword is in. The clusters allow portions of the symbol to be read using a single scan line that may be skewed from the horizontal. For instance, the scan might start on row 6 at the start of the row but end on row 10. At the beginning of the scan, the scanner sees the constant start pattern, and then it sees symbols in cluster 6. When the skewed scan straddles rows 6 and 7, then the scanner sees noise. When the scan is on row 7, the scanner sees symbols in cluster 0. Consequently, the scanner knows the direction of the skew. By the time the scanner reaches the right, it is on row 10, so it sees cluster 0 patterns. The scanner will also see a constant stop pattern.
Encoding Of the 929 available code words, 900 are used for data, and 29 for special functions, such as shifting between major modes. The three major modes encode different types of data in different ways, and can be mixed as necessary within a single bar code: •
Byte: each group of 5 code words represents 6 bytes. (Because 9005 > 2566.) Additional bytes are encoded one per code word. •
Numeric:
n digits are encoded in +1 code words, up to a maximum of 44 digits in 15 code words. •
Text: Each code word represents two base-30 digits, which are used by a system of four submodes to represent the printable ASCII characters (plus
CR,
LF and
HT): • Uppercase: A–Z,
SP, Change to lowercase, Change to mixed, Interpret next digit as punctuation • Lowercase: a–z, SP, Interpret next digit as uppercase, Change to mixed, Interpret next digit as punctuation • Mixed: 0–9, &, CR, HT, comma, :, #, -, period, $, /, +, %, *, =, ^, Change to punctuation, SP, Change to lowercase, Change to uppercase, Interpret next digit as punctuation • Punctuation: ;, , @, [, \, ], _, `, ~, !, CR, HT, comma, :, LF, -, period, $, /, ", |, *, (, ), ?, {, }, ', Change to uppercase
Error correction When the PDF417 symbol is created, from 2 to 512 error detection and correction codewords are added. PDF417 uses
Reed–Solomon error correction. When the symbol is scanned, the maximum number of corrections that can be made is equal to the number of codewords added, but the standard recommends that two codewords be held back to ensure reliability of the corrected information. == Comparison with other symbologies ==