Code 39 is widely used in many industries and is the standard for many government barcode specifications, including the U.S. Department of Defense. Code 39 is defined in American National Standards Institute (ANSI) standard MH10.8M-1983, and is also known as USD-3 and 3 of 9.
The Code 39 character set includes the digits 0-9, the letters A-Z (upper case only), and the following symbols: space, minus (-), plus (+), period (.), dollar sign ($), slash (/), and percent (%). A special start/stop character is placed at the beginning and end of each barcode. The barcode may be of any length, although more than 25 characters really begins to push the bounds of practical physical width.
Each character consists of 9 elements: 5 bars and 4 spaces. Each character includes 3 wide and 6 narrow elements. Characters are separated by an inter-character gap which is the same width as a narrow bar. The ratio of wide:narrow bar width may be in the range of 1.8 to 3.4. Barcodes with a narrow bar width of less than 0.020 inches (0.508mm) should have a ratio of at least 2.5. A ratio of 3.0 is recommended. Every Code 39 barcode should be preceded and followed by a quiet zone the width of at least 10 narrow bars.
Code 39 does not require a checksum, although a modulo 43 check digit may may be appended for increased data integrity (the Mod 43 checksum is seldom used). Code 39 is just about the only type of barcode in common use that does not require a checksum; each character is self-checking using the parity of wide and narrow elements. This makes it especially attractive for applications where it is inconvenient, difficult, or impossible to perform calculations each time a barcode is printed. For example, when performing a word processor merge operation there is generally no easy way to calculate a checksum if one of the merge data fields is to be barcoded. With Code 39, however, no checksum is needed; the merge template document must simply add a fixed asterisk (*) before and after the data and print the field using a Code 39 barcode font.
Extended Code 39 was developed to provide a means of encoding additional characters that are not normally part of the Code 39 character set (lower case characters and symbols). Extended charcters are encoded by a pair of normal Code 39 characters; for example, a lower case 'a' (not part of the standard Code 39 character set) can be encoded by the pair '+A'. A carriage return control code can be encoded by the pair '$M'. Click here for more details.
Code 39 can be read by just about every scanner on the market. It is widely used for in-house solutions; that is, applications where the barcodes will be used internally. It is also used for transferring data between companies. For example, the Automotive Industry Action Group (AIAG) defines a set of labeling standards for marking inter-company shipments within the industry; these labels use Code 39.
When planning a system, a useful technique to help protect against errors is to include a prefix character in every barcode. For example, product identification numbers might begin with a "P" while quantities might begin with a "Q". If the operator is asked to scan a part number, the scanner can check for the presence of the "P" prefix and immediately reject the scan if it is not there.