From: D Yuniskis on
Hi Walter,

Walter Banks wrote:
>> I need to pick a barcode symbology that is unlinkey to be
>> encountered in day-to-day items to minimize conflicts. E.g.,
>> UPC is non-starter.
>>
>> I only need 8 decimal digits so no need for the more complex
>> codes. I prefer a 2 dimensional code as it increases the
>> available choices for scanners. I'll probably add a few
>> digits for my own checksum (above and beyond whatever the
>> code itself supports). So, maybe 10-12 digits, total.
>>
>> I suspect ABC Codabar is probably the most obscure (at
>> least the least likely to be encountered *on* something).
>> I can even get sneaky and print multipart labels to
>> be even *more* unique.
>>
>> But, I'd be open to other suggestions. [I can't roll my own
>> code as I want to use COTS scanners.]
>
> Barcode protocols are composed of a transport layer and
> data record complete with validation. UPC scanners
> in a supermarket for example will reject UPC product
> codes that it can not recognize. UPC code groups are
> registered.

Yes, but handheld scanners just recognize valid "encodings".
I.e., they don't examine the content of the message/label
to determine if the "product exists". E.g., the validity
of a UPC label for the "local" group can't be validated
a priori.

(UPC is a bad choice, for me, as you can find UPC labels too
commonly -- too hard to minimize the risk of a false positive)

> If I was doing this I would probably use a common
> barcode format like code39 and encrypt the data
> and add error detection/correction for your application.
> The reason is it is well developed and would work
> reliably. Code39 specifically can be easily printed
> on adhesive labels.

Code 39 is also widely used and runs the same risk as
UPC -- only different. :> It seems like Code 128, 39
and UPC are the biggest offenders in terms of risk of
conflict. And, since they are all free-form codes
(unconstrained content), there's no way of *reliably*
guaranteeing that some "foreign" label won't conflict
with my "identifier space".

I don't want folks to have to take on the added
responsibility of "scribbling out" (or over-spraying)
any preexisting labels on packaging, merchandise, etc.
Likewise, I want a simple rule: "If you're trying to
scan a label and the system doesn't recognize it, you're
scanning the *wrong* label -- keep looking :> "

(i.e., high first pass read rate, low error rate)
From: Walter Banks on


D Yuniskis wrote:

> Hi Walter,
>
> Walter Banks wrote:
>
> >
> > Barcode protocols are composed of a transport layer and
> > data record complete with validation. UPC scanners
> > in a supermarket for example will reject UPC product
> > codes that it can not recognize. UPC code groups are
> > registered.
>
> Yes, but handheld scanners just recognize valid "encodings".
> I.e., they don't examine the content of the message/label
> to determine if the "product exists". E.g., the validity
> of a UPC label for the "local" group can't be validated
> a priori.
>
> (UPC is a bad choice, for me, as you can find UPC labels too
> commonly -- too hard to minimize the risk of a false positive)

Code39 is a transport layer of a limited symbol set. A barcode
record is the actual message consisting of symbol characters that
has meaning. A generic barcode reader will read the transport
characters relatively reliably but without additional programming
will not validate the record read or interpret the information.


> > If I was doing this I would probably use a common
> > barcode format like code39 and encrypt the data
> > and add error detection/correction for your application.
> > The reason is it is well developed and would work
> > reliably. Code39 specifically can be easily printed
> > on adhesive labels.
>
> Code 39 is also widely used and runs the same risk as
> UPC -- only different. :> It seems like Code 128, 39
> and UPC are the biggest offenders in terms of risk of
> conflict. And, since they are all free-form codes
> (unconstrained content), there's no way of *reliably*
> guaranteeing that some "foreign" label won't conflict
> with my "identifier space".

It is actually unlikely the a foreign labile will conflict
with your identifier space. UPC is the classic case
user register the part *their* barcode that makes their
case unique.

http://www.abblabels.com/Products/html/UPCBarcodeLabels.htm

Think is the UPC registration for example as a preamble
followed by the actual information. The registration
has the added advantage of making available the
owner information available to most people using UPC
reader equipment. Registration makes your UPC record unique

This process make false positives very rare.

Code39 does not have the same registration process. In
most of the applications using Code39 record format
and check characters are sufficient to prevent undetected
errors.

For example creating a Code 39 barcode record for
you application might have

*DJ1234567855*

would be a Code39 labile about 1.5" long with
DJ to identify it as yours
8 Data digits
55 two check digits.

All records records you are interested would start with
DJ. Since the text is usually printed in the label as well
there would be a limited ability for false positives.



Regards,


Walter..
--
Walter Banks
Byte Craft Limited
http://www.bytecraft.com







From: Tony on
Walter Banks wrote:

