^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,eSupport
Every documented parameter renders the same output Labelary produces.
Labelary renders this command.
Parameters
oBar code orientationoptional · one of a setRotation of the symbol and interpretation line.
- Default
- the orientation set by
^FW, which itself defaults toN - 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 · dotsHeight 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 NWhether the renderer prints the interpretation line.
- Default
- Y
- Invalid value
- discarded, and the default applies. The renderer reports any character except
YorN, 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 NWhere 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
YorN, 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 NWhether 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
YorN, 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 code | Write 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^FWto text fields only. A barcode after^FWRprints unrotated unless its ownoargument 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
Related commands
^BYBar Code Field DefaultSets the module width, wide-to-narrow ratio and height that every later bar code inherits.^FDField DataSupplies the text or barcode content of the field.^FOField OriginSets the top-left corner of the next field.^FTField TypesetPositions the next field by its text baseline rather than its top edge.^B3Code 39 Bar CodeThe general-purpose alphanumeric symbology, readable by every scanner and the safest default for internal labeling.