What Code 49 is
Code 49 is a stacked linear symbology that re-flows a restricted alphabet (digits, capital letters, and a handful of symbols, plus the full remaining ASCII range via a 2-codeword shift sequence) into 2 to 8 short rows stacked on top of each other, separated by thin guard bars -- a narrower, taller footprint than a single-row linear symbol needs. It also supports an optional Structured Append Mode (SAM) for linking a message across multiple physically separate symbols. bwip-js draws it with its own dedicated matrix renderer -- confirmed directly: bwipp_code49 builds its own row/codeword layout and calls bwipp_renmatrix() itself, with no delegation to another symbology's own function.
Generate it now
Enter any text or data to see a live preview -- Code 49 accepts any ASCII byte value 0 to 127.
Valid input
Up to 500 bytes is accepted, and every byte must be ASCII value 0-127 (bwipp.code49badCharacter rejects anything above that, bwipp.code49emptyData rejects an empty value, bwipp.code49inputTooLong rejects longer input). How many rows that data needs depends on the row count: leaving rows on its automatic default lets bwip-js pick the smallest row count (2-8) that fits; fixing rows to a value too small for the payload is rejected outright rather than silently re-encoded.
Key options
Supported options include rows, rowheight, and sepheight. Real, literal defaults: rows 0 (auto-select the smallest row count, 2-8, that fits), rowheight 8 (points per data row), sepheight 1 (points for the thin separator bar drawn between rows). There is no includetext option at all -- Code 49 has no human-readable text line of its own. A separate, mutually exclusive pair of options (sam, a 2-digit "Nth of M" code; append) supports linking a long message across multiple physically separate Code 49 symbols.
Output and printing
Export SVG for vector-precise label artwork or PNG for a quick proof.
Common uses
Code 49 predates Code 16K (a later, similarly stacked symbology already covered separately in this catalog) and saw use in small-item marking -- electronics components, small parts -- where the item is too narrow for a full-length linear barcode. Its optional Structured Append Mode exists specifically for messages too long for a single symbol's own row limit, split across several separately-printed symbols that a compatible reader reassembles.
Example
See the live preview above, seeded with a bwip-js-verified valid value.
Size guidance
Each row uses the same fixed module width as every other row; only the number of rows (2 to 8) and the row/separator heights change the overall bounding box.
Troubleshooting
A rejected value with a fixed rows setting usually means the payload needs more rows than the fixed count allows -- either raise rows or leave it on its automatic default. Combining sam and append together is also rejected outright -- they are mutually exclusive linking mechanisms.
Related formats
Related formats: the separately-covered Code 16K generator (a later, similarly stacked symbology built on Code 128's own character set instead of Code 49's own alphabet).
FAQ
Why was my value rejected when a fixed row count is set?
A fixed row count must have enough capacity for the encoded payload -- Code 49's own automatic default already picks the smallest row count that fits, so a fixed value lower than that is rejected rather than silently overridden.
Can I use lowercase letters or punctuation?
Yes -- Code 49 accepts the full ASCII range 0-127. Characters outside its own restricted 49-entry base alphabet (digits, capital letters, and a handful of symbols) are represented using an extra shift codeword, so mixed-case or punctuation-heavy input renders a larger symbol than the same-length all-uppercase, all-digit input would.