Explain EAN-8 prefix with zeros in the end - barcode

I'm making the request to GS1 with EAN-8 barcode (54492493) and in the response, I'm getting the company preffix which is ending with three zeros (e.g. 5449000). If I'm trying to look up and change those zeros with other numbers (e.g. 54490017) I sill see the same company name.
So, here is the question: is it a kind of a convention if the second part of the prefix 000 then all rage from 5449 000 to 5449 999 belongs to that company or it is some exceptional case?

Related

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

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

Barcode EAN128 types

How to type the barcode on item arrival journal --> Line's EAN128/UCC128 field so that it give the item number and quantity?
For example:
Here if I type only 01M0001 and press enter it gives itemId "M0001" in Item number field and if I type only 30100 it gives the "100.00" in Quantity field.
What I want to do is to have item number and quantity together with one entered barcode.
It does not work if I type them together like it is on the picture.
How can I achieve it?
Thanks.
The decoding logic in class BarcodeEAN128, methode decode treats the GTIN (which is identified by the 01 application identifier) as a fixed length field of length 14 (compare to the macro EAN_LEN in the class declaration). Since your ItemId only has 5 characters, the following characters that would define the quantity are treated as part of the ItemId. If you increase the ItemId to 14 characters, it should decode the ItemId and quantity correctly.
See also GS1-128 for a list of application identifiers and their length.
You could try 241M0001+30100 or 241M0001+37100 (where + is a FNC1 character (since 241, 30 and 37 are all variable-length fields). Strictly, 30 and 37 should only be used with 01 or 02 - but these identifiers refer to 14-digit numeric fields.
Another possibility is 95M0001100 where the 5 could be 1 to 5. These are user-defined. Structure them as you will - but don't expect anyone outside of your organisation to understand them.
(strictly EAN-128 as she is designed - no comment on exactly how your application is going to interpret the data. Strictly, 01 and M0001 are incompatible since M0001 is not a valid GTIN)

Decoded barcode extra digits

I am trying to come to terms with how a barcode is decoded and generated by a scanner.
A note from the client says the following generated bar code consists of extra characters:
Generated Code: |2389299920014}
Extra Characters: Apparently the first two and last three characters are not part of the bar code.
Question
Are the extra characters attached by the bar code reader (therefore dependent on the scanner) or are they an intrinsic part of the barcode?
Here is a sample image of a barcode:
http://imageshack.us/a/img824/1862/dm6x.jpg
Thanks
[SOLVED] My apologies. This was just another one of those cases of 'shooting your mouth off' without doing proper research.
Solution The code is EAN13. The prefix and suffix are probably scanner dependent. The 13 digits in between are as follows (first digit from the left) Check Sum (Next 9 digits) Company Id + Item Id (Last 3 Digits ) GS1 prefix
It's hard to answer without understanding what format you are trying to encode, what the intended contents are, and what the purported contents are.
Some formats add extra information as part of the encoding process, but it does not become part of the content. When correctly encoded and decoded, the output should match the input exactly.
Barcodes encode what they encode and there is no data that is somehow part of the barcode but not somehow encoded in it.
EAN-13 has no scanner-dependent considerations, no. The encoding and decoding of a given number is the same everywhere. EAN-13 encodes 13 digits, so I am not sure what the 13 digits "in between" mean.
You mention GS1, which is something else. A family of barcodes in fact. You'd have to say what specifically you are using. The GS1 encodings are likewise not ambiguous or scanner-dependent. You know what you want to encode, you encode it exactly, it's read exactly.

Convert AWS URL to something shorter (without database)

