Jonathan Washington determined how to Read a Barcode without a reader, and using his description it’s fairly easy.

The numbers have a bit of a delicious pattern; let me expand a bit from the Wired How-to Article, which presented this example:

The Digits themselves break down as follows:

digit | code |
---|---|

* | 0-0110 |

0 | 00-110 |

1 | 10-001 |

2 | 01-001 |

3 | 11-000 |

4 | 00-101 |

5 | 10-100 |

6 | 01-100 |

7 | 00-011 |

8 | 10-010 |

9 | 01-010 |

Simple, right? The barcode will also start and end in a 0-0110 sequence, which breaks the xx-xxx pattern. I cannot see Mr Washington’s article, the hosting has trashed it, so maybe this stuff is already discussed. The Wired Article is really hard to take apart from there — examples would have been nice — so I’ve expanded a bit on it.

Although we could look at the barcode digits as simple replacement cyphers — similar to the glyphs on the TV show “Fringe” — there is a key to the barcoding numbers themselves that would let a reader build a barcode cheat-sheet or lookup just before decoding a barcode to reduce the chances of error. Let’s remap the table above, add sample barcodes, move the zero after the 9, and add an asterisk markup so that we have an example of that as well:

digit | code | barcode |
---|---|---|

1 | 10-001 | |

2 | 01-001 | |

3 | 11-000 | |

4 | 00-101 | |

5 | 10-100 | |

6 | 01-100 | |

7 | 00-011 | |

8 | 10-010 | |

9 | 01-010 | |

0 | 00-110 | |

* | 0-0110 |

You can see how the progression of the 4 leftmost digits of each 5-bit sequence is actually a binary increment. The rule for that sequence seems to be “no more than two ones per digit”, and the 5th digit toggles one/zero to ensure that each sequence has two. Zero is pushed up to the “ten” spot, so it doesn’t have to suffer the indignity of no ones at all — for which the check bit would have to be 2. And what about 7? skipped. above, 7 is actually 8, 8 is actually 9, etc.

Asterisk is basically “zero” but with the spacer moved, perhaps to help key the scanner to the size and use the data itself as start/stop bits, the same way the 6-of-8 is done on an old floppy disk (leading bits are zero, after a spin there’s enough 0-0-1 and 0-0-0-etc to key the reader).

So now we have the magical logic to generate the bit patterns for the barcode digits, let’s markup the barcode and overlay some digits:

Now that looks a lot easier to digest.

Comments?

## Recent Comments

PerfSys: Thank you for this patch! Good work! for those who need LD...Sébastien Cramatte: Hello, I've just made a backport of nagios 3.2 fron debian ...allanc: The thing to consider is that not every user wants every fea...rb: I kinda figured that upstream wouldnt really be too interest...allanc: Hey, thanks man. Sometimes, my gospel has merit, but even a...