Code 128 Symbology Introduction
Version: 2010-12-20
Author: green-waste(at) 163.com
recommand to see this article of PDF version, go to this page to download:
Code 128 Symbology Introduction v20101220.pdf
http://download.csdn.net/source/2924661
1 Glossary
1.1 Value
For the value column in Encoding Code Table, the “value” is also called code, or character, or digit.
So actually:
Start code = start character
Check character = check digit
Function code = function character
…..
1.2 Variant
The variant is just the character set, so variant A/B/C is just the Character Set A/B/C
2 Code 128 Definition
2.1 Symbology
Code 128 is a variable length, high density, alphanumeric symbology.
It is a very effective, high-density symbology which encoding of alphanumeric data.
2.2 Checksum digit
Code 128 also employs a check digit for data security.
Code 128 symbology must include a checksum digit.
2.3 Character set
Code 128 has three characters Set: A, B, C.
Code 128 has 106 different bar and space patterns and each pattern can have one of three different meanings, depending on which of three different character sets (characters Set A/B/ C) is employed.
Three different start characters tell the reader the character set used in the following encoding, and three shift codes permits changing character set inside the symbol.
3 Code 128 Characteristics
3.1 Start character
As you can see in Encoding Code Table,
The three start characters are:
“START A“=103, “START B”=104, “START C”=105
3.2 Shift code
As you can see in Encoding Code Table, three shift codes are:
For character set A: change to character set B is “Code B=100”, to character set C is “Code C=99”
For character set B: change to character set A is “Code A=101”, to character set C is “Code A=99”
For character set C: change to character set A is “Code B=101”, to character set C is “Code B=100”
Note:
But the shift work only with Code A or Code B characters.
3.3 Character set usage domain
Generally:
Character Set A: encodes all upper case (‘A=33’ to ‘Z=58’) and ASCII control characters (‘NUL=64’ to ‘US=95’);
Character Set B: encodes all upper (‘A=33’ to ‘Z=58’) and lower (‘a=65’ to ‘z=90’) case characters;
Character Set C: encodes numeric digit pairs 00 through 99 (‘00=00’ to ‘99=99’).
Character Set A and B: used to encode alpha-numeric information
Character Set C : offers double density when being used to encode numeric data, which means use a single value/code, decoded as two digital value/data, that is one value = two data.
This third character set – Character Set C, effectively doubles the code density when printing numeric data.
3.4 Function Code
In addition to ASCII characters, Code 128 also allows encoding of four special function codes (FNC1 – FNC4), which are listed in Encoding Code Table.
The meaning of function code FNC1 and FNC4 were originally left open for application specific purposes. Recently an agreement was made by the Automatic Identification Manufacturers Assoc. (AIM) and the European Article Numbering Assoc. (EAN) to reserve FNC1 for use in EAN applications.
FNC4 remains available for use in closed system applications.
FNC2 is used to instruct a bar code reader to concatenate the message in a bar code symbol with the message in the next symbol.
FNC3 is used to instruct a bar code reader to perform a reset. When FNC3 is encoded anywhere in a symbol, any data also contained in the symbol is discarded.
3.5 Calculate the Check/Checksum Digit
The steps for calculating the check digit are as follows:
1. Take the value of the start character (“START A“=103, or “START B”=104, or “START C”=105) and make that the starting value of the running checksum.
2. Starting with the first data character following the start character, take the value of the character (between 0 and 102, inclusive) multiply it by its character position (1) and add that to the running checksum.
3. Take each additional character in the message, take its value, and multiply it by its character position, and add the total to the running checksum.
4. use the resulting to MOD 13, that is divide the resulting running checksum by 103, then the remainder is the checksum digit, which is added to the end of the message.
5. The stop character is appended after the checksum digit.
This is easier to understand with an example.
Let’s calculate the checksum digit for the sample bar code above, “HI345678”.
The checksum digit is included in all Code 128 bar codes, but it isn’t printed as part of the text below the bar code symbol (as is the case with UPC and EAN symbols).
Table 1 Calculate checksum digit of “HI345678”
Barcode | START-A | H | I | CODE C | 34 | 56 | 78 |
Character Value | 103 | 40 | 41 | 99 | 34 | 56 | 78 |
Character Position | – | 1 | 2 | 3 | 4 | 5 | 6 |
Calculation | 103 | 40 * 1 | 41 * 2 | 99 * 3 | 34 * 4 | 56 * 5 | 78 * 6 |
Weighted Sum | 103 | 40 | 82 | 297 | 136 | 280 | 468 |
Summing up the running checksum for each digit, we get 103 + 40 + 82 + 297 + 136 + 280 + 468 = 1406. Then, 1046 MOD 13 = the remainder of 1406 / 103 = 67. Thus the checksum digit is the character which has a value of 67.
NOTE:
1. Note that the checksum starts with the first Start Character, with a weight of 1, and that the first data character also has a weight of 1.
2. In my understanding, the above “CODE-C=99” is the generated barcode, but not displayed/printed, just like the check digit.
3.6 Structure / Composition of Code 128
Table 2 Structure of Code 128
one of three start codes (“START A“=103, or “START B”=104, or “START C”=105) | the data itself | a check character | a stop character | Termination bar of 11 |
We encode each digit using the encoding table above.
The START-A character: 11010000100.
The digit “H” encoded as: 11000101000.
The digit “I” encoded as: 11000100010.
The “CODE-C” character: 10111011110.
The digits “34” encoded as: 10001011000.
The digits “56” encoded as: 11100010110.
The digits “78” encoded as: 11000010100.
The checksum digit of 67 encoded as: 10000101100.
The STOP character: 11000111010.
The termination bar: 11.
This is shown in the following graphical representation where the bar code has been sectioned-off into areas that reflect each of the 10 components just mentioned.
3.7 Compare to Other symbology
For Code 39, Code 93, Code 128, EAN-UCC 128:
There are all variable length alphanumeric symbology.
And their “Data Capacity” – the practical upper limit, dependent on the scanner and is typically between 20 and 40 characters.
Code 128 is more efficient at encoding data than Code 39 or Code 93.
Code 128 is the best choice for most general bar code applications.
Code 39 and Code 128 are both very widely used while Code 93 is rarely used.
4 Append
4.1 Encoding Code Table
This table indicates how to encode each digit of a Code 128 bar code.
Note that it is easiest to think of each character as a value between 0 and 105, inclusive, rather than thinking of them as characters.
The character that a value represents depends on what mode (or character set) you’re in-so rather than thinking of a character as “A” or “B”, etc. it is more appropriate to think of it as 33, 34, etc.
Note:
For easy to identify that special value, I color some of them like this:
Shift Code of Character Set
Start character
Function Code
Table 3 Encoding Code Table
VALUE | WHICH REPRESENTS IN CHARACTER SET | ENCODING | VALUE | WHICH REPRESENTS IN CHARACTER SET | ENCODING | ||||
A | B | C | A | B | C | ||||
00 | SP | SP | 00 | 11011001100 | 53 | U | U | 53 | 11011101110 |
01 | ! | ! | 01 | 11001101100 | 54 | V | V | 54 | 11101011000 |
02 | “ | “ | 02 | 11001100110 | 55 | W | W | 55 | 11101000110 |
03 | # | # | 03 | 10010011000 | 56 | X | X | 56 | 11100010110 |
04 | $ | $ | 04 | 10010001100 | 57 | Y | Y | 57 | 11101101000 |
05 | % | % | 05 | 10001001100 | 58 | Z | Z | 58 | 11101100010 |
06 | & | & | 06 | 10011001000 | 59 | [ | [ | 59 | 11100011010 |
07 | ‘ | ‘ | 07 | 10011000100 | 60 | 60 | 11101111010 | ||
08 | ( | ( | 08 | 10001100100 | 61 | ] | ] | 61 | 11001000010 |
09 | ) | ) | 09 | 11001001000 | 62 | ^ | ^ | 62 | 11110001010 |
10 | * | * | 10 | 11001000100 | 63 | _ | _ | 63 | 10100110000 |
11 | + | + | 11 | 11000100100 | 64 | NUL | ` | 64 | 10100001100 |
12 | , | , | 12 | 10110011100 | 65 | SOH | a | 65 | 10010110000 |
13 | – | – | 13 | 10011011100 | 66 | STX | b | 66 | 10010000110 |
14 | . | . | 14 | 10011001110 | 67 | ETX | c | 67 | 10000101100 |
15 | / | / | 15 | 10111001100 | 68 | EOT | d | 68 | 10000100110 |
16 | 0 | 0 | 16 | 10011101100 | 69 | ENQ | e | 69 | 10110010000 |
17 | 1 | 1 | 17 | 10011100110 | 70 | ACK | f | 70 | 10110000100 |
18 | 2 | 2 | 18 | 11001110010 | 71 | BEL | g | 71 | 10011010000 |
19 | 3 | 3 | 19 | 11001011100 | 72 | BS | h | 72 | 10011000010 |
20 | 4 | 4 | 20 | 11001001110 | 73 | HT | i | 73 | 10000110100 |
21 | 5 | 5 | 21 | 11011100100 | 74 | LF | j | 74 | 10000110010 |
22 | 6 | 6 | 22 | 11001110100 | 75 | VT | k | 75 | 11000010010 |
23 | 7 | 7 | 23 | 11101101110 | 76 | FF | l | 76 | 11001010000 |
24 | 8 | 8 | 24 | 11101001100 | 77 | CR | m | 77 | 11110111010 |
25 | 9 | 9 | 25 | 11100101100 | 78 | SO | n | 78 | 11000010100 |
26 | : | : | 26 | 11100100110 | 79 | SI | o | 79 | 10001111010 |
27 | ; | ; | 27 | 11101100100 | 80 | DLE | p | 80 | 10100111100 |
28 | < | < | 28 | 11100110100 | 81 | DC1 | q | 81 | 10010111100 |
29 | = | = | 29 | 11100110010 | 82 | DC2 | r | 82 | 10010011110 |
30 | > | > | 30 | 11011011000 | 83 | DC3 | s | 83 | 10111100100 |
31 | ? | ? | 31 | 11011000110 | 84 | DC4 | t | 84 | 10011110100 |
32 | @ | @ | 32 | 11000110110 | 85 | NAK | u | 85 | 10011110010 |
33 | A | A | 33 | 10100011000 | 86 | SYN | v | 86 | 11110100100 |
34 | B | B | 34 | 10001011000 | 87 | ETB | w | 87 | 11110010100 |
35 | C | C | 35 | 10001000110 | 88 | CAN | x | 88 | 11110010010 |
36 | D | D | 36 | 10110001000 | 89 | EM | y | 89 | 11011011110 |
37 | E | E | 37 | 10001101000 | 90 | SUB | z | 90 | 11011110110 |
38 | F | F | 38 | 10001100010 | 91 | ESC | { | 91 | 11110110110 |
39 | G | G | 39 | 11010001000 | 92 | FS | | | 92 | 10101111000 |
40 | H | H | 40 | 11000101000 | 93 | GS | } | 93 | 10100011110 |
41 | I | I | 41 | 11000100010 | 94 | RS | ~ | 94 | 10001011110 |
42 | J | J | 42 | 10110111000 | 95 | US | DEL | 95 | 10111101000 |
43 | K | K | 43 | 10110001110 | 96 | FNC3 | FNC3 | 96 | 10111100010 |
44 | L | L | 44 | 10001101110 | 97 | FNC2 | FNC2 | 97 | 11110101000 |
45 | M | M | 45 | 10111011000 | 98 | SHIFT | SHIFT | 98 | 11110100010 |
46 | N | N | 46 | 10111000110 | 99 | Code C | Code C | 99 | 10111011110 |
47 | O | O | 47 | 10001110110 | 100 | Code B | FNC4 | Code B | 10111101110 |
48 | P | P | 48 | 11101110110 | 101 | FNC4 | Code A | Code A | 11101011110 |
49 | Q | Q | 49 | 11010001110 | 102 | FNC1 | FNC1 | FNC1 | 11110101110 |
50 | R | R | 50 | 11000101110 | 103 | START A | START A | START A | 11010000100 |
51 | S | S | 51 | 11011101000 | 104 | START B | START B | START B | 11010010000 |
52 | T | T | 52 | 11011100010 | 105 | START C | START C | START C | 11010011100 |
STOP | STOP | STOP | 11000111010 |
http://www.barcodeisland.com/code128.phtml
http://www.taltech.com/resources/intro_to_bc/bcsymbol.htm
http://www.taltech.com/resources/intro_to_bc/bcbascs.htm
转载请注明:在路上 » Code 128 Symbology Introduction