We're serving up a bunch of images on our website that are actually hosted on AWS, and they're all named like 0E261DDA-CBB7-4B99-B863-6D7640DC2FD8.jpg. To keep it simple the path to these images via our website is basically keeping the same name for the image - we just strip out the dashes to make it a little bit shorter.
But since we'll be sharing the path to these images via twitter we'd love for the string to be even shorter still, but we don't want to use a database for URL shortening (either rolling our own or using someone else's). Would rather just have a lossless compression scheme on the string.
Given the fact that the AWS name is apparently only using hexadecimal characters, it would seem that converting it to ascii (after removing the dashes) would at least get us a bit of compression and it would be easy to do the lookup back to the actual path on the server.
Anybody have/seen a little bit of code that can spit out a URL-safe ascii equivalent to the aforementioned hex string?
Use a higher base. Hexidecimal is base 16. You could use a number of a higher base (36 is common in url shortners, but you could go up to 62 (10 digits, 26 upper case letters 26 lower case letters)
Your base 16 string:
0E261DDACBB74B99B8636D7640DC2FD8
In base 36:
U5LC6FOS2F9E70WW3KAT3KK8
In base 62 (bit less reliable, case sensitive):
QhJL1gbuZhsyJOIQ3ia0u

Algorithm for re-wrapping hard-wrapped text?

Let's say that I have written a custom e-mail management application for the company that I work for. It reads e-mails from the company's support account and stores cleaned-up, plain text versions of them in a database, doing other neat things like associating it with customer accounts and orders in the process. When an employee replies to a message, my program generates an e-mail that is sent to the customer with a formatted version of the discussion thread. If the customer responds, the app looks for a unique number in the subject line to read the incoming message, strip out the previous discussion, and add it as a new item in the thread. For example:
This is a message from Contoso customer service.
Recently, you requested customer support. Below is a summary of your
request and our reply.
--------------------------------------------------------------------
Contoso (Fred) on Tuesday, December 30, 2008 at 9:04 a.m.
--------------------------------------------------------------------
John:
I've modified your address. You can confirm my work by logging into
"Your Account" on our Web site. Your order should ship out today.
Thanks for shopping at Contoso.
--------------------------------------------------------------------
You on Tuesday, December 30, 2008 at 8:03 a.m.
--------------------------------------------------------------------
Oops, I entered my address incorrectly. Can you change it to
Fred Smith
123 Main St
Anytown, VA 12345
Thanks!
--
Fred Smith
Contoso Product Lover
Generally, this all works great, but there's one area that I've kind of putting off cleaning up for a while now, and it deals with text wrapping. In order to generate the pretty e-mail format like the one above, I need to re-wrap the text that the customer originally sent.
I've written an algorithm that does this (though looking at the code, I'm not entirely sure how it works anymore--it could use some refactoring). But it can't distinguish between a hard-wrap newline, an "end of paragraph" newline, and a "semantic" newline. For example, a hard-wrap newline is one that the e-mail client inserted within a paragraph to wrap a long line of text, say, at 79 columns. An end of paragraph newline is one that the user added after the last sentence in a paragraph. And a semantic newline would be something like the br tag, such as the address that the Fred typed above.
My algorithm instead only sees two newlines in a row as indicating a new paragraph, so it would make the customer's e-mail be formatted something like the following:
Oops, I entered my address incorrectly. Can you change it to
Fred Smith 123 Main St Anytown, VA 12345
Thanks!
-- Fred Smith Contoso Product Lover
Whenever I try to write a version that would re-wrap this text as intended, I basically hit a wall in that I need to know the semantics of the text, the difference between a "hard-wrap" newline and a "I really meant it like a br"-type newline, such as in the customer's address. (I use two newlines in a row to determine when to start a new paragraph, which coincides with how the majority of people seem to actually type e-mails.)
Anyone have an algorithm that can re-wrap the text as intended? Or is this implementation "good enough" when weighing the complexity of any given solution?
Thanks.
You could try to check if a newline has been inserted to keep the line length below a maximum (aka hard wrap): Just check for the longest line in the text. Then, for any given line, you append the first word of the following line to it. If the resulting line exceeds the maximum length, the line break probably was a hard wrap.
Even simpler you might just consider all breaks in (maxlength - 15) <= length <= maxlength as being hardwraps (with 15 just being an educated guess). This would certainly filter out intentional breaks as in addresses and stuff, and any missed break in this range wouldn't influence the result too badly.
I have two suggestions, as follows.
Pay attention to punctuation: this will help you to distinguish between a "hard-wrap" newline and an "end of paragraph" newline (because, if the line ends with a full stop, then it's more likely that the user intended it to be an end-of-paragraph.
Pay attention to whether a line is much shorter than the maximum line length: in the example above, you might have text that's being "hard-wrapped" at 79 characters, plus you have address lines which are only 30 characters long; because 30 is much less than 79, you know that the address lines were broken by the user and not by the user's text-wrap algorithm.
Also, pay attention to indents: lines which are indented with whitespace from the left may be supposed to be new paragraphs, broken from the previous lines, as they are on this forum.
Following Ole's advice above, I re-worked my implementation to look at a threshold. It seems to handle most scenarios I throw at it well enough without me having to go nuts and write code that actually understand the English language.
Basically, I first scan through the input string and record the longest line length in the variable inputMaxLineLength. Then as I'm rewrapping, if I encounter a newline that has an index between inputMaxLineLength and 85% of inputMaxLineLength, then I replace that newline with a space because I think it's a hard wrap newline--unless it's immediately followed by another newline, because then I assume that it's just a one-line paragraph that just happens to within that range. This can happen if someone types out a short bulleted list, for example.
Certainly not perfect, but "good enough" for my scenario, considering the text is usually half-mangled by a previous e-mail client to begin with.
Here's some code, my a-few-hours-old implementation that probably still underwraps in a few edge cases (using C#). It's a lot less complicated than my previous solution, which is nice.
Source Code
And here's some unit tests that exercise that code (using MSTest):
Test Code
If anyone has a better implementation (and no doubt a better implementation exists), I'll be happy to read your thoughts! Thanks.

Resources