MSI Barcode

Last updated
MSI barcode for the number 1234567 with Mod 10 check digit MSI Barcode.svg
MSI barcode for the number 1234567 with Mod 10 check digit

MSI (also known as Modified Plessey) is a barcode symbology developed by the MSI Data Corporation, based on the original Plessey Code symbology. It is a continuous symbology that is not self-checking. MSI is used primarily for inventory control, marking storage containers and shelves in warehouse environments.

Contents

Character set and binary lookup

The MSI bar code represents only digits 09; it does not support letters or symbols.

Each digit is converted to 4 binary-coded decimal bits. Then a 1 bit is prepended and two 0 bits are appended.

Finally, each bit is printed as a bar/space pair totalling three modules wide. A 0 bit is represented as 1/3 bar followed by 2/3 space, while a 1 bit is represented as 2/3 bar followed by 1/3 space.

Binary mapping

Each digit and guard character is represented by a binary number, as shown in the table below.

CharacterBinaryBarsMap
Start1110
00000▍▍▍▍100100100100
10001▍▍▍▋100100100110
20010▍▍▋▍100100110100
30011▍▍▋▋100100110110
40100▍▋▍▍100110100100
50101▍▋▍▋100110100110
60110▍▋▋▍100110110100
70111▍▋▋▋100110110110
81000▋▍▍▍110100100100
91001▋▍▍▋110100100110
Stop00▍▍1001

To produce a barcode image from this map, one simply must consider the digit 1 to be a black bar and the digit 0 to be a white bar and produce an image accordingly.

Check digit calculation

The MSI barcode uses one of five possible schemes for calculating a check digit:

Mod 10 Check Digit

When using the Mod 10 check digit algorithm, a string to be encoded 1234567 will be printed with a check digit of 4:

 12345674

The Mod 10 check digit algorithm [1] uses the Luhn algorithm.

Mod 11 Check Digit

1. Reverse the string to be encoded (in this case 1234567).

 Let S be the reverse of the string to be encoded  S = 7654321

2. The string is then "weighted" using a repeating weighting factor pattern. There are two modulo 11 algorithms which use different repeated weighting factor patterns: the IBM algorithm which uses (2,3,4,5,6,7), and the NCR algorithm which uses (2,3,4,5,6,7,8,9). Get the sum of the string by looping through each character and multiply it by a weight from 2 to 7 (IBM) or 2 to 9 (NCR) depending on its position. If the weight's value exceeds the highest number (7 or 9), reset the weight back to 2.

 This example is using the IBM modulo 11 algorithm with a weighting pattern of (2,3,4,5,6,7)  Let X = the final product of the string to encode.  X = 7 * 2  X = 6 * 3  X = 5 * 4  X = 4 * 5  X = 3 * 6  X = 2 * 7  X = 1 * 2
 X = 14 + 18 + 20 + 20 + 18 + 14 + 2   X = 106

3. Mod the sum by 11, subtract the result from 11, and then apply the mod 11 function again.

 Let C equal the check digit.  C = (11 - (X mod 11)) mod 11  C = (11 - (106 mod 11)) mod 11  C = (11 - 7) mod 11  C = 4 mod 11  C = 4

The check digit is 4.

Mod 1010 check digit

Simply calculate the Mod 10 check digit the first time and then calculate it again with the previous result and append the result of the second Mod 10 Calculation to the string to be encoded.

Mod 1110 check digit

Same as Mod 1010 but the first calculation should be a Mod 11 Check digit.

Example

As an example, we will generate an MSI barcode for the number sequence 1234567 using the most common Mod 10 check digit methodology.

The check digit (as calculated above) for this sequence is 4.

Once you have calculated your check digit, simply map each character in the string to be encoded using the table above as a reference to get the binary map of the bar code; remember to precede the code with "start" and to end it with "stop" For example, to map the string 1234567 with a Mod 10 check digit it would produce the following binary map:

CharacterMapComment
Start110The start character
1100100100110The number 1
2100100110100The number 2
3100100110110The number 3
4100110100100The number 4
5100110100110The number 5
6100110110100The number 6
7100110110110The number 7
4100110100100The check digit 4
Stop1001

This results in the following barcode:

MSI Barcode.svg

Related Research Articles

<span class="mw-page-title-main">ISBN</span> Unique numeric book identifier since 1970

The International Standard Book Number (ISBN) is a numeric commercial book identifier that is intended to be unique. Publishers purchase or receive ISBNs from an affiliate of the International ISBN Agency.

<span class="mw-page-title-main">Universal Product Code</span> Barcode symbology used for tracking trade items in stores

The Universal Product Code is a barcode symbology that is used worldwide for tracking trade items in stores.

<span class="mw-page-title-main">Barcode</span> Optical machine-readable representation of data

A barcode or bar code is a method of representing data in a visual, machine-readable form. Initially, barcodes represented data by varying the widths, spacings and sizes of parallel lines. These barcodes, now commonly referred to as linear or one-dimensional (1D), can be scanned by special optical scanners, called barcode readers, of which there are several types.

<span class="mw-page-title-main">Code 39</span> Variable length, discrete barcode symbology

Code 39 is a variable length, discrete barcode symbology defined in ISO/IEC 16388:2007.

POSTNET is a barcode symbology used by the United States Postal Service to assist in directing mail. The ZIP Code or ZIP+4 code is encoded in half- and full-height bars. Most often, the delivery point is added, usually being the last two digits of the address or PO box number.

A check digit is a form of redundancy check used for error detection on identification numbers, such as bank account numbers, which are used in an application where they will at least sometimes be input manually. It is analogous to a binary parity bit used to check for errors in computer-generated data. It consists of one or more digits computed by an algorithm from the other digits in the sequence input.

The Luhn algorithm or Luhn formula, also known as the "modulus 10" or "mod 10" algorithm, named after its creator, IBM scientist Hans Peter Luhn, is a simple check digit formula used to validate a variety of identification numbers.

<span class="mw-page-title-main">Aztec Code</span> Type of matrix barcode

The Aztec Code is a matrix code invented by Andrew Longacre, Jr. and Robert Hussey in 1995. The code was published by AIM, Inc. in 1997. Although the Aztec Code was patented, that patent was officially made public domain. The Aztec Code is also published as ISO/IEC 24778:2008 standard. Named after the resemblance of the central finder pattern to an Aztec pyramid, Aztec Code has the potential to use less space than other matrix barcodes because it does not require a surrounding blank "quiet zone".

<span class="mw-page-title-main">Code 128</span> Barcode format

Code 128 is a high-density linear barcode symbology defined in ISO/IEC 15417:2007. It is used for alphanumeric or numeric-only barcodes. It can encode all 128 characters of ASCII and, by use of an extension symbol (FNC4), the Latin-1 characters defined in ISO/IEC 8859-1. It generally results in more compact barcodes compared to other methods like Code 39, especially when the texts contain mostly digits. Code 128 was developed by the Computer Identics Corporation in 1981.

<span class="mw-page-title-main">Code 93</span>

Code 93 is a barcode symbology designed in 1982 by Intermec to provide a higher density and data security enhancement to Code 39. It is an alphanumeric, variable length symbology. Code 93 is used primarily by Canada Post to encode supplementary delivery information. Every symbol includes two check characters.

Modular exponentiation is exponentiation performed over a modulus. It is useful in computer science, especially in the field of public-key cryptography, where it is used in both Diffie–Hellman key exchange and RSA public/private keys.

<span class="mw-page-title-main">International Article Number</span> Standard barcode system used in global trade

The International Article Number is a standard describing a barcode symbology and numbering system used in global trade to identify a specific retail product type, in a specific packaging configuration, from a specific manufacturer. The standard has been subsumed in the Global Trade Item Number standard from the GS1 organization; the same numbers can be referred to as GTINs and can be encoded in other barcode symbologies defined by GS1. EAN barcodes are used worldwide for lookup at retail point of sale, but can also be used as numbers for other purposes such as wholesale ordering or accounting. These barcodes only represent the digits 0–9, unlike some other barcode symbologies which can represent additional characters.

Codabar is a linear barcode symbology developed in 1972 by Pitney Bowes Corp. It and its variants are also known as Codeabar, Ames Code, NW-7, Monarch, Code 2 of 7, Rationalized Codabar, ANSI/AIM BC3-1995 or USD-4. Although Codabar has not been registered for US federal trademark status, its hyphenated variant Code-a-bar is a registered trademark.

<span class="mw-page-title-main">RM4SCC</span> Barcode system used by Royal Mail

RM4SCC is the name of the barcode character set based on the Royal Mail 4-State Bar Code symbology created by Royal Mail. The RM4SCC is used for the Royal Mail Cleanmail service. It enables UK postcodes as well as Delivery Point Suffixes (DPSs) to be easily read by a machine at high speed.

<span class="mw-page-title-main">Code 11</span> Barcode symbology

Code 11 is a barcode symbology developed by Intermec in 1977, and it is used primarily in telecommunications. The symbol can encode any length string consisting of the digits 0–9 and the dash character (-). A twelfth code represents the start/stop character, commonly printed as "*". One or two modulo-11 check digit(s) can be included.

Plessey Code is a 1D linear barcode symbology based on pulse-width modulation, developed in 1971 by The Plessey Company plc, a British-based company. It is one of the first barcode symbology, and is still used rarely in some libraries and for shelf tags in retail stores, in part as a solution to their internal requirement for stock control. The system was first used in the early 1970s by J.Sainsbury to identify all of its products on supermarket shelves for its product restocking system.

<span class="mw-page-title-main">Industrial 2 of 5</span>

Industrial 2 of 5. is a variable length, discrete, two width symbology. Industrial 2 of 5 is a subset of two-out-of-five codes.

<span class="mw-page-title-main">Codablock</span>

Codablock is a family of stacked 1D barcodes which was invented in Identcode Systeme GmbH in Germany in 1989 by Heinrich Oehlmann. Codablock barcodes are based on stacked Code 39 and Code 128 symbologies and have some advantages of 2D barcodes.

<span class="mw-page-title-main">Matrix 2 of 5</span>

Matrix 2 of 5 is a variable length, discrete, two width symbology. Matrix 2 of 5 is a subset of two-out-of-five codes. Unlike Industrial 2 of 5 code, Matrix 2 of 5 can encode data not only with black bars but with white spaces.

<span class="mw-page-title-main">DotCode</span> Type of matrix barcode

DotCode is two-dimensional (2D) matrix barcode invented in 2008 by Hand Held Products company to replace outdated Code 128. At this time, it is issued by Association for Automatic Identification and Mobility (AIM) as “ISS DotCode Symbology Specification 4.0”. DotCode consists of sparse black round dots and white spaces on white background. In case of black background round dots, creating barcode, can be white. DotCode was developed to use with high-speed industrial printers where printing accuracy can be low. Because DotCode by the standard does not require complicated elements like continuous lines or special shapes it can be applied with laser engraving or industrial drills.

References