Per this document, you require ZPL firmware version 6.6 or later along with ZPL such as the following:
^XA
^FO10,10
^BQN,2,5
^FD>83018099999>82411184174>810MFATA00001>891EA^FS
^XZ
However there are reports that this fails and that it is currently impossible to reliably encode GS1 Application Identifier syntax data in ZPL...
With recent firmware, >8
appears to be sufficient to set the "FNC1 implied in first position" mode indicator in the encoded bitstream, which flags that GS1 AI syntax is in effect by modifying the Symbology Identifier to "]Q3" when the barcode is read. However, the same >8
character combination does not result in an FNC1 non-data character being encoded in the role of a separator following an AI that does not have a predefined length. (Neither does the escape sequence _1
which is used in a similar context with Datamatrix.)
Generic detail about FNC1 in QR Code
The internal encoding of QR Code does not have a distinct codeword (bit sequence) to represent the FNC1 non-data character. Instead, if (and only if) "FNC1 in first" mode is in effect, when in Alphanumeric Encodation the %
character is hijacked to represent the FNC1 (with a data "%" character being escaped as %%
), and in Byte mode a literal GS
control character (ASCII value 29) is used to represent the FNC1:
"Where the UCC/EAN [former name for GS1] specifications call for the FNC1 character
(in other symbologies which use this special character) to be used as a data field separator (i.e. at the end of
a variable-length data field), QR Code symbols shall use the % character in Alphanumeric mode or
character GS (byte value 1DHEX) in Byte mode to perform this function. If the % character occurs as part of the
data it shall be encoded as %%. Decoders encountering % in these symbols shall transmit it as ASCII/JIS8
value 1DHEX, and if %% is encountered it shall be transmitted as a single % character." — ISO/IEC 18004:2015 §6.4.8.1
There isn't even a way to represent FNC1 in Numeric encodation (the most common encodation in effect at the end of most GS1 AI values) so it is necessary to switch encodations just to terminate the AI value. (QR Code is not an efficient carrier for GS1 AI syntax data!)
I suspect that the ZPL implementers have tied themselves in knots here because the actual bit sequence that must be inserted into the bitstream to encode FNC1 is entirely dependant on the encoding mode that is in effect at the time that a separator must be inserted, and to optimise the symbol size it is necessary to segment the message into a number of encodation sequences that are efficient for the data that they encode. (The optimal sequence depends on the data to encode, yet the data to encode depends on the current sequence.)