>
> D Yuniskis wrote:
>
>> Hi,
>>
>> I need to pick a barcode symbology that is unlinkey to be
>> encountered in day-to-day items to minimize conflicts. E.g.,
>> UPC is non-starter.
>>
>> I only need 8 decimal digits so no need for the more complex
>> codes. I prefer a 2 dimensional code as it increases the
>> available choices for scanners. I'll probably add a few
>> digits for my own checksum (above and beyond whatever the
>> code itself supports). So, maybe 10-12 digits, total.
>>
>> I suspect ABC Codabar is probably the most obscure (at
>> least the least likely to be encountered *on* something).
>> I can even get sneaky and print multipart labels to
>> be even *more* unique.
>>
>> But, I'd be open to other suggestions. [I can't roll my own
>> code as I want to use COTS scanners.]
>>
>
> Barcode protocols are composed of a transport layer and
> data record complete with validation. UPC scanners
> in a supermarket for example will reject UPC product
> codes that it can not recognize. UPC code groups are
> registered.
>
> If I was doing this I would probably use a common
> barcode format like code39 and encrypt the data
> and add error detection/correction for your application.
> The reason is it is well developed and would work
> reliably. Code39 specifically can be easily printed
> on adhesive labels.
>

Code 39 is very wasteful as it covers ascii, ITF (interleave 2 of 5)
would be more efficent space wise (if that is important to you)for
decimal only. More space = more characters and fixed digits.

I used this for a encryption system that needed to be programmed with
unique number and readable later on in the process. False reads were
important, although the reader was built into a test fixture. I also
used 3 (fixed) digits for a customer code, of which there were only 3 or
4 customers. The test fixture was set for the appropriate customer at
the start of a shift, non matches where rejected.

The fixed parts help reduce the possibility of a false hit and You can
further reduce your chances of a false read by fixing the number of
digits in the code. Most scanner can be programmed for this. They can
also be programmed whether there the last digit is a check digit or not,
and whether to transmit this.

I also used bearer bars top and bottom to help reduce bad reads further.

--
Tony
From: D Yuniskis on
Hi Walter,

Walter Banks wrote:
>
>>> Barcode protocols are composed of a transport layer and
>>> data record complete with validation. UPC scanners
>>> in a supermarket for example will reject UPC product
>>> codes that it can not recognize. UPC code groups are
>>> registered.
>> Yes, but handheld scanners just recognize valid "encodings".
>> I.e., they don't examine the content of the message/label
>> to determine if the "product exists". E.g., the validity
>> of a UPC label for the "local" group can't be validated
>> a priori.
>>
>> (UPC is a bad choice, for me, as you can find UPC labels too
>> commonly -- too hard to minimize the risk of a false positive)
>
> Code39 is a transport layer of a limited symbol set. A barcode
> record is the actual message consisting of symbol characters that
> has meaning. A generic barcode reader will read the transport
> characters relatively reliably but without additional programming
> will not validate the record read or interpret the information.

The scanner will ensure the label adheres to the requirements
of the symbology (i.e., proper bar/space ratios, proper
check digit, adequate whitespace bracketing the label).
Beyond that, the "content" of the label is "application
specific".

>>> If I was doing this I would probably use a common
>>> barcode format like code39 and encrypt the data
>>> and add error detection/correction for your application.
>>> The reason is it is well developed and would work
>>> reliably. Code39 specifically can be easily printed
>>> on adhesive labels.
>> Code 39 is also widely used and runs the same risk as
>> UPC -- only different. :> It seems like Code 128, 39
>> and UPC are the biggest offenders in terms of risk of
>> conflict. And, since they are all free-form codes
>> (unconstrained content), there's no way of *reliably*
>> guaranteeing that some "foreign" label won't conflict
>> with my "identifier space".
>
> It is actually unlikely the a foreign labile will conflict
> with your identifier space. UPC is the classic case
> user register the part *their* barcode that makes their
> case unique.
>
> http://www.abblabels.com/Products/html/UPCBarcodeLabels.htm

Yes, but *I* can opt to use UPC encoding to represent my
data. Doing so suggests that, sooner or later, I will
encounter an item with a "real" UPC barcode printed on it
that my "system" will mistakenly take as "one of my own".
I.e., a box of Cheerios coincidentally has thet same
"identifier" (encoded into the body of the UPC label)
as my "Capacitor, Electrolytic, 25uF, 16WVDC, radial".
(the *scanner* can't tell that it's a box of cheerios!)

> Think is the UPC registration for example as a preamble
> followed by the actual information. The registration
> has the added advantage of making available the
> owner information available to most people using UPC
> reader equipment. Registration makes your UPC record unique
>
> This process make false positives very rare.

Only rare for folks who are part of that "registered identifier
space". Sort of like OUI's -- I can program *any* MAC into
my NIC. But, there is no guarantee that I won't end up
programming a MAC that isn't already in use, somewhere
(belonging to some other organization).

This is the problem I am trying to anticipate and avoid.

> Code39 does not have the same registration process. In
> most of the applications using Code39 record format
> and check characters are sufficient to prevent undetected
> errors.
>
> For example creating a Code 39 barcode record for
> you application might have
>
> *DJ1234567855*
>
> would be a Code39 labile about 1.5" long with
> DJ to identify it as yours
> 8 Data digits
> 55 two check digits.
>
> All records records you are interested would start with
> DJ. Since the text is usually printed in the label as well
> there would be a limited ability for false positives.

Yes, this was my point about adding extra digits (I'm
avoiding other characters simply because those other
characters restrict you to using a smaller set of
symbologies). But, you can't *know* (for sure) what
"message/label formats" other people may use. I.e.,
tomorrow, you may start doing business with a company who
labels *all* of their products with "DJ" numbers. :-/
(the longer the 'preface' or other "unique-ifying" data,
the less the chance of random conflict ... "YUNISKIS"
might be a suitably unique choice for a prefix! :> )

For example, Dell uses 6 character identifiers for their
"service tags". What are the chances that using a similar
format would result in eventually coming up with a "hit"
that was unintended? I wonder how many Code 128 labels
have "SN" (Serial Number) as their first two characters?

I am, instead, looking to pick a symbology that is less
likely to be encountered. *Or*, bend the rules regarding
*my* choices of symbols such that "everyone else's"
look invalid to me. I.e., you're advocating making them
look invalid by relying on "DJ" to make them unique;
I'm thinking, instead, of violating some inherent
aspect of the label format -- check digit -- that they
*wouldn't*... because they would want the scanner to
do the check digit verification *for* them whereas I
am willing to take on that task myself -- using a different
"scheme".

For example, using multipart Codabar labels (*very* uncommon)
but printing them as "single part" labels.
From: D Yuniskis on
Hi Tony,

Tony wrote:
> Code 39 is very wasteful as it covers ascii, ITF (interleave 2 of 5)
> would be more efficent space wise (if that is important to you)for
> decimal only. More space = more characters and fixed digits.

Yes, I was acknowledging this in my initial decision to
just stick to pure numeric identifiers (they are just
identifiers -- no need for them to have human readable
content). This gives me the most choices between symbologies.
Also *can* give me better character densities and/or
decoding reliability (by storing less data in a given
space *if* done properly).

> I used this for a encryption system that needed to be programmed with
> unique number and readable later on in the process. False reads were

Not sure I understand your application; did the "programmer"
then print a barcode label on the device? (which was
later read)

> important, although the reader was built into a test fixture. I also

With a non contact scanner, you can usually do really good at
reader accuracy (and first pass read rate should be damn near
"six nines"). I've designed wand-type scanners that had to
hit 99% FPRR and 99% accuracy (which is tough because the
user can't be guaranteed to scan at a constant speed *and*
the range of speeds varies over two or more orders of
magnitude!)

> used 3 (fixed) digits for a customer code, of which there were only 3 or

OK, so you presumably chose those "valid" codes to maximize
their hamming distances?

> 4 customers. The test fixture was set for the appropriate customer at
> the start of a shift, non matches where rejected.
>
> The fixed parts help reduce the possibility of a false hit and You can
> further reduce your chances of a false read by fixing the number of
> digits in the code. Most scanner can be programmed for this. They can

I can handle that in the system software. I.e., I can validate
any identifiers as "mine" by checking:
- symbology used (scanner can tell me this)
- message format (digits, preamble, check digit, etc.)
- "does the identifier exist in the database"?

> also be programmed whether there the last digit is a check digit or not,
> and whether to transmit this.

Is this true of all scanners? I have found it to be the case
of the few that I have examined but haven't seen that as a
"guaranteed feature" (i.e., does The Industry require this
as a "basic feature" or is it an enhancement offered by many/all
scanner vendors?)

> I also used bearer bars top and bottom to help reduce bad reads further.

Ah, good point! Though I would think that an examination of
the "read data" could give you this information, as well
(i.e., short read, bad check digit, etc.)

My problem will be making sure some *other* label isn't
accidentally scanned AS IF it was "mine". E.g., I chuckle
watching folks at the "self check-out" at the library
scanning their books and getting frustrated because the
system doesn't recognize the barcode (because they are
scanning the EAN code instead of the library's *specific*
"item number" label). Poorly designed system has the scanner
beeping even on bad scans (so folks who just listen for the
beep wonder why their receipt doesn't have all the items
listed on it!) as well as failing to inform the patron that
"you've scanned the wrong label" (since the system could
easily know that the scanner just saw an EAN label instead
of the library's specific label!)

[people who "assemble" systems from OTS subsystems often don't
think things through completely, IME]