Launch

30% off your first month of Pro30% off month one$9.90 → $6.93

See plans
ZPL em PDF

Command · ^BC

^BC: the Code 128 barcode

^BC draws a Code 128, which is the symbology on the overwhelming majority of shipping labels. If your file has one large horizontal barcode with digits printed underneath it, it is almost certainly a ^BC.

Checked on September 1, 2026

The parameters, in order

The form is ^BCo,h,f,g,e,m. In ^BCN,120,Y,N,N that reads: no rotation, 120 dots tall, print the human-readable line, do not put it above the code, and no check digit.

As with every ZPL command, position is what matters rather than a name: leaving an empty slot between two commas keeps that parameter's default. The barcode's content comes in the ^FD that follows, not here.

  • o — orientation: N normal, R 90°, I 180°, B 270°.
  • h — bar height in dots. Does not include the human-readable line.
  • f — print the human-readable line of digits (Y or N).
  • g — put the human-readable line above the code instead of below.
  • e — include the UCC check digit (rare on a shipping label).
  • m — mode (N, U, A, D). D is the one that enables automatic subset mode.

The width comes from ^BY, not from ^BC

^BC sets the height but not the width. What controls how wide the bars are is ^BY, which applies to every barcode after it: ^BY3 gives a 3-dot module, so each narrow bar becomes 3 dots wide.

That is why a barcode “suddenly stopped fitting”: somebody changed the ^BY at the top and every bar on the label scaled with it. A module too narrow for the printer's resolution does the opposite — the bars merge and the scanner can no longer tell them apart.

When the payload is all digits

Code 128 has subsets, and an all-numeric payload can be encoded in subset C, which packs two digits per symbol and comes out half as wide. That is efficient, but not every downstream system expects it.

Carriers control this by writing the subset at the start of the ^FD: ^FD>:1234567890 starts in subset B and prevents the collapse to C. If your barcode came out half the width you expected, this is what happened.

Paste a ^BC and see the barcode drawn

Drag the file in, paste the code, or pick it from your device

.txt · .zpl · .prn · .zip · .pdf · .png · .jpg — 30 labels a day

The conversion happens in your browser: your file never leaves your device.How that works
Free, no signupNo uploadNo watermarkBatches of many filesPDF · PNG · ZIP

Questions

Frequently asked questions

What does ^BC mean in ZPL?

^BC draws a Code 128 barcode, the most common symbology on shipping labels. Its parameters set rotation, height and the human-readable line; the content comes in the ^FD immediately after.

How do I change the height and width of a ^BC?

Height is ^BC's own second parameter, in dots. Width is not its to set: ^BY controls that, fixing the module width for every barcode after it on the label.

Why won't the scanner read the barcode after printing?

Most often the label was printed with “fit to page”, which rescales the bars by a few percent — enough to break scanning. Print at 100% scale. If it persists, ^BY's module may be too narrow for the printer's resolution.

Why did my barcode come out narrower than expected?

An all-digit payload can collapse into Code 128's subset C, which packs two digits per symbol. Writing >: at the start of the ^FD starts in subset B and keeps the original width.

Other guides