Формирование линейного штрих-кода
Некоторые виды штрих-кода содержат как графическую информацию, так и текстовую. Как мы уже показывали в одной из наших предыдущих статей, цифровую информацию можно без особых трудностей прочитать и проверить. Учитывая то, что информация в виде цифр предназначена для человека, а не для сканеров штрих-кода, то удивляться тут нечему. Но, в конечном итоге, и люди и сканеры штрих-кода считывают одну и ту же информацию: результат один, но пути разные. Сканер считывает те самые чередующиеся черные и белые полоски штрих-кода, которые являются зашифрованным отображением цифр.
?нтересен тот факт, что эту зашифрованную информацию можно прочитать и без помощи сканера-штрих-кода, но это займет немного больших усилий. В дальнейшем мы рассмотрим метод расшифровки штрих-кода без помощи сканера.
Вначале стоит пояснить, что в формировании штрих-кода используются черные штрихи и пробелы между ними. Ширина пробела между штрихами равняется ширине самого штриха, а в случае, когда между штрихами нет белого пространства, штрихи выглядят как один, более широкий штрих. Этот же принцип касается пробелов между штрихами: пространство шире, когда несколько пробелов идут друг за другом.
Штрих обозначает "1" (единицу) в двоичной системе, а пробел между штрихами - двоичный "0". Для построения штрих-кода, любая десятичная цифра от 0 до 9 формируется при помощи семи двоичных символов "0" и "1", что, при слиянии рядом стоящих штрихов и пробелов, графически всегда будет выглядеть как четыре объекта.
Таким образом, если рассмотреть цифру "4" в виде штрих кода, то одним из вариантов ее кодированного отображения будет выглядеть как "0100111", т.е. пробел - штрих - двойной пробел - тройной штрих.
В штрих-коде типа EAN-13 есть одна очень важная особенность: каждая десятичная цифра от 0 до 9 в двоичной системе может отображаться тремя различными способами: set A, set B и set C. Таблица ниже показывает три варианта двоичного эквивалента каждой из десятичных цифр.
set A | set B | set B | |
---|---|---|---|
0 | 0001101 | 0100111 | 1110010 |
1 | 0011001 | 0110011 | 1100110 |
2 | 0010011 | 0011011 | 1101100 |
3 | 0111101 | 0100001 | 1000010 |
4 | 0100011 | 0011101 | 1011100 |
5 | 0110001 | 0111001 | 1001110 |
6 | 0101111 | 0000101 | 1010000 |
7 | 0111011 | 0010001 | 1000100 |
8 | 0110111 | 0001001 | 1001000 |
9 | 0001011 | 0010111 | 1110100 |
В штрих-коде типа EAN-13 есть три пары штрихов, которые отличаются несколько большей длиной от остальных штрихов. У каждой пары, которая в десятичной системе выглядит как "101", есть свое предназначение: первая пара случит сканеру штрих-кода сигналом к началу сканирования штрих-кода, вторая пара разделяет последние 12 цифр штрих-кода на две части, тогда как последняя пара говорит и окончании штрих-код и необходимости завершения его сканирования.
Две части из шести цифр имеют небольшое отличие в способе формирования каждой из цифр. Правая часть использует set C для формирования штрих-кода, тогда как левая часть использует как set A, так и set B для шифрования цифр в этой части кода. Первая цифра штрих-кода обуславливается именно комбинацией наборов set А и set B. Следующая таблица показывает какая последовательность наборов A и B нужны для формирования первой цифры.
1-я цифра | 2-я цифра | 3-я цифра | 4-я цифра | 5-я цифра | 6-я цифра | 7-я цифра |
---|---|---|---|---|---|---|
0 | A | A | A | A | A | A |
1 | A | A | B | A | B | B |
2 | A | A | B | B | A | B |
3 | A | B | B | B | B | A |
4 | A | B | A | A | B | B |
5 | A | B | B | A | A | B |
6 | A | B | B | B | A | A |
7 | A | B | A | B | A | B |
8 | A | B | A | B | B | A |
9 | A | B | B | A | B | A |
В качестве примера можно разобрать штрих-код на изображении. ?нтересующая нас часть штрих-кода выглядит так: "606453". В двоичной системе это выглядит так: 6 - "0101111" (set A), 0 - "0100111" (set B), 6 - "0101111" (set A), 4 - "0100011" (set A), 5 - "0111001" (set B), 3 - "0100001" (set B). У нас получилась комбинация букв АВААВВ. Находим в таблице, какой цифре соответствует данная комбинация - четыре.
Сканеры штрих-кода работают примерно в таком алгоритме, но делая это очень быстро они значительно повышают эффективность учета и движения товара не только в магазине, но и на складе средних размеров.