zpl.tools
Bar codes

^BA - Code 93 Bar Code

Denser successor to Code 39, with two mandatory check characters and full ASCII through shift pairs.

^BA prints a Code 93 symbol, a denser replacement for Code 39 with the same uses. It has six elements per character instead of nine, two compulsory check characters, and the same full-ASCII coverage through paired characters.

Prefer Code 93 over ^B3 Code 39 where width matters and one organization controls the printer and the scanner. Prefer ^BC Code 128 in every other case, because Code 128 has much wider deployment.

Syntax

^BAo,h,f,g,e

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
Values exercised: 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
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
Values exercised: 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
Values exercised: Y, N. The invalid-value rule is not pinned by a test.
Y
Above the symbol
N
Below the symbol (default)
eShow check digitsoptional · Y or N

Whether the two check characters appear in the interpretation line. The renderer always encodes them.

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

Behavior

Every symbol carries two check characters, C and K. The printer always encodes them, and the e argument only decides whether they also appear in the interpretation line. We measured this against Labelary on 2026-07-30. ^FDCODE 93 with e set to Y prints CODE 93E0, which is the payload and the two computed check characters.

Code 93 reaches the full 128-character ASCII set through paired characters. ZPL cannot pass the four Code 93 control codes directly, so the field data uses printable stand-ins:

Control codeWrite instead
Ctrl $&
Ctrl %'
Ctrl /(
Ctrl +)

The stand-ins always occur in pairs. &A encodes SOH and (J encodes ). The interpretation line prints the character that the pair represents and not the pair in the field data.

Code 93 has a fixed print ratio, so the ^BY ratio argument has no effect and only the module width and the height apply. The width of the label limits the field data. For a rotated symbol, the length of the label limits it.

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

An upper-case alphanumeric payload with the two check characters shown in the interpretation line:

^XA
^FO50,50^BY3
^BAN,80,Y,N,Y
^FDCODE 93^FS
^XZ

Open in viewer