How to append Serialized Numbers in ZPL II for a barcode? - barcode

I'm trying to create a series of labels with a 128 Barcode that has as its information two serialized numbers that increment with every label printed. I can create the counters no problem but I can't append the information so it prints as the Barcode.
^FX Third section with bar code.
^BY10,2
^FO70,740^BC N,130,Y,N,N,A^FDto sort^FS
^FX Serial Numbers
^CF0,90
^FO70,940^FDSeals:^FS
^CFB,70
^FO300,940^SN2647001,100,^FS
^CF0,90
^FO780,940^FDTo:^FS
^CFB,70
^FO920,940^SN2647100,100^FS
^FX Labels
^PQ5

Take a look at the ^SF command. It uses ^FD to seed the serialization, and a mask for formatting. For your example usage:
^FD2647001-2647000^SFddddddd%ddddddd,100%0000100^FS

Related

ZPL Barcode missing front 2 digit

I am trying to print an EAN barcode vertically on a label with below ZPL code:
^FO895,273^BY3^BUB,200,Y,N
^FO895,261^FD9827755779090^FS
I'm expecting the output as 9827755779090. However, it prints out as 277557790900.
It cuts off the first 2 digit(98) and adds (0) on the final digit. Can I know how do I fix my code?
^BE is the EAN command. It will calculate the check digit for you.
^BE; EAN-13 Bar Code. Description: The ^BE command is similar to the
UPC-A bar code. It is widely used throughout Europe and Japan in the
retail marketplace. The EAN-13 bar code has 12 data characters, one
more data character than the UPC-A code. An EAN-13 symbol contains the
same number of bars as the UPC-A, but encodes a 13th digit into a
parity pattern of the left-hand six digits. This 13th digit, in
combination with the 12th digit, represents a country code. • ^BE
supports fixed print ratios. • Field data (^FD) is limited to exactly
12 characters. ZPL II automatically truncates or pads on the left with
zeros to achieve the required number of characters.
Here is the fixed code (with changed ^FO).
^XA
^FO95,273^BY3^BEB,200,Y,N
^FD9827755779090^FS
^XZ
You are feeding the barcode more data than the specification is set for.
Plus, you are not creating an EAN code, but a UPC(12).
Specification :
UPC (technically refers to UPC-A) consists of 12 digits
Specification of ZPL II on UPC-A (code ^BU) section 5.34 specifically states:
^FD : exactly 11 characters. ZPL II auto-truncates or pads ON THE LEFT with 0 to achieve required number of characters.
(I added italics)
So you get
^FO895,261^FD9827755779090^FS
----------- << these 11 digits
It just so happens that the UPC checksum of 27755779090 is 0
This is why you would get same result for ^FO895,261^FD999999988889827755779090^FS
To get exactly what you want, use
^FO895,261^FD98277557790^FS
.. this will get a checksum of 4

Line feed problems with ZPL QR Code on Zebra Printer

I'm having some issues with the using line feeds / carriage returns in ZPL with my Zebra LP2844z in CUPS (Raspberry pi).
According to Zebra's documentation and example, I just need to enable hex command using the FH switch, and use the hex encoded "_OD_0A" for a carriage return.
https://www.zebra.com/us/en/support-downloads/knowledge-articles/including-carraige-return-line-feed-in-qr-barcode-using-zpl.html
This example works fine until I try and add more lines:
^XA
^FO100,100
^BQN,2,10
^FH
^FDMM,B0024First Line _0D_0A Second Line _0D_0A Third Line _0D_0A Fourth Line _0D_0A ^FS
^XZ
This results in the following generated QR code:
And contains the following text:
First Line
Second LinTHIRD LINE UFOURTH LINE U
Something was going wrong at what appeared to be around the 24th byte which I realised coincides with the bytes "represented" (as mentioned in the documentation).
I then increased this further and found that I need to change the bytes representation in the "FDMM,B0nnn" switch for every byte in the string. If I increase it over what appears to be an arbitrary number (let's say 100 bytes) it messes up the QR code text again.
That might work for static text where I know the length of the string in bytes. However, I want to create these barcodes dynamically and each string will have a different byte length.
How can I handle it?
I was having the same problem. This is what I have done:
^XA^MUM
^FT50,50^BQN,2,1^FH_^FDMM,AFirst Line,B0002_0d_0a,ASecond Line,B0002_0d_0a,AThird Line,B0002_0d_0a,AAll the lines that you need^FS
^MUM^XZ
This is the document that I have used to know what I need to do:
https://support.zebra.com/cpws/docs/general/B_Switch_to_Add_Special_Characters_QR_BarCode.pdf
I hope it will be helpful for you also.

Feeding multiple values into a barcode leaves a '0' barcode. How do I remove this barcode entirely?

I have a system currently set up that creates a barcode for a UPC on a label. This works for single items, but sometimes I have more than one item that tries to feed into that barcode, and when that happens it is set to have no value.
However, instead of there being no barcode, there is actually a small barcode that scans in as 0. How do I ensure that no barcode appears?
^FT350,698^BY2,,75
^BCN,75,N,N,N^FD$ItemBarCode$^FS
"$ItemBarCode$" is an item from a populated table that I do not control, and there can be as many items as needed. The customer requires no barcode when there are multiple items and requires a barcode when there is one. Their sample does not use a typical UPC style barcode.
You say you don't have control over the data in the table, but do you have control over the content/format of $ItemBarCode$?
Have the variable contain the ^FD prefix and ^FS suffix (and remove from the ZPL code). When the variable is blank/empty, nothing will print.
According to the software developer consultant, the solution is to create a customization in the system's code that allows for a logic line to fix this error. This is not something that can be fixed within ZPL itself, rather, there will be two separate labels. For instance,
if single item then print X
if multiple items then print Y
I have same situation. My solution is input barcode command in single line with its data and terminator ^FD and ^FS. So during parsing label file line by line, if data is zero or error than remove entire line. And its work for me

How to control the width of ZPL alphanumeric code 128 barcode

I am printing a code 128 barcode in ZPL, which must be 78mm. The following numeric barcode works as expected:
^XA^FO141,330^BY3,3,^BCR,243,Y,N,N,A^FD12001752107481808006410360011596^FS^XZ
But changing one number to 'X' near the end of the barcode, means the barcode is now printed as 91mm:
^XA^FO141,330^BY3,3,^BCR,243,Y,N,N,A^FD1200175210748180800641036001X596^FS^XZ
Changing the barcode module with from 3 to 2 with ^BY2 makes the barcode 60mm which is not acceptable.
Any suggestions?
Code 128 has different Subtypes. One of them can encode two numbers in one barcode-character. Your Zebra optimizes your barcode because you use the
^BCo,h,f,g,e,m
Command with Parameter m = mode set to
A = Automatic Mode
This analyzes the data sent and automatically
determines the best packing method. The full
ASCII character set can be used in the ^FD
statement — the printer determines when to shift
subsets. A string of four or more numeric digits
causes an automatic shift to Subset C.
Switching modes and printing alphanumeric makes your barcode longer.

ZPL - Barcode Missing a digit when printed

I am trying to print a Code 128 barcode on a label using the following the piece of ZPL with a Zebra ZP 450 printer:
^BY3^BCN,112,N^FO090,660^FD>;>89102100^FS
I'm expecting the barcode to scan as "9102100". However, when I scan the printed barcode, it reads as "910210" -- cutting off the final digit.
If I change the last digit, it is still cut off. But if I add more digits onto the end, e.g. "9102100357", the barcode correctly reads as "9102100357".
Why am I "losing" a digit in this particular case?
The >; inside of your ^FD block is telling the code 128 barcode to go into a subset (subset C in this case) which forces the data in the barcode to be numeric pairs (00 - 99). Any data that is not supplied in numeric pairs is ignored. If you put a letter in there, it will ignore that pair. In your case 9102100 has an odd number of numbers, so it ignores the last one. If for example, you add another 0, it will put all the letters in the barcode.
The ;> which puts the barcode in Subset C is not the default. Subset B or :> is the default which will allow any character to be encoded in the barcode. So you can replace the ;> with :>, or just remove the ;> entirely, and it will print out properly.
Check out the ^BC documentation in the ZPL programming manual for more information about Code 128 subsets and data validation
See pg 92 of the ZPL Programming Guide.
This issue may have been fixed in the firmware update, see below:
Example: This is an example with the mode parameter set to D*:
^XA
^PON
^LH0,0
^BY2,2.5,145
^FO218,343
^BCB,,Y,N,N,D
^FD(91)0005886>8(10)0000410549>8(99)05^FS
^XZ
D* — When trying to print the last Application Identifier with an odd number of characters, a problem
existed when printing EAN128 bar codes using Mode D. The problem was fixed in firmware version
V60.13.0.6."

Resources