From: D Yuniskis on
Hi Paul,

Paul Hovnanian P.E. wrote:
> D Yuniskis wrote:
>
> [snip]
>> Yes, that was my initial plan. Relying *solely* on that, however,
>> leaves you open to "collisions" with other "unrelated labels"
>> in that same symbology -- UNLESS YOU CAN GUARANTEE THAT YOUR
>> LABELS WILL BE "INVALID" (violate some "given") WRT THOSE
>> OTHER "valid" labels.
>
> One way you can ensure non-collisions is to select a part of the UPC (or
> whatever) code space that you are guaranteed not to see in your
> application. For example, if you are developing an app for auto parts, code
> everything as some sort of vegetable.

Yes. I'm essentially trying to do this by picking a symbology
that isn't likely to *ever* be encountered (E.g., ABC Codabar).
Then, increasing the unlikelihood by bastardizing the
normal characteristics of the label (check digit).
Then, adding features that are seldom used (continuation code)
in nonstandard ways. Finally, building meaning into the
format of the label itself (sparse data, checksums, etc)

Since *printing* the labels incurs the same cost regardless
of which symbology/content I use, it doesn't cost me anything
to increase the uniquenexx of the labels.

> Your app will still break if you bring it into the grocery store. It might
> also break if some third party has appropriated the same idea as you have
> for labels that will appear in your domain.

Yup. Unless you can control what stuff you get exposed to,
you can't *guarantee* behavior. E.g., if you have a 1KW load
on the AC mains but can't control the mains, then you
can't guarantee the ~10A fuse will NEVER blow.

Given how ubiquitous barcodes are nowadays, its too hard
to keep foreign labels away from your scanner(s).

RFID tags were a nice alternative (laser'ed serial numbers)
but they are 10 times more expensive. :<
From: D Yuniskis on
1 Lucky Texan wrote:
> If it is extremely important to decrease the odds of scanning a false

-----------^^^^^^^^^

No. I just don't want to end up "being unlucky" and *chosing*
a symbology/format that I later discover some vendor is using
to label their parts; or their shipping containers; or their
invoices; or...

(labels are physical items so changes can be expensive)

> positive, perhaps there could be special lighting or filters used.
> maybe a UV illuminated label or a specific color/special inks?
>
> this may be overkill as capacity - but might be easily recognized as
> the 'correct' label due to color;
> http://en.wikipedia.org/wiki/High_Capacity_Color_Barcode

I suspect readers are expensive. And, if it is unique today,
will it be tomorrow? (I suspect that particular code will
go away -- too expensive to produce and scan when compared to
other monochromatic 2D codes)
From: D Yuniskis on
Hi Walter,

Walter Banks wrote:
>
> D Yuniskis wrote:
>
>> The problem with the UPC route is it would cause you to use
>> up huge blocks of numbers needlessly. E.g., imagine if
>> UPS/FedEx used UPC labels as their "package identifiers".
>> These are essentially disposable identifiers yet putting
>> them into a shared/administered namespace would waste
>> big pieces of that namespace needlessly.
>
> UPC registration comes in two parts. A registered
> part identifying the owner and a block of numbers
> for the registered owner to use.

Yes, similar to OUI's, ISBN publishers, etc.

>>> False positives are rare, once format, validation and context
>> Only if you can pick a unique combination of the above!
>> Doing this blindly has no guarantees. As I said, if I
>> arbitrarily picked a 6 character Code 128 identifier
>> and used that, eventually I *will* scan a label on a Dell
>> PC and find a coincidental match with some other object
>> in my database. Granted, you can recover from this.
>> But, it is a problem that need not happen if I had picked
>> some other scheme.
>
> Barcodes can be made arbitrarily reliable and unique by
> trading information space for reliability. Using a standard
> transport layer and modest amount of validation of the
> record layer can be very reliable. Changing barcode
> format to an obscure format will not change the
> overall reliability very much.

It doesn;t affect the reliability of the *scanning* (decoding).
But, can affect how likely you are to encounter a foreign
label (same symbology, etc.) and misrecognize it as one of
your own.

> In a well implemented barcode system false positives
> are rare.
>
>> Yes. So you either have to know which barcode to scan
>> or have to encode information in the label that lets
>> the system figure out which label you've scanned and
>> prompt you to scan some other (if it is awaiting some
>> specific piece of information).
>>
>> I want to be able to have a label scanned and be able
>> to tell the user authoritatively that it is the "right"
>> label to scan and/or the right label 9item) he is looking
>> for.
>
> In your proposal, some of the symbol space is translated
> into the transportation layer. It is a tradoff but not a
> significant one.

Again, I'm just creating simple identifiers. There is no
semantic content in the label. That all resides in a
database.

All the label needs to do is say:
- this is my identifier
- I *am* one of "your" labels and not something that simply
"looks" like one (at whatever level of detail)

>>>> I wonder how many Code 128 labels
>>>> have "SN" (Serial Number) as their first two characters?
>>> Probably quite a few and a lot more Code39. Fewer
>>> using the same field format for the actual serial number
>>> fields which encode manufacture data, product id and
>>> actual identifying number.
>> But 123-45-5678 from Dell means something different from
>> 12-34-556-78 from T.I. (bogus examples). I.e. the
>> namespace (messagespace) isn't standardized. I suspect
>> folks like Dell make this work by having *lengthy* labels,
>> possibly with large hamming distances or lots of enforced
>> redundancy -- and by controlling the items that can
>> get "on the floor" *with* "foreign labels".
>
> The Dell barcodes are on the bottom of most laptops, most
> are actually quite short. They have made the choice to scan
> the appropriate label. Interesting enough the 6 or 7 character
> service tag is still not likely to be miss read. It is has an alpha
> numeric format with record type information built into the
> order and range of the alphanumeric characters.

So they (Dell) have constrained their choice of "valid"
service tag identifiers. But that doesn't prevent me from
reading one of their service tags and interpreting it
as if it was one of *my* "identifier labels" (assuming
I adopted a seven character alphanumeric identifier in
the same symbology). Granted, the chances of hitting
a *particular* service tag are slim. But, depending on
how you create your (my) identifiers (does AAAABC come
before or after 123456?), you could bump into their
portion of that message space almost immediately (or not).

>> Loosely speaking, inventory tracking. But, using the labels
>> throughout -- to identify parts, to identify stock locations,
>> to identify shipping manifests, to identify the individuals
>> picking/packaging/shipping the items, etc. Their just
>> manifestations of "universal identifiers". I just want to
>> minimize the chance of some *other* (foreign) label being
>> erroneously interpreted as "one of mine" and having the
>> process stop while folks sort out why the item the item they
>> seek isn't in "this" location ("Oh, you scanned a barcode
>> that *Digikey* had applied to a component; *not* the little
>> blue plastic placard that we use to identify locations!")
>
> What you are trying to do is a common problem. Making
> the barcode unreadable to most readers is one solution
> but there are many other effective solutions most related
> to either central registries or common transport layer
> and symbols with individual record format.
>
> False reads of the kind you describe almost never happens
> in a real environment. Too many simultaneous failures
> would need to happen. Barcode standards evolved in
> order to prevent chaos of this type.

The standards for most codes don't prescribe anything about
their deployment. They just handle encoding data into a
particular format/symbology.

Most vendors have added a litany of odd "hacks" to allow you
to bend their scanner to *your* hacks (i.e., stripping
off fixed prefixes, etc.).

I think the "chaos" is typically averted simply by limiting
the types of labels encountered in a particular application
domain. I.e., I doubt any of the scanners on Dell;s
assembly line are configured to recognize 2-of-5 labels.
Likewise, I doubt any used in the supermarket are likely
to read Code 39 label. I.e., the nature of the business
tries to enforce (implicitly or explicitly) some discipline
on the labels encountered.

E.g., none of my Digikey parts ever carry a Codabar label
(though I imagine there might be some that carry a UPC
label)

So, you either tailor the solution to a particular
industry or application (e.g., MSI tends to be used
in inventory control) *or* come up with an approach
that can coexist with competing/interfering symbologies
and message formats (e.g., "YUNISKIS 12345 SIKSINUY")

I suspect if I make a 'reasonably good' *choice*
(i.e., not *design*) and put enough other aspects
into the overall "system" (e.g., "The labels
look like *this*"), then the real chances of problems
are minimal.

OTOH, if I just *pick* something and hope for the
best, Murphy will be waiting around the corner
with a SEG.
From: Bit Farmer on
Paul Hovnanian P.E. wrote:
> D Yuniskis wrote:
>
> [snip]
>> Yes, that was my initial plan. Relying *solely* on that, however,
>> leaves you open to "collisions" with other "unrelated labels"
>> in that same symbology -- UNLESS YOU CAN GUARANTEE THAT YOUR
>> LABELS WILL BE "INVALID" (violate some "given") WRT THOSE
>> OTHER "valid" labels.
>
> One way you can ensure non-collisions is to select a part of the UPC (or
> whatever) code space that you are guaranteed not to see in your
> application. For example, if you are developing an app for auto parts, code
> everything as some sort of vegetable.
>
> Your app will still break if you bring it into the grocery store. It might
> also break if some third party has appropriated the same idea as you have
> for labels that will appear in your domain.
>

The UCC/GS1 (former name/current name)handled the registration for UPCs'.

The UPC A code is most commonly used for grocery and general merchandise.
The first digit of the UPC is the number system. These select the usage of
the code that follows:

UPC-A encodes 12 numeric digits.

* 0: regular UPC codes
* 1: reserved
* 2: random weight items marked at the store
* 3: National Drug Code and National Health Related Items code
* 4: no format restrictions, for in-store use on non-food items
* 5: for use on coupons
* 6: reserved
* 7: regular UPC codes
* 8: reserved
* 9: reserved

For articles, the next five digits are the manufacturer's identifier.
The next 5 are the article number. The last is the check digit.

Now, not all codes are assigned. Some like 2 and 4 are for in store use.
That is they are for general use. Many frequent shopper cards are coded
using number system 2 or 4. Thus they can be scanned like a regular item
but have meaning only to the system that is reading them.

b. Farmer
From: D Yuniskis on
Bit Farmer wrote:
> Paul Hovnanian P.E. wrote:
>> D Yuniskis wrote:
>>
>> [snip]
>>> Yes, that was my initial plan. Relying *solely* on that, however,
>>> leaves you open to "collisions" with other "unrelated labels"
>>> in that same symbology -- UNLESS YOU CAN GUARANTEE THAT YOUR
>>> LABELS WILL BE "INVALID" (violate some "given") WRT THOSE
>>> OTHER "valid" labels.
>>
>> One way you can ensure non-collisions is to select a part of the UPC (or
>> whatever) code space that you are guaranteed not to see in your
>> application. For example, if you are developing an app for auto parts,
>> code
>> everything as some sort of vegetable.
>>
>> Your app will still break if you bring it into the grocery store. It
>> might
>> also break if some third party has appropriated the same idea as you have
>> for labels that will appear in your domain.
>>
>
> The UCC/GS1 (former name/current name)handled the registration for UPCs'.
>
> The UPC A code is most commonly used for grocery and general merchandise.
> The first digit of the UPC is the number system. These select the usage of
> the code that follows:
>
> UPC-A encodes 12 numeric digits.
>
> * 0: regular UPC codes
> * 1: reserved
> * 2: random weight items marked at the store
> * 3: National Drug Code and National Health Related Items code
> * 4: no format restrictions, for in-store use on non-food items
> * 5: for use on coupons
> * 6: reserved

I thought 6 was also used for coupons?

> * 7: regular UPC codes
> * 8: reserved
> * 9: reserved
>
> For articles, the next five digits are the manufacturer's identifier.
> The next 5 are the article number. The last is the check digit.
>
> Now, not all codes are assigned. Some like 2 and 4 are for in store use.
> That is they are for general use. Many frequent shopper cards are coded
> using number system 2 or 4. Thus they can be scanned like a regular item
> but have meaning only to the system that is reading them.

.... meaning the *person* scanning them must ensure that this is
"one of our cards (UPC codes)".