zpl.tools
Bar codes

^BP - Plessey Bar Code

Early numeric symbology, largely replaced by its MSI descendant.

^BP prints a Plessey symbol, a pulse-width-modulated numeric code from the early days of bar coding. ^BM MSI is its descendant and replaces it in most work, because MSI offers a choice of check-digit scheme and Plessey does not. Use ^BP only where existing equipment expects it.

Syntax

^BPo,e,h,f,g

Support

Supportedparsed: full · state: full · rendered: full

Every documented parameter renders the same output Labelary produces.

Labelary renders this command.

Parameters

oBar code orientationoptional · one of a set

Rotation of the symbol and interpretation line.

Default
the orientation set by ^FW, which itself defaults to N
Invalid value
discarded, and the default applies. The renderer reports an unrecognized character as invalid, and uses the default.
Test coverage
No documented value is exercised by a test (N, R, I, B). The invalid-value rule is not pinned by a test.
N
No rotation (default)
R
Rotated 90° clockwise
I
Rotated 180°. The symbol reads upside down
B
Rotated 270° clockwise
eShow check digitoptional · Y or N

Whether the check digit appears in the interpretation line.

Default
N
Invalid value
discarded, and the default applies. The renderer reports any character except Y or N, and hides the check digit.
Test coverage
Values exercised: Y. Not exercised: N. The invalid-value rule is not pinned by a test.
Y
Show it
N
Hide it (default)
hBar code heightoptional · dots

Height of the bars, without the interpretation line.

Default
the height set by ^BY, which itself defaults to 10 dots
Accepted range
1 to 32000 dots
Invalid value
clamped to the nearest allowed value. We measured this against live Labelary on 2026-07-12. The renderer clamps an out-of-range value to the violated bound, and does not ignore it.
Test coverage
Bounds pinned: below the minimum (0), above the maximum (33000). No test at the minimum or maximum. The invalid-value rule is not pinned by a test.
fPrint interpretation lineoptional · Y or N

Whether the renderer prints the interpretation line.

Default
Y
Invalid value
discarded, and the default applies. The renderer reports any character except Y or N, and uses the default.
Test coverage
No documented value is exercised by a test (Y, N). The invalid-value rule is not pinned by a test.
Y
Print the text (default)
N
Print the symbol only
gInterpretation line aboveoptional · Y or N

Where the interpretation line sits. It has no effect without that line.

Default
N
Invalid value
discarded, and the default applies. The renderer reports any character except Y or N, and uses the default.
Test coverage
No documented value is exercised by a test (Y, N). The invalid-value rule is not pinned by a test.
Y
Above the symbol
N
Below the symbol (default)

Behavior

The character set is the ten digits. Each character is eight elements: four bars and four adjacent spaces. Plessey is not self-checking, so a scanner cannot detect a misread from the symbol alone.

The printer computes and encodes the check digit whatever the second argument says. That argument only decides whether the digit also appears in the interpretation line. We measured this against Labelary on 2026-07-30: ^FD123456 at the default N prints 123456.

Plessey is a two-width symbology, so the ^BY ratio applies over the guide's range of 2.0:1 to 3.0:1. The width of the label limits the field data, or its length for a rotated symbol.

The renderer parses ^BP and draws no symbol. It reports a diagnostic and does not default to a text run, so the symbol position stays blank. No ZPL symbology encodes Plessey specifically. Where the reading equipment accepts it, ^B3 Code 39 renders and carries the same digits.

Tested behavior

Differences from the specification

zpl.tools against the ZPL II guide

Where our renderer behaves differently from the specification.

  • The guide takes the default orientation from ^FW. The renderer applies ^FW to text fields only. A barcode after ^FWR prints unrotated unless its own o argument rotates it. — not pinned by a test

Example

Six digits at a 3-dot module width, with no check digit requested:

^XA
^FO50,50^BY3
^BPN,N,80,Y,N
^FD123456^FS
^XZ

Open in viewer

  • ^BY Bar Code Field DefaultSets the module width, wide-to-narrow ratio and height that every later bar code inherits.
  • ^FD Field DataSupplies the text or barcode content of the field.
  • ^FO Field OriginSets the top-left corner of the next field.
  • ^FT Field TypesetPositions the next field by its text baseline rather than its top edge.
  • ^BM MSI Bar CodePlessey-derived numeric symbology with four selectable check-digit schemes, used on library and retail shelf labels.