The Plessey code was originally developed in England and gave rise to several variations including the MSI, Anker, and Telxon codes. Of these, the MSI Plessey is still in use in the USA; it is used in libraries, and is often used for retail grocery shelf marking.
The MSI Plessey Code is is a pulse-width modulated non-self checking code. Each character is represented by 4 bars; a narrow bar represents a binary 0 and a wide bar represents a binary 1. The bars have the binary weights 8-4-2-1. It is possible to encode the digits 0 through 9 and the letters A through F, although this code is most often used just for numeric information. The start character is a single wide bar, and the stop character is two narrow bars.
A MSI Plessey barcode always includes a Modulo 10 checksum, and may include a second checksum. The method for calculating the checksum is a bit unusual:
1. Form a new number using every other digit from the original number. If the original number contains an even number of digits, start with the second digit; if an odd number of digits, start with the first. For example, if the original number is 123456, the new number will be 246; if the original number is 12345, the new number will be 135. The last digit in the new number will always be the last digit in the original number.
2. Multiply the new number by 2. Using the original number 12345 as an example, 135 x 2 = 270.
3. Add up all the digits in the result. For example, 2 + 7 + 0 = 9.
4. Add to this result all of the digits from the original number not used in step 1. So 9 + 2 + 4 = 15.
5. Perform a Modulo 10 division on the result and subtract the result from 10. If the result is 10, change it to 0. Using our example...10 - (15 Modulo 10) = 5. This is the checksum.
If a second checksum is required, append the first checksum to the original string and perform the calculation all over again including the first checksum. In our example, the checksum for 12345 would be 5. The second checksum would be calculated using 123455 as the original string.
Some applications may require a Modulo 11 checksum, and this is calculated in a very different way from the Modulo 10 checksum:
1. Assign a weight to each digit position of the original number. The weighting factors are 2, 3, 4, 5, 6, 7 starting with the rightmost character and working to the left. The rightmost character receives a weight of 2, the next to the left a weight of 3, and so on. After the weight of 7 is used, go back to 2 and repeat.
Original number: 9 4 3 4 5 7 8 4 2 Assigned weights: 4 3 2 7 6 5 4 3 2
2. Multiply each digit by its assigned weight and add the products:
(9x4)+(4x3)+(3x2)+(4x7)+(5x6)+(7x5)+(8x4)+(4x3)+(2x2) = 195
3. Perform a Modulo 11 division and subtract the result from 11; if the result is 11, change it to 0:
195 Modulo 11 = 8 (the remainder of 195 / 11) 11 - 8 = 3
4. Append the checksum (3 in this case) to the end of the original number.