How to create a GS1-128 barcode using ZPL with a check digit - barcode

I need to generate a GS1-128 barcode using ZPL. It needs to include a check digit. I do not seem to get the check digit.
Here is my code:
^BCN,088,Y,Y,Y,D^FD(00)00123456000057763^FS
The first "Y" is saying to print the human readable along with the
barcode. The third "Y" is supposed to tell it to include a check digit.
I'm not seeing the check digit in the human readable, my scanner is not
displaying a check digit, so I'm assuming it is also not in the barcode?
Here is from the spec:
SSCC Barcode Structure (20 digits)
Application Identifier = (00)
Positions of SSCC barcode:
1 = Extension Digit (0-9 assigned by Vendor)
2 = 0 if mfg id # assigned by GS1 US;
1-9 if mfg id # assigned by another GS1 MO
3 thru 8 = 6-digit mfg id #
9 thru 17 = 9-digit serial id # -must be unique for one year
18 = Modulo 10 check character

TLDR;
^BCN,088,Y,Y,,D
^FD(00)001234560000577630^FS
The third Y does include a Checkdigit, but not the one you want (ZPL Manual, p73):
Mod 103 check digit is always there. It cannot be turned on or off. Mod 10 and 103 appear together with [the third Y] turned on.
When you use D, it will automatically add a checkdigit(ZPL Manual, p80):
The printer automatically
determines if a check digit is required, calculate it, and print it.
But more importantly, it expects you to send 18 digits :
Parentheses and spaces can be in the field data. '00' application identifier, followed
by 17 characters, followed by bogus check digit place holder.
It'll strip out the 18th digit and replace it in both the barcode and the human readable part.
https://www.zebra.com/content/dam/zebra/manuals/printers/common/programming/zpl-zbi2-pm-en.pdf

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

Scanning Zebra Printed ZPL CODE-128 Barcode not returning single integer value for AI(37) but works if value is two integers?

I am trying to print a GS1-128 Barcode using ZPL and when I print this out for some reason everything prints fine except the number in the AI (37), I get 3715 (the 4 is missing), if I change the 4 to a two char integer value such as 04 or 14 I am able to scan it in the barcode.
^BCN,390,N,N,N
^FD>;>8(02)19410525013094(37)4>8(15)200330>610BAT100^FS
The only issue is the system I am working with stores the value for AI 37 as integers, so if the QTY is 4 then it will print as a 4, but i am getting nothing at the moment.
Any assistance would be appreciated.
Thank you,
Omeil
You are manually selecting the numeric mode of code128, using >; at the start of the data field. Numeric mode encodes pairs of digits into single codewords. And unfortunately the printer silently drops any unpaired digits.
You must either zero-pad your data when in subset-C or switch to ZPL's automatic mode for code128, which does a good job at minimizing symbol length. For your data, keep the >; start mode and then let the automatic-mode shift or latch to subset-B as needed.
The answer seems to be replacing >8 with >6 for AI 37 to print quantities of single or odd digits! eg 4, 103, etc

GS1-128 ZPL generation with GTIN (01) with only 13 digits

I'd like to generate a GS1-128 barcode like this
(01)5410413901026(17)170612(10)LOT100
in ZPL code
^BY5,3,160^FT372,1506^BCB,,N,N,N
^FD>;>8015410413901026>817170612>810>6LOT100^FS
My problem is the 01 code is normally exactly 14 digits, here my EAN is only 13 digits. So my barcode is misformed.
I have already tried to put >8 at the begin of every new AI without result.
EAN is always 13 digits. Add a leading zero to convert to a 14-digit GTIN. (A digit other than 0 at the start identifies a wholesale container of the item.)
Ref: https://stackoverflow.com/a/56673316/323917
Parentheses and spaces can be in the field data. '00' application identifier, followed by 17 characters, followed by bogus check digit place holder.
Ref: https://www.zebra.com/content/dam/zebra/manuals/printers/common/programming/zpl-zbi2-pm-en.pdf
I have verified the barcode from https://zxing.org/w/decode and https://online-barcode-reader.inliteresearch.com/

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."

Convert EAN-8 to EAN-13

I have an 8 digit EAN code which I would like to convert to an EAN-13 code.
Do you know of any algorithm on how to calculate this?
Or is it simply adding five zeros to the beginning of the EAN-8?
E.g. EAN-8(1234 5678) becomes EAN-13(00000 1234 5678)?
Adding five leading zeros to a valid EAN-8 will give you a valid EAN-13.
EAN-8 is just another name for GTIN-8, and EAN-13 is another name for GTIN-13. You can always convert shorter GTINs to longer GTINs by left-padding them with zeros, see http://en.wikipedia.org/wiki/Global_Trade_Item_Number#Format.
EAN-8 is a short version of EAN-13, composed by 7 digits and 1 check digit.
There is no conversion available between EAN-8 and EAN-13 sorry :(

Resources