Why Code-128 with ^SF have one more digit? - zebra-printers

I have a problem with ^BC barcode using ZPL II.
My code looks like:
^XA
^LL248
^PW480
^BY1
^FO15,10
^BCN,100
^FC%,{,#^FD%y%m%d%H%M%S000^SF%%%%%%%%%%%%ddd,1^FS
^PQ5
^XZ
And for example the 5th label looks like this:
And my question is, why I have additional 0 between date/hour and serial number.
This sample code should look like 220929093311004 but it have four digits after date/time 2209290933110004.

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

How to append Serialized Numbers in ZPL II for a 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

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.

ZPL: (00) in human readable but not in barcode

I am trying to create a GS1-128 barcode using ZPL. The barcode should have parenthesis automatically filled in at the start of the human readable before and after the first two digits.
In other words, I would like to send a SSCC-18 string like this: "00206739780661776353", the human readable should show "(00)206739780661776353" and the barcode should read "00206739780661776353".
This is my code so far:
^XA
^FO360,630^BY2^A0N,30,30^BCN,100,Y,Y,N,D^FD00206739780661776353^FS
^XZ
If I manually input "^FD(00)206739780661776353^FS", the "(00)" shows in the human readable, but not in the barcode, which is what I want, but I am struggling to get the parenthesis around the first two digits automatically. Is there a way to do this in ZPL?
Any help or tips on where to look would be greatly appreciated!

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