какая информация содержится в товарном штрих коде
Как устроен штрихкод?
Со штрихкодами современный человек сталкивается каждый день, даже не задумываясь об этом. Когда мы покупаем в супермаркете продукты, их коды считываются именно с помощью штрихкода. Также посылки, товары на складах, и прочее и прочее. Однако, мало кто знает, как же реально это работает.
Как устроен баркод, и что закодировано на этой картинке?
Попробуем разобраться, заодно напишем декодер таких кодов.
Введение
Использование штрихкодов имеет давнюю историю. Первые попытки автоматизации начинались еще в 50х, патент на устройство считывания кодов был получен в 1952г. Инженер, занимавшийся сортировкой вагонов на железной дороге, захотел упростить процесс. Идея была очевидной — кодировать номер с помощью полос и считывать их с помощью фотоэлементов. В 1962г коды стали официально использоваться для идентификации вагонов на американской железной дороге (система KarTrak), в 1968 прожектор заменили лазерным лучом, что позволило повысить точность и уменьшить размер считывателя. В 1973г появился формат «универсального кода продукта» (Universal Product Code), и в 1974 с использованием сканера кодов был продан первый продукт (жевательная резинка Wrigley’s — это же США;) в супермаркете. В 1984 треть магазинов использовали штриходы, в России же они начали использоваться примерно с 90х годов.
Разных кодов под разные задачи сейчас используется довольно много, к примеру, последовательность «12345678» может быть представлена такими способами (и это еще не все):
Приступим к побитовому разбору. Далее, все ниженаписанное будет относиться к виду «Code-128» — просто потому, что его формат довольно простой и понятный. Желающие поэкспериментировать с другими видами, могут открыть онлайн-генератор и посмотреть самостоятельно.
На первый взгляд штрихкод кажется просто беспорядочной последовательностью линий, на самом деле, его структура четко фиксирована:
1 — Пустое место, нужное для четкого определения начала кода
2 — Стартовый символ. Для Code-128 возможны 3 варианта (называемых А, В и С): 11010000100, 11010010000 или 11010011100, им соответствуют разные кодовые таблицы (подробнее в Википедии).
3 — Собственно код, содержащий нужные нам данные
4 — Контрольная сумма
5 — Стоп символ. Для Code-128 это 1100011101011.
6(1) — Пустое место.
Теперь о том, как кодируются биты. Тут все очень просто — если взять ширину самой тонкой линии за «1», то линия двойной ширины даст код «11», тройная «111», и так далее. Пустое место будет «0» или «00» или «000» по тому же самому принципу. Желающие могут сравнить стартовый код на картинке, чтобы убедиться что правило выполняется.
Теперь можно начинать программировать.
Получаем битовую последовательность
В принципе, это самая сложная часть, и разумеется, алгоритмически ее можно реализовать по-разному. Не уверен, что приведенный ниже алгоритм оптимальный, но для учебного примера его вполне достаточно.
Для начала загрузим изображение, растянем его по ширине, возьмем из середины изображения горизонтальную линию, преобразуем ее в ч/б и загрузим в виде массива.
На штрихкоде черному соответствует «1», а в RGB наоборот, 0, так что массив нужно инвертировать. Заодно вычислим среднее значение.
Запускаем программу, чтобы убедиться, что баркод загружен корректно:
Теперь нужно определить ширину одного «бита». Для этого мы выделим начало стартовой последовательности «1101», записывая моменты перехода графика через среднюю линию.
Мы записываем только переходы через середину, так что код «1101» будет записан как «101», но нам этого достаточно чтобы узнать его ширину в пикселах.
Теперь собственно декодирование. Находим очередной переход через середину, и определяем число бит, попавших в интервал. Поскольку совпадение не абсолютное (код может быть слегка изогнут или растянут), используем округление.
Не уверен что это оптимальный вариант, возможно, есть способ лучше, желающие могут написать в комментариях.
Если все было сделано правильно, то мы получаем на выходе примерно такую последовательность:
11010010000110001010001000110100010001101110100011011101000111011011
01100110011000101000101000110001000101100011000101110110011011001111
00010101100011101011
Декодирование
Здесь никаких сложностей в принципе, нет. Символы в Code-128 кодируются 11-битным кодом, который имеет 3 разновидности (А, В и С) и может хранить либо разные кодировки символов, либо цифры от 00 до 99.
В нашем случае, начало последовательности 11010010000, что соответствует «Code B». Было жутко влом вбивать вручную все коды из Википедии, поэтому таблица была просто скопирована из браузера и ее парсинг был тоже сделан на Python (hint: на продакшене так делать не надо).
Теперь осталось самое простое. Разбиваем нашу битовую последовательность на 11-символьные блоки:
Наконец, формируем строку и выводим ее на экран:
Ответ на то, что закодировано в таблице, приводить не буду, пусть это будет домашним заданием для читателей (использование готовых программ для смартфонов будет считаться читерством:).
В коде также не реализована проверка CRC, желающие могут сделать это самостоятельно.
Разумеется, алгоритм неидеален, и был написан за полчаса. Для более профессиональных целей есть готовые библиотеки, например pyzbar. Код с использованием такой библиотеки займет всего 4 строчки:
(предварительно нужно установить библиотеку, введя команду «pip install pyzbar»)
Дополнение: о подсчете CRC написал в комментариях пользователь vinograd19:
Интересна история контрольной цифры. Она возникла эволюционно.
Контрольная цифра нужна для того, чтобы избежать неправильного декодирования. Если штрихкод был 1234, а его распознали как 7234, то нужна валидация, которая предупредит замену 1 на 7. Валидация может быть неточная, чтобы хотя бы в 90% невалидные номера определялись заранее.
1-й подход: Давайте просто возьмем сумму. Чтобы в остатке от деления на 10 был 0. Ну то есть первые 12 символов несут информационную нагрузку, а последняя цифры подбирается так, чтобы сумма цифр делилась на 10. Декодируем последовательность, если сумма не делится на десять — значит декодировали с багом и нужно сделать это еще раз. Например, код 1234 — валидный. 1+2+3+4 = 10. Код 1216 — тоже валидный, а вот 1218 — нет.
Это позволяет избежать проблем с автоматикой. Однако в момент создания штрихкодов был фоллбек в виде набивания номер на клавишах. И там есть плохой кейс: если поменять порядок следования двух цифр, то контрольная сумма не меняется, и это плохо. То есть если штрихкод 1234 был вбит как 2134, контрольная сумма сойдется, а вот номер мы вбили неправильный. Оказывается, неправильный порядок цифр — это распространенный кейс, если стучать по клавишам быстро.
2-й подход. Хорошо, давайте сумму сделаем чуть сложнее. Чтобы цифры на четных местах учитывались дважды. Тогда при изменении порядка, сумма точно не сойдется к нужной. Например код 2364 валидный (2 + 3+3 + 6 + 4+4 = 20), а код 3264 — невалидный (3+ 2+2 + 6 + 4+4 = 19). Но тут оказался еще один плохой пример вбития. Некоторые клавиатуры такие, что десять цифр располагаются в два ряда. первый ряд 12345 и под ним второй второй ряд 67890. Если вместо клавишы «1» нажать правее клавишу «2», то контрольная сумма предупредит неправильный ввод. А вот если вместо клавишу «1» нажать ниже клавишу «6» — то может не предупредить. Ведь 6=1+5, и в случае когда эта цифра стоит на четном месте при вычислении контрольной суммы, мы имеем 2*6 = 2*1 + 2*5. То есть контрольная сумму увеличилась ровно на 10, поэтому ее последняя цифра не изменилась. Например контрольные суммы кодв 2134 и 2634 одинаковые. Та же ошибка будет, если мы вместо 2 нажмем 7, вместо 3 нажмем 8 и тд.
3-й подход. Ок, давайте что ли возьмем опять сумму, только цифры, стоящие на четных местах будем учитывать… трижды. То есть код 1234565 — валидный, потому как 1 + 2*3 + 3 + 4*3 + 5 + 6*3 +5 = 50.
Описанный способ стал стандартом вычисления контрольной суммы EAN13 за небольшими правками: число цифр стало фиксированным и равно 13, где 13-ая — это та самая контрольная цифра. Цифры на нечетных местах считаются трижды, на четных — один раз.
Заключение
Как можно видеть, даже такая простая вещь как штрихкод, имеет в себе немало интересного. Кстати, еще один лайфхак для тех, кто дочитал до сюда — текст под штрихкодом (если он есть) полностью дублирует его содержание. Это сделано для того, чтобы в случае нечитабельности кода, оператор мог ввести его вручную. Так что узнать содержимое штрихкода обычно просто — достаточно посмотреть на текст под ним.
Как подсказали в комментариях, наиболее популярным в торговле является код EAN-13, битовое кодирование там такое же, а структуру символов желающие могут посмотреть самостоятельно.
Если у читателей не пропал интерес, отдельно можно рассмотреть QR-коды.
Какая информация содержится в товарном штрих коде
Существуют различные способы кодирования информации, называемые (штрихкодовыми кодировками или символиками). Различают линейные и двухмерные символики штрихкодов.
Двухмерными называются символики, разработанные для кодирования большого объема информации (до нескольких страниц текста). Двухмерный код считывается при помощи специального сканера двухмерных кодов и позволяет быстро и безошибочно вводить большой объем информации. Расшифровка такого кода проводится в двух измерениях (по горизонтали и по вертикали). Datamatrix, Data Glyph, Aztec.
Штриховой код можно наносить при производстве упаковки (типографским способом) или использовать самоклеящиеся этикетки, которые печатаются с использованием специальных принтеров.
Для считывания штрихкодов используются специальные приборы, называемые сканерами штриховых кодов. Сканер засвечивает штрихкод своим осветителем и считывает полученную картинку. После этого он определяет наличие на картинке черных полос штрихкода. Если в сканере нет встроенного декодера (блок расшифровки штрихкода), то сканер передает в приемное устройство серию сигналов, соответствующих ширине черных и белых полос. Расшифровка штрихкода должна выполняться приемным устройством или внешним декодером. Если сканер оснащен внутренним декодером, то этот декодер расшифровывает штрихкод и передает информацию в приемное устройство (компьютер, кассовый аппарат и т.д.) в соответствии с сигналами интерфейса, определяемого моделью сканера.
Расшифровка штрихкода. C помощью штрихового кода зашифрована информация о некоторых наиболее существенных параметрах продукции. Наиболее распространены американский Универсальный товарный код UPC и Европейская система кодирования GTIN. Наиболее распространенны GTIN/UCC товарные номера GTIN-13, GTIN-8, UPC-A, UPC-E и 14-разрядный код транспортной упаковки ITF-14. Так же существует 128 разрядная система UCC/GTIN-128. Согласно той или иной системе, каждому виду изделия присваивается свой номер, состоящий чаще всего из 13 цифр (GTIN-13).
Для кода товара:
1 цифра: наименование товара,
2 цифра: потребительские свойства,
3 цифра: размеры, масса,
4 цифра: ингредиенты,
5 цифра: цвет.
Пример вычисления контрольной цифры для определения подлинности товара
1. Сложить цифры, стоящие на четных местах:
8+0+2+7+0+1=18
2. Полученную сумму умножить на 3:
18×3=54
3. Сложить цифры, стоящие на нечетных местах, без контрольной цифры:
4+2+0+4+0+0=10
4. Сложить числа, указанные в пунктах 2 и 3:
54+10=64
5. Отбросить десятки:
получим 4
6. Из 10 вычесть полученное в пункте 5:
10-4=6
Если полученная после расчета цифра не совпадает с контрольной цифрой в штрихкоде, это значит, что товар произведен незаконно.
Таблица соответствия штрихкодов стран в системе «GS1″.
Штрих-код и его расшифровка
Штриховой код представляет собой вид информации, наносимой на упаковку товара, и дающей представление об основных свойствах того или иного товара. Наносится штрих-код либо в виде последовательно располагаемых черных и белых полос, являющихся продолжением идеи азбуки Морзе, либо в виде геометрических рисунков, расположенных в определенной последовательности.
Вопрос: Можно ли внести в форму товарной накладной N ТОРГ-12 такой дополнительный реквизит, как штрихкод?
Посмотреть ответ
Расшифровка и структура
Тринадцатизначный код EAN разделяется на отдельные структурные зоны:
Расчёт контрольной цифры в штрих-коде
Воспользуйтесь приведённым ниже алгоритмом:
Полученная цифра и есть контрольная. Если не совпала — товар может быть произведён незаконно.
Штрих-коды стран производителей
Код производителя | Страна | Национальная организация EAN/UCC |
---|---|---|
00-13 | США и Канада | UCC (U.S.A. & Canada) |
30-37 | Франция | GENCOD-EAN France |
380 | Болгария | BCCI (Bulgaria) |
383 | Словения | EAN Slovenia |
385 | Хорватия | EAN Croatia |
387 | Босния и Герцеговина | EAN-BIH (Bosnia-Herzegovina) |
400-440 | Германия | CCG (Germany) |
45-49 | Япония | Distribution Code Center — DCC (Japan) |
460-469 | Россия | UNISCAN / EAN RUSSIA (Russian Federation) |
471 | Тайвань | EAN Taiwan |
474 | Эстония | EAN Eesti (Estonia) |
475 | Латвия | EAN Latvia |
476 | Азербайджан | EAN Azerbaijan |
477 | Литва | EAN Lithuania |
478 | Узбекистан | EAN Uzbekistan |
479 | Шри-Ланка | EAN Sri Lanka |
480 | Филиппины | PANC (Philippines) |
481 | Беларусь | EAN Belarus |
482 | Украина | EAN Ukraine |
484 | Молдова | EAN Moldova |
485 | Армения | EAN Armenia |
486 | Грузия | EAN Georgia |
487 | Казахстан | EAN Kazakhstan |
489 | Гонконг | HKANA (Hong Kong) |
50 | Великобритания | E Centre UK |
520 | Греция | HELLCAN — EAN HELLAS (Greece) |
528 | Ливан | EAN Lebanon |
529 | Кипр | EAN Cyprus |
531 | Македония | EAN-MAC (FYR Macedonia) |
535 | Мальта | EAN Malta |
539 | Ирландия | EAN Ireland |
54 | Бельгия, Люксембург | ICODIF/EAN Belgium.Luxembourg |
560 | Португалия | CODIPOR (Portugal) |
569 | Исландия | EAN Iceland |
57 | Дания | EAN Danmark |
590 | Польша | EAN Poland |
594 | Румыния | EAN Romania |
599 | Венгрия | EAN Hungary |
600-601 | Южная Африка | EAN South Africa |
609 | Маврикий | EAN Mauritius |
611 | Марокко | EAN Maroc (Marocco) |
613 | Алжир | EAN Algeria |
616 | Кения | EAN Kenya |
619 | Тунис | TUNICODE (Tunisia) |
621 | Сирия | EAN Syria |
622 | Египет | EAN Egypt |
624 | Ливия | EAN Libya |
625 | Иордания | EAN Jordan |
626 | Иран | EAN Iran |
627 | Кувейт | EAN Kuwait |
628 | Саудовская Аравия | EAN Saudi Arabia |
629 | Объединенные Арабские Эмираты | EAN Emirates |
64 | Финляндия | EAN Finland |
690-693 | Китай | Article Numbering Centre of China — ANCC (China) |
70 | Норвегия | EAN Norge (Norway) |
729 | Израиль | Israeli Bar Code Association — EAN Israel |
73 | Швеция | EAN Sweden |
740 | Гватемала | EAN Guatemala |
741 | Сальвадор | EAN El Salvador |
742 | Гондурас | EAN Honduras |
743 | Никарагуа | EAN Nikaragua |
744 | Коста-Рика | EAN Costa Rica |
745 | Панама | EAN Panama |
746 | Доминиканская Республика | EAN Republica Dominicana |
750 | Мексика | AMECE (Mexico) |
759 | Венесуэла | EAN Venezuela |
76 | Швейцария | EAN (Schweiz, Suisse, Svizzera) |
770 | Колумбия | IAC (Colombia) |
773 | Уругвай | EAN Uruguay |
775 | Перу | EAN Peru |
777 | Боливия | EAN Bolivia |
779 | Аргентина | CODIGO — EAN Argentina |
780 | Чили | EAN Chile |
784 | Парагвай | EAN Paraguay |
786 | Эквадор | ECOP (Ecuador) |
789 | Бразилия | EAN Brazil |
80-83 | Италия | INDICOD (Italy) |
84 | Испания | AECOC (Spain) |
850 | Куба | Camera de Comercio de la Republica de Cuba (Cuba) |
858 | Словакия | EAN Slovakia |
859 | Чехия | EAN Czech |
860 | Югославия | EAN YU (Yugoslavia) |
867 | Северная Корея | EAN DPR Korea (North Korea) |
869 | Турция | Union of Chambers of Commerce of Turkey (Turkey) |
87 | Нидерланды | EAN Nederland (Netherlands) |
880 | Южная Корея | EAN Korea (South Korea) |
885 | Таиланд | EAN Thailand |
888 | Сингапур | SANC (Singapore) |
890 | Индия | EAN India |
893 | Вьетнам | EAN Vietnam |
899 | Индонезия | EAN Indonesia |
90-91 | Австрия | EAN Austria |
93 | Австралия | EAN Australia |
94 | Новая Зеландия | EAN New Zealand |
955 | Малайзия | Malaysian Article Numbering Council (MANC) |
958 | Макао | EAN Macau |
Назначение штрих-кода
Введение в действие штрихового кода имело место в 1974 году, хоть патент на его изобретение был выдан в 1962 году.
Изначально назначением штрих-кода было нанесение маркировочных признаков на товары потребления с целью упрощения процедуры передачи товаров на реализацию и их последующей продажи конечным потребителям.
В настоящее время штриховой код имеет и иные функции, а именно:
Местом нанесения штрихового кода является упаковка товара, а способом его нанесения – приклеивание ярлыков с нанесенными на них печатными штрих-кодами.
Виды штрих-кодов
Существует два вида штриховых кодов, дифференцируемых по типу наносимых на товар графических изображений: линейный и двумерный. Различие состоит в способе кодирования информации и в способе ее считывания.
Линейный код читается по горизонтали, то есть в одном направлении. К линейным штрих-кодам относятся следующие подвиды, различающиеся, в том числе, и по количеству включаемых в код символов. Например, код EAN имеет два варианта – восьмизначный и тринадцатизначный. Логично предположить, что 13-значный код включает в себя больший объем информации о товаре.
Однако по сравнению с двумерными кодами все линейные штриховые коды обладают относительно малой информативной емкостью.
Двумерные штриховые коды изначально создавались для включения в них большего объема информации. Для обеспечения желаемой цели была разработана система, позволяющая включать в штрих-код два направления для считывания – горизонтальное и вертикальное.
Дополнительно двумерные штриховые коды дифференцируются на:
Современные двумерные штриховые коды могут вмещать в себя, в зависимости от количества слоев, от 7 до 1900 байт информации о товаре.
Применение в штрих-кодов в РФ
В Российской Федерации наиболее распространенным видом штриховых кодов являются линейный 13-значный и линейный 8-значный.
Предполагается, что в ближайшее время в РФ будет введен в действие расширенный штриховой код, в который будет вноситься информация о дополнительных характеристиках товара. Например:
Считывание
Функциональная польза от штрих-кодов может быть только в случае применения сканеров, считывающих со штрих-кода информацию. То есть отсутствие сканера сделает из штрих-кода всего лишь более или менее красивую картинку.
В настоящее время существуют два вида сканеров – стационарные, то есть кассовые, и портативные, чаще всего выглядящие как небольшая трубка с читающим устройством на одном из ее концов.
Применение того или иного вида сканера обусловлено их разрешительной способностью при считывании информации, объемом товаров, товарооборотом и количеством покупателей.
Сканер, считывая информацию, находится в постоянном контакте с базой данных конкретного субъекта предпринимательской деятельности. То есть, считывая штриховой код, сканер передает в компьютерную сеть не только факт покупки или отгрузки, но одновременно запускает алгоритмы перерасчета остатков продукции на складе и выдает информацию о необходимости пополнения запасов.
Что касается EAN-8:
По сути это младший собрат EAN-13, был введён для малоразмерных упаковок, для таких, где нет достаточно места для нанесения символики EAN-13.
Что зашифровано в штрих-коде?
Прямоугольники с черными полосками несут много полезной информации для потребителя.
Подавляющее большинство продуктовых товаров, попадающих на прилавки магазинов, имеют на этикетках так называемые штрих-коды — небольшие белые прямоугольники с черными полосками и набором цифр под ними. Разбираемся, для чего они нужны и какую полезную для потребителя информацию они несут.
Штриховой код, или штрих-код, содержит такую информацию, как страна-изготовитель продукта, на каком предприятии он был произведен, а также технические характеристики: наименование, сорт, артикул, цвет, массу, размер и т. д. Кроме того, проведя несложные расчеты, на основе данных штрих-кода кассир и покупатель могут определить подлинность товара.
Штрих-код наносится на упаковку товара в виде последовательности штрихов и пробелов разной ширины. Для считывания такой информации используются специальные устройства — сканеры. Большинство штрих-кодов созданы при помощи кодировочных систем. Самые распространенные — это европейская система кодирования EAN (European Article Number) и американский универсальный товарный код UPC (Universal Product Code). Каждому виду изделия присваивается свой номер, состоящий из 13 или 8 цифр.
Страна-изготовитель продукта обозначается первыми двумя или тремя цифрами. Код страны не может быть обозначен только одной цифрой. Например, код России — цифры в интервале от 460 до 469, США и Канады — 00–13, Италии — 80–83, Китая — 690–699, Великобритании соответствует число 50, Беларуси — 481.
Иногда первые цифры штрих-кода могут не соответствовать информации о производителе на этикетке. Это происходит из-за того, что организация была зарегистрирована и получила код не в стране, куда экспортирует продукцию, товар был изготовлен на дочернем предприятии или по лицензии организации из другой страны, а также в том случае, если учредителями предприятия являются несколько фирм из различных государств.
Все коды, начинающиеся с 200 и заканчивающиеся на 299, зарезервированы для внутреннего использования предприятиями любых стран. Например, продуктовый магазин может изготовить собственные этикетки со штрих-кодом и зашифровать в них информацию о товарах для внутренних целей. Чаще всего — для продуктов, продающихся на развес. Кроме того, первые цифры от 977 и далее соответствуют не стране-изготовителю, а некоторым видам товаров, например, журналам и книгам.
Код предприятия — это следующие четыре цифры, обозначающие регистрационный номер производителя товара. За присвоение номера ответственна региональная организация, представляющая страну в системе кодирования. Эта часть кода позволяет исключить возможность появления двух различных товаров с одинаковыми кодами.
Для маркировки продукции совсем небольших размеров часто используется сокращенный код (EAN-8), в котором не размещается информация об изготовителе, и после кода страны сразу идет регистрационный номер товара.
Код товара — оставшиеся пять цифр (кроме последней) — используется для кодировки самого товара и присваивается изготовителем или продавцом в виде регистрационного номера в пределах своей организации. В этих цифрах изготовитель может закодировать необходимые для идентификации товара данные: наименование, сорт, артикул, цвет, массу, размер и т. д.
Последняя в коде цифра введена для того, чтобы сканер мог определить подлинность товара. Однако покупатель может сделать это самостоятельно, проведя несложные вычисления:
1. Сложите цифры, стоящие на четных местах (6 + 3 + 2 + 6 + 0 + 1 = 18).
2. Полученную сумму умножьте на три (18 * 3 = 54).
3. Сложите цифры, стоящие на нечетных местах, кроме самой контрольной цифры (4 + 2 + 7 + 0 + 6 + 1 = 20).
4. Сложите числа, полученные в п. 2 и п. 3 (54 + 20 = 74).
5. Отбросьте десятки (74 – 70 = 4).
6. Из числа 10 вычтите полученное в п. 5 (10 – 4 = 6).
Если результат расчета не совпадает с контрольной цифрой в штрих-коде — значит товар произведен незаконно.
Если Вы не нашли необходимую информацию, попробуйте
зайти на наш старый сайт
Разработка и продвижение сайта – FMF
Почтовый адрес:
Адрес: 350000, г. Краснодар, ул. Рашпилевская, д. 100
Канцелярия +7 (861) 255-11-54
прием посетителей пн., вт., ср., чт. с 10.00 до 16.00
ПТ. и предпраздничные дни с 10.00 до 13.00
перерыв с 13.00 до 13.48