ZPLToolkit

^BM

MSI Bar CodePreview: partial

A numeric symbology built for shelf labels in retail warehouses, and still found on them.

Syntax

^BMo,e,h,f,g,e2

Parameters

ParameterDescription and accepted valuesIf omitted
oRotation of the bar code on the label.N normal, R 90°, I 180°, B 270°Last ^FW value, else N
eWhich check digits to append: A mod 10, B none, C two mod 10s, D mod 11 then mod 10.A, B, C or D — which check digits to addB
hBar height in dots. Overrides the height set by ^BY for this field only.1 to 32000 dotsHeight set by ^BY
fPrints the digits underneath the bars as text.Y or N — print the human-readable lineY
gMoves that text above the bars instead.Y or N — put that line above the barsN
e2Includes the check digit in that text.Y or N — include the check digit in that lineN

How it works

^BM prints MSI, a variant of Plessey developed for inventory control. It encodes digits only, four bits per digit, each bit a pair of bars — which makes it wide, but also extremely tolerant of the printing quality a shelf-edge label gets.

It survives almost entirely in warehouse and retail shelf labelling, where the installed base of scanners and the labels themselves have outlasted several generations of better symbologies.

MSI's check digits are its complicated part: the `e` parameter picks between mod 10, two mod 10s, mod 11 with mod 10, and none. Which one a system expects is part of its specification, not something to guess.

Example

ZPL
^XA
^BY2,3,80
^FO60,60^BMN,B,80,Y,N,N^FD1234567^FS
^XZ

Rendering…

A seven-digit MSI with the mod 10 check digit selected, at a module width of 2 dots.
Open in the viewer

How the preview on this site handles it

Drawn with a real MSI encoder, so it scans, and rotation is applied. The check-digit scheme from `e` is not applied to the bars, so a symbol that asks for one scans a character shorter here than it will on the printer. The wide-to-narrow ratio from ^BY is not applied either.

Common mistakes

  • Guessing the check-digit scheme. Four are on offer and the receiving system accepts exactly one; the wrong choice scans cleanly and means the wrong thing.
  • Sending non-digits. MSI is numeric only.
  • Choosing it for a new system. MSI is wide and weakly specified — ^BC does the same job in less space.

See also