могут ли штрих коды повторяться
Как мы пытались разобраться в штрихкодировании и ничего не поняли
Проснувшись однажды утром после беспокойного сна, я обнаружил, что компания Fasim, где мы регистрировали штрихкоды для игр «Банды умников» исчезла. Милая девушка-менеджер, которая вела все дела по штрихкодированию, просто пропала: абонент не абонент, мейлы без ответа и сайт показывает ошибку 404.
Дело в том, что когда мы решали вопрос со штрихкодами первый раз в 2013 году, то наша команда состояла из 5 человек, а штрихкоды нам нужно было сделать буквально за один день, чтобы заключить первый наш договор с большой сетью. Соответственно, для срочного решения вопроса была использована случайная ссылка из выдачи поисковика по запросу «регистрация штрихкодов». А потом мы, по инерции, просто слали тем же людям артикулы на новые игры для регистрации — другие предложения не особо отличались по цене, и всё было нормально, пока подрядчик не пропал.
Казалось бы, какие проблемы? Найдите другого подрядчика и платите ему. Но в этот раз мы постарались выяснить, откуда берутся штрихкоды, чтобы не «получилось как в тот раз». Но когда открываешь гугл и пытаешься разобраться в вопросе, начинается полный постмодернизм.
Каждый товар, который продается в сетях и более-менее крупной рознице имеет штрихкод. Это не обязательное условие, и на правовом уровне никак не зафиксировано. Но торговые точки, как правило, требуют наличие штрихкода — это облегчает управление складскими запасами, работу с кассой и еще кучу всего.
Штрихкод — уникальная комбинация цифр, которая состоит из кода страны, кода поставщика и кода товара. Когда ты привозишь настолку в любую сеть, и они заводят ее в базу — другого такого номера быть не должно. Но как и кем обеспечивается эта уникальность при обилии предложения на рынке?
По запросу «купить штрихкод» — миллион предложений, от «регистрация EAN13 за полчаса» до пакетных предложений со вступлением в национальную ассоциацию штрихкодирования c ежегодным организационным взносом.
Существует ли в природе единый перечень всех зарегистрированных кодов? Где гарантии, что штрихкод обучающей детской игры не совпадает с рыбными консервами? Кто и как за этим следит?
Спойлер: никто и никак!
Страх и ненависть в штрихкодировании
Просмотрев существующие на рынке предложения, мы пришли к выводу, что, видимо, какими-то центральными генераторами штрихкодов являются две компании, которые предлагают зарегистрировать штрихкоды: «Disai» и «GS1». Остальные, видимо, либо выступали посредниками, либо выдавали случайные последовательности цифр.
Теперь предстояло разобраться: чем отличаются эти две системы и как они создают условия, в которых штрихкод становится действительно уникальной номенклатурой товара?
Начали с организации GS1, которая указана в Википедии как Международная Ассоциация Товарной нумерации. Эти ребята в 2005 году объединились с американской системой штрихкодирования, создали 108 представительств в разных странах — в формате некоммерческих организаций. Для получения штрихкода через GS1 надо подать заявку, оплатить организационный взнос, вносить ежегодные взносы (около 15 тыс. руб. за любое количество штрихкодов), и будет тебе счастье.
Но вот что настораживало: о правах на единую мировую базу штрихкодов GS1 пишет только GS1.
Мы решили развеять сомнения и вступить с ними в переписку. Думали: «Наверняка, представитель компании даст внятное разъяснение и поможет разобраться». Основные вопросы: законно ли использование штрихкодов, имеющихся у нас сейчас, и как они объяснят предложение о регистрации кодов от других компаний?
В ходе переписки с GS1 нам заявили, что коды на игры от нашего пропавшего подрядчика Fasim (которые мы используем по всей Европе), входят в реестр Эстонского отделению GS1. Но Fasim не регистрировало наше право на эти штрихкоды в GS1.
Что же делать? Мы стали жертвами мошенников? Огромные партии наших игр уже продаются в Европе с недействительными штрихкодами? Нас накажут по законам джунглей? GS1 посоветовал купить (опять заплатить) за эти штрихкоды их отделению в Эстонии и не переживать. Мол, коды эти свободны, но их вот-вот купят.
Мы пошли дальше и решили убедиться в необходимости регистрации кодов именно через GS1 и спросили у представителя GS1 о других организациях. Знаете, что они ответили? Что все-все-все остальные — мошенники!
«Это самозванцы. Зайдите на сайт gs1.org и посмотрите сами, кто ведёт эту деятельность в России. Коды GS1 имеют глобальное распространение и действуют по всему миру.
Если вы уже работаете с ритейлерами, многие из них проверяют штрихкоды и просто не возьмут ваш товар.
Уникальность и глобальность достигаются за счёт того, что в каждой стране мира, участвующей в системе GS1, имеется ТОЛЬКО ОДНА организация (национальная организация GS1), которая регистрирует всех участников. В России такой организацией является ГС1 РУС. Все прочие — это самодеятельность.
Disai вводит своих клиентов в заблуждение, они не имеют отношения к GS1».
Мы крепко задумались. Особенно над тремя моментами:
«Они [GS1] пишут очень хитро, но суть в том, что в России никто кроме ГС1рус не может регистрировать штрихкоды в системе GS1 — это правда. Но о том, что нигде не сказано, что система может быть только одна, они почему-то написать «забыли».
Когда-то не было GS1, потом была только GS1, потом ещё появилась ISBN, сейчас уже есть и GS1, и ISBN, и DISAI, может в будущем ещё появятся системы, кто знает.
Официальной информации на уровне законодательства о штрихкодах нет ни в России, ни в одной другой стране, к сожалению.
Есть Ассоциации Автоматической Идентификации, которые учреждают системы штрихового кодирования. В уставах данных ассоциаций прописаны все моменты про систему штрихового кодирования, которую они учреждают. Данные уставы регистрируются в Министерстве Юстиции, о чём на уставах есть все отметки, включая гербовую печать Министерства Юстиции.
А если ГС1 каким-то образом вдруг продаст ваши коды кому-то другому (чего не может быть всё таки), то здесь уже по принципу первенства — кто первый зашёл в торговую сеть, тот и прав, т.к. обе системы существуют официально».
Ну, Disai, хотя бы не отрицали существовании альтернативной системы кодирования.
Однако, в следующем письме, они ссылаются на статью о сравнении двух систем, где приводятся очень патриотические доводы в пользу Disai, что нас очень смутило:
Нам казалось, что мы совсем запутались. Но вдруг менеджер компании Fasim, через которое мы раньше покупали коды, вышла на связь! Своё исчезновение она объяснила техническими работами на сайте и сменой корпоративного номера телефона. Мы поделились с ней своими наблюдениями, и, получив ответ, запутались еще больше.
«Все несколько десятков компаний, которые вы нашли в интернете, обеспечат вам уникальные штрихкоды РФ. Не могу точно сказать насчёт иностранных.
По поводу GS1 — это просто самая известная компания и одна из самых первых. Они выдают абсолютно такие же коды, но с кучей головной боли и проверок, с заполнением кучи документов. Плюс, стоимость у них выше.
Я вам скажу, что за 4 года работы со штрихкодированием при мне было выдано очень много штрихкодов нескольким тысячам компаний клиентов. Проблем с пересечением (совпадением) не было вовсе никогда».
Но как получается, что разные компании, которые отрицают существование друг друга и параллельно выдают штрихкоды разным организациям, не имея единой базы и не сверяясь, могут генерировать разные комбинации цифр?
Ответа на этот вопрос мы так и не нашли.
Что в итоге?
В итоге наши старые «европейские» штрихкоды от Fasim зарегистрировать в эстонском отделении GS1 так и не смогли, там утверждают, что их уже забрала другая компания. Какая именно и с какими товарами — не говорят. Сами мы этой информации найти не смогли, сложностей пока не возникало. Не исключено, что где-нибудь в Чехии под штрихкодами, идентичными нашим, продаются фарфоровые фигурки лосей или торфяные брикеты.
Новые штрихкоды для Европы мы регистрируем в эстонском отделении GS1, вроде там все так делают — решили перестраховаться.
Сотрудничество с компанией Fasim мы прекратили — слишком настораживает, когда партнёр вот так пропадает с горизонта. На российском рынке новые штрихкоды регистрируем в Disai: приобрели пакет из 50 штрихкодов за 17 тыс.руб., просто потому, что по деньгам в нашем случае это раз в 10 выгоднее чем в GS1.
В целом, эта тема до сих пор оставляет нас в недоумении, так что если кто-то может пролить свет на тайный мир возникновения штрихкодов — делитесь в комментариях!
Штрих код в России: как все сделать по закону и не переплатить
Кто хотя бы раз делал покупки, не мог не обратить внимание на то, как быстро, в одно движение, происходит считывание информации с упакованного товара и передача ее на кассовый компьютер. Одной из главных предпосылок такого быстрого учета товаров является то, что на каждом из них есть штрих код — геометрическая картинка-шифр, содержащая нужную информацию. За каждым шифром стоит специальный номер. Откуда берется этот номер, зачем нужен штрих код, кроме как для быстрого обслуживания клиентов — расскажем в этой статье. Также будут рассмотрены волнующие многих читателей вопросы. Например, как получить штрих код для своего товара, насколько это трудно, сколько будет стоить и нужно ли это делать вообще.
Что такое штрих код товара и зачем он нужен
Итак, чтобы было легко вести учет товарной продукции, предназначенной для внутреннего и международного рынка, каждому товару необходимо присвоить уникальный номер. Этот номер кодируется специальной программой, которая переводит его из цифрового вида в графический. Получается картинка из набора геометрических фрагментов, которую называют штриховым кодом.
Информацию, представленную в виде штрих кода, может считывать специальное устройство — лазерный сканер. Он бывает стационарный, например, встроенный в кассовый аппарат, или портативный, ручной. Считанная информация расшифровывается встроенным или внешним декодером и передается в центральный компьютер, где и происходит идентификация и обработка информации. По сравнению с неавтоматизированным процессом учета товаров, который включает в себя инвентаризацию, сортировку, контроль остатка в торговом зале и на складе, перемещения, поступления, применение кодирования имеет большие преимущества:
Кроме того, наличие штрих кода в значительной степени может защитить товар от подделки. Различают одномерный, или линейный, и двумерный штрих код. Одномерный код состоит из вертикальных полос разной толщины в горизонтальной последовательности с пробелами разного размера. Он значительно проще двумерного, содержит необходимую и достаточную информацию для учета товара и используется гораздо чаще.
Двумерный штрих код мощнее и информативнее, но применять его не всегда целесообразно, так как он:
Штрих код товара может быть расположен на обратной или боковой стороне упаковки, в правом нижнем углу, на этикетке или как самоклеящаяся этикетка, распечатанная на специально предназначенном для этого принтере.
Уникальный товарный номер
Как было сказано выше, штрих код представляет собой геометрически зашифрованный цифровой код товара — уникальный товарный номер. В практике мировых торговых отношений используются европейские номера EAN (European Article Number) — EAN-13 и EAN-8, обладающие уникальностью в мировом масштабе. Каждый из них присваивается национальным регистратором, в том числе EANCODE, осуществляющим регистрационные мероприятия в России. При этом получить штрих код в EANCODE может не только российская, но также и иностранная компания со статусом юридического лица, банковским счетом и русскоговорящими сотрудниками. Вся переписка иностранной компании в этом случае должна осуществляться на русском языке, а любые расчеты в российских рублях.
Присвоение товарного номера и занесение его в единую мировую базу данных дает существенные преимущества:
Получателем штрих кода для товара может быть не только его производитель, но и владелец бренда, а также импортер.
Для многих не совсем понятно, что из себя представляет код GTIN (Global Trade Item Number) — глобальный код товара, который часто упоминается в контексте с EAN-13 и EAN-8. По сути это тот же самый EAN-13 или EAN-8, но дополненный вначале нулями для того, чтобы довести количество цифр до 14. Такой формат требуется во многих приложениях. Например, для маркировки грузов и при оформлении прайс листов.
Информация, которую содержит штрих код
Часто международный номер товара прописывается под соответствующим ему штрих кодом арабскими цифрами. Хороший товаровед должен уметь читать этот цифровой ряд без помощи сканеров и декодеров. При считывании тринадцатизначного основного кода — EAN-13 можно определить:
Если страна имеет много предприятий-производителей на своей территории или за рубежом, ее кодом может быть не одно трехзначное число, а несколько, находящихся в определенном диапазоне. В таблице приведены некоторые примеры:
Страна | Диапазон первых цифр кода |
---|---|
США | От 000 до 139 |
Франция | От 300 до 379 |
Германия | От 400 до 440 |
Италия | От 800 до 839 |
Австрия | От 900 до 919 |
Япония | От 450 до 459 и от 490 до 499 |
Великобритания | От 500 до 509 |
Бельгия и Люксембург | От 540 до 549 |
Дания | От 570 до 579 |
Финляндия | От 640 до 649 |
Норвегия | От 700 до 709 |
Швеция | От 730 до 739 |
Нидерланды | От 870 до 879 |
Швейцария | От 760 до 769 |
Испания | От 840 до 849 |
Австралия | От 930 до 939 |
Новая Зеландия | От 940 до 949 |
Россия | От 460 до 469 |
Китай | От 690 до 695 |
Канада | От 754 до 755 |
ЮАР | От 600 до 601 |
Бразилия | От 789 до 790 |
Для полной проверки необходимо зайти в поисковик глобального регистратора, ввести цифровой код и включить поиск. Если код легальный, вы получите информацию об обладателе кода. Если поддельный — ничего не найдете.
Код EAN-8 на товар малого размера представляет собой укороченный вариант EAN-13. Содержит информации меньше:
Системы графического кодирования
Чтобы получить штрих код, цифры нужно зашифровать и представить в графической форме. Существует много способов шифровки данных о товаре, но в подавляющем большинстве для этого используют систему кодирования EAN. Штрих код EAN-13 соответствует международному товарному номеру EAN-13 для стандартных и больших упаковок. Штрих код EAN-8 соответствует товарному номеру EAN-8, который принят для товаров в маленькой упаковке, когда нет возможности полностью разместить EAN-13.
Также в мире распространено применение американского штрих-кода из 12 цифр — UPC-12 (то же, что UPC-А). После объединения организации Американского совета по единому коду UCC с организацией EAN в единую мировую систему EAN — UCC, американский штрих код адаптировали к европейскому. Теперь он является частью кода EAN-13. Для приведения в полное соответствие и возможность считывания сканерами достаточно к 12-разрядному американскому коду впереди добавляется префикс в виде нуля.
Где получить штрих код для товара в России
В принципе, любое предприятие может использовать незарегистрированный штрих код на товар, который будет актуален для внутреннего пользования. Этим правом, например, пользуются большие супермаркеты, наклеивая свой штрих код на свою продукцию, у которой он изначально отсутствовал. Это позволяет весь без исключения перечень продукции включить в систему автоматического учета предприятия. В качестве внутреннего штрих-кода можно использовать международный номер, но при этом обязательно впереди добавить цифру 2. Можно использовать любые другие штриховые коды и даже создать свой собственный с нужной структурой. Но за пределами организации или предприятия любые виды «домашнего» штрих кода не используются.
Любые межсетевые отношения и отношения с серьезными партнерами требуют, зарегистрировать штрих код в международной базе учета. В настоящее время получить международный штрих код на продукцию какого-либо производства достаточно просто.
На сайте компании EANCODE вы найдете много полезной информации о том, как приобрести штрих коды на организацию и ИП и сможете получить бесплатную консультацию онлайн по любым интересующим вопросам. Компания помогает получить и зарегистрировать уникальные товарные коды EAN-13, EAN-8, которые используются как во внутренних торговых структурах, так и в международной торговле. Также в связи с нарастанием тенденции к расширению информации о товарах, которую предоставляют клиентам, EANCODE работает с кодами EAN-13+5, которые образуются при добавлении к EAN-13 кода EAN-5. В этом случае с этикетки считывается ряд дополнительных данных о товаре, включая сведения о дате окончания срока годности.
Как зарегистрировать штрих код
Чтобы зарегистрировать штрих код на продукцию любого предприятия, нужно:
После этого остается оплатить счет.
Присвоение штрих кода
На следующий день после того, как произведена оплата, от EANCODE будут получены присвоенные заявленным товарам штрих коды. Каждый из них будет уже зарегистрированы в международной базе. Вместе со штрих кодами будет выслан сертификат о том, что присвоение штрих кода на товар произошло в законном порядке. Также вы получите графическое изображение штрих кодов для типографии.
Если каждый год производится взнос в размере 5000 рублей, предприятие сохраняет право на получение штрих кодов на всю свою продукцию в любом количестве без дополнительной оплаты. Все штрих коды, полученные через компанию EANCODE, имеют неограниченный срок действия, считываются любыми видами сканеров и могут применяться в любых торговых сетях.
Заключение
Хотя присвоение штрих кода на продукцию не является необходимым с точки зрения закона, это позволяет получить ряд существенных преимуществ и избежать многих трудностей, связанных с доверием деловых партнеров и покупателей. Использование системы штрих кодов на продукцию значительно упрощает труд кассиров, улучшает качество обслуживания покупателей и помогает правильному прогнозированию закупок. Если ваш торговый бизнес предусматривает внешние или даже международные деловые связи, то вам необходимо оформить нужные бумаги и получить на свои товары штрих код EAN. Специалисты компании EANCODE с удовольствием вам в этом помогут.
Малоизвестные факты о штрихкодах — загадочные цифры под штрихкодом
Число зверя, штрихи смерти — насколько все это реально? Можно ли зашить в штрихкод видеоролик или фото голой Эммы Уотсон? Бывают ли “неправильные штрихкоды”, и что вообще значит “неправильный штрихкод”?
В “Клеверенсе” мы разрабатываем платформу Mobile SMARTS для создания мобильных решений по учету маркированного товара и постоянно сталкиваемся с детскими ошибками в маркировке. Обычно они вызваны простым нежеланием людей хоть немного разбираться в теме.
Наша платформа тоже не идеальна, но кое-что в своём деле мы понимаем. Статья не к тому, что типа мы крутые и разбираемся, а все вокруг не крутые и не разбираются, нет. У каждого свои задачи, мы тоже часто лажаем. Просто тема набирает популярность и выходит в массы, а любые ошибки стоят денег.
Сначала для затравки расскажем про кассовый штрихкод, а затем про загадочный GS1 DataMatrix, который используется в проекте тотальной маркировки товаров.
Сама статья больше развлекательная, всё изложенное при желании легко гуглится, но может и побудить кого-то изучить тему глубже.
Загадочные цифры под штрихкодом
Цифры под штрихкодом — что это такое? Знающие люди говорят, что тут всё просто: именно эти цифры “зашиты” в штрихкод. Девушка на кассе вбивает в программу цифры под штрихкодом — и вуаля — товар найден.
К сожалению, это заблуждение. Цифры под штрихкодом не “зашиты” в штрихкод. Для разговоров у камина сойдет, а для айтишника беда.
Это распространенное заблуждение приводит к тому, что когда встает задача распечатать штрихкод, человек гуглит бесплатный онлайн генератор штрихкода, пихает в поле эти самые цифры, и… получает проблему на ровном месте.
Надписи под штрихкодом называются Human readable interpretation (HRI). Одно только название уже должно наводить на мысль, что тут не всё в порядке.
Рассмотрим подробнее, где тут собака зарыта.
Кассовый штрихкод
Пример про кассовый штрихкод — для затравки. Он на самом деле не вызывает никаких проблем, потому что за 50 лет использования в софте и оборудовании были вставлены 1000 костылей, чтобы обойти все проблемы (ну почти). Зато он хорошо иллюстрирует вопрос.
Вот в этих двух штрихкодах (EAN-13) ниже, под которыми написано “4601200000003” и “0123456789128”, в обоих нет штрихов для первой цифры. В первом штрихкоде нет штрихов для “4” (она закодирована другим способом), а во втором штрихкоде вообще в принципе нет лидирующего нуля, хотя он и напечатан под штрихкодом.
Да-да, именно первой цифры, а не последней (чексуммы) как можно было бы подумать. Последняя цифра (чексумма) в полосках этих штрихкодов как раз-таки есть, иначе затея с чексуммой не будет работать.
Рассмотрим поближе, что тут происходит.
В первом приведенном штрихкоде (“4601200000003”) в начале идут две длинные полосочки, они кодируют “начало штрихкода”, далее идут штрихи и пропуски для цифры “6”, затем про цифры “0”, “1”, “2”, “0” и “0”, две длинные полосочки в центре говорят про середину, затем пять одинаковых групп штрихов и пропусков кодируют “00000”, далее идут штрихи и пропуски для цифры “3” и завершающие две длинные полоски про конец штрихкода. Итого, в штрихкоде есть штрихи только про “601200000003”. Цифра “3” (последняя) в полосках штрихкода есть, а первой “4” нет! Откуда же взялась “4”?
Дело в том, что “4” закодирована грязным хаком. Для неё не хватает места, и вообще всё это большой исторический казус.
Изначально такие кассовые штрихкоды появились в США, там они состоят из 12 цифр и называются UPC (Universal Product Code). Для переноса технологии в Европу и адаптации стандарта Европе нужны были дополнительные цифры, потому что американские 12 все уже были заняты.
Первым товаром, приобретенным по штрих-коду на этикетке, стал блок из 10 жевательных резинок Wrigley Juicy Fruit. Это произошло в супермаркете Marsh города Трой (Огайо) в четверг, 26 июня 1974 года в 8.01 утра. В историю вошли и имя покупателя, и имя кассира, открывших новую страницу розничной торговли. Теперь упаковка жвачки, которая тогда обошлась в 67 центов, вместе с чеком хранятся в музее американской истории Смитсоновского института.
Чтобы расширить емкость, можно было бы просто добавить еще немного штрихов и пропусков, но в те времена это серьезно ухудшало считываемость. Поэтому вместо того, чтобы просто увеличить штрихкод в ширину, был применен “хак”.
По американскому стандарту любая из цифр штрихкода может быть записана: а) обычными штрихами и пропусками; б) их зеркальным отражением; в) инверсией черного и белого; г) зеркальной инверсией. Всё это нужно для того, чтобы можно было печатать инверсные штрихкоды (белым по черному) и сканировать штрихкод вверх ногами (зеркальное отражение в случае штрихкода — то же самое, что и поворот на 180°).
В “американском” штрихкоде (который на 12 цифр) первые 6 цифр кодируются обычными штрихами, а вторые 6 цифр инвертированными штрихами (где черные штрихи заменены на белые полоски и наоборот). Это сделано для того, чтобы понимать, перевернут штрихкод или нет, нормально я его сканирую или вверх ногами (и затем декодировать цифры в правильном порядке, а не задом наперед).
В новом “европейском” штрихкоде (который на 13 цифр), первая цифра (например, “4”) кодируется не штрихами, а путем «перетасовывания» способов кодирования следующих за ней 6 цифр из первого блока (второй блок из 6 оставили в покое).
Например, следующая за четверкой “6” выводится как обычно, штрихи следующего за ней “0” выводятся в обратном порядке (зеркально), следующие за ней “1” и “2” выводится снова в обычном виде, следующие два “0” снова зеркально. Общая длина штрихкода и число штрихов в результате этого трюка не меняется.
Для “американского сканера” такая белиберда не имеет смысла, а для Европы это тайный знак того, что в штрихкоде закодирована еще одна цифра! (да, мы всегда знали, что европейцы извращенцы).
Для всех цифр от “1” до “9” были придуманы такие правила тасовки способов кодирования. Для “0” ничего нет, т.е. 13-значный штрихкод с лидирующим нулем визуально ничем не отличается от 12-значного штрихкода без этого лишнего ноля (EAN-13 с лидирующим нулем эквивалентен UPC-А).
Из этого получается первый прикол, что если перед нами “американский” штрихкод (в котором варианты кодирования не “перетасованы”), то “американский сканер” читает 12 цифр, а условный “европейский сканер” может считать, что в нем есть лидирующий «0», и считывать лишний ноль (т.к. для кодирования ноля не предусмотрено никакой “перетасовки”, этого “лидирующего нуля” очевидно в принципе нигде нет в штрихкоде).
Конечно, мир давно глобализован, поэтому “американский” сканер и “европейский” сканер — это просто условности. Сканер один и тот же, но у него есть настройка: нужно ли ему в принципе считывать EAN-13 (Европа) или читать только UPC-А (США), а если считывать EAN-13, то надо ли добавлять лишний ноль к американским штрихкодам UPC-А.
С этим связана одна распространенная проблема при внедрении штрихкодирования: когда в базе данных у компании либо нет нолей в начале штрихкодов, а сканер считывает с “лишним” нолем, либо наоборот, в базе данных есть ноль в начале, а сканер его “не считывает” (хотя, что там считывать, — этого ноля в принципе в штрихкоде нет).
Казалось бы, сложно накосячить в использовании EAN-13/UPC. Тем не менее, люди делают следующие ошибки:
В наших программных продуктах, таких как “Магазин 15” или “Склад 15”, построенных на платформе Mobile SMARTS, мы решаем эту проблему очень просто: сканер устройства всегда автоматически настраивается на возврат ноля, а поиск товара по базе данных производится два раза: и с нолем, и без ноля (чтобы уж точно найти товар).
Сканер мы стараемся настраивать программно, без участия человека. Если сканер нельзя настроить программно — то это всегда проблема, потому что по умолчанию сканером может обрезаться не только 0 (который в начале), но еще и чексумма (которая в конце), тогда в программу придут не 13, а уже 11 символов, зачастую даже без указания типа штрихкода (такие замечательные сканеры тоже бывают).
В этом случае мы бессильны улучшить результат. 11 символов могли прийти от сканирования любого другого типа штрихкода, мы не можем считать все штрихкоды как EAN-13. Чтобы настроить сканер, человеку придется сканировать с листа настроечные штрихкоды или заходить в какие-нибудь меню, а всё это — источники ошибок.
GS1 DataMatrix
Этот пример стал популярным благодаря введению обязательной маркировки товаров. История полна граблей, велосипедов и трупиков мелких животных, как сарай вашей бабушки.
Ну ладно, допустим с EAN-13 можно придраться и сказать, что первая цифра всё-таки есть в штрихкоде, просто она закодирована не совсем штрихами (хотя для лидирующего “0” это и не так).
Возьмем тогда другой пример, штрихкод GS1 DataMatrix «(21)abba01(01)04601200000003»:
В этом штрихкоде “внутри” нет ни скобок, ни символа «0», ни буквы «a», ни переноса строки.
Что тут происходит?
Во-первых, никакие скобки в штрихкод не кодируются, они печатаются только для удобства прочтения человеком. Это снова называется Human readable interpretation (HRI), привет, кожаный мешок.
Во-вторых, в штрихкоде есть специальные управляющие символы, которые должна расставить та программа, которая формирует данные для штрихкода. Не какая-то бесплатная opensource программа, написанная умными очкариками, а ваша программа, та самая, которую пишете Вы, мой друг. В этот раз символы, которые нужно вставить, не имеют отношения к “коррекции” и т.п., а размечают данные, которые нужно закодировать в штрихкод.
В самом начале в штрихкод вставляется управляющий символ, который называется FNC1 и имеет код 232, что соответствует либо странному печатаемому символу «Þ» (ANSI), либо русской букве “и” (Windows-1251), смотря какую кодировку использовать. Этот символ говорит, что у нас не просто абы какой DataMatrix, а именно GS1 DataMatrix, данные в котором имеют определенный формат: массив данных из пар (“код поля”, “значение поля”).
Этот управляющий символ FNC1 попадает в самое начало штрихкода, но его нельзя “передать” в штрихкод в составе данных.
Кроме того, непечатаемые символы, вполне очевидно, нельзя копипастить в составе строки, хаха! Страдай, кожаный мешок!
Указание, нужен префикс или не нужен, обычно передают как отдельную настройку (галочку) в программу формирования штрихкода. Если передать префикс как часть данных, то получим либо ошибку, либо два префикса в штрихкоде (в зависимости от используемой программы).
Далее, поскольку в штрихкоде внутри нет скобок, то уже непонятно, где кончается одно поле и начинается другое, где тут номера полей. Без скобок получается “21abba010104601200000003” (тут “01” встречается три раза, ха-ха).
Где заканчивается “01” из значения поля (21) и начинается настоящее (01)?
Это решается следующим способом:
По стандарту GS1 поля имеют формат. Не абы что, а формат значения. Например, значение для (01) должно состоять из 14 цифр и баста (нельзя 13 цифр, нельзя 12 цифр, нельзя не цифры). А поле (21), наоборот, имеет переменную длину, разрешены цифры, латинские буквы обоих регистров, знаки препинания и даже (опачки!) скобки.
Если после значения для (21) штрихкод не закончился, и там еще что-то есть, то в данные вставляется разделитель (это может быть снова или FNC1, или непечатаемый символ GS с кодом 29).
А общее правило звучит так: спецсимвол GS не вставляется, только в случае если AI начинается с пары цифр из этой вот таблицы:
Для всех остальных полей GS1 (не из этой таблицы) в конце значения нужно вставлять GS.
Т.е., мы получим “FNC121abba01GS0104601200000003” (только помним, что первый FNC1 мы не будем передавать в программу формирования штрихкода, а второй GS — это не строка “GS”, а один символ с кодом 29).
Эти требования — именно про данные, а не про штрихкод DataMatrix, потому что в штрихкод DataMatrix можно положить любые данные, они прекрасно закодируются и прочитаются. Тут речь о GS1 DataMatrix, который имеет определенный формат, и ваша программа должна соблюсти этот формат, прежде чем подавать данные в штрихкод.
Вообще говоря, в мире существуют программы печати штрихкодов, которым можно скармливать данные со скобками и они сами всё разрулят. Но это специализированный софт, который стоит денег, а не тот бестолковый и бесплатный онлайн-генератор штрихкодов, которым вы пользуетесь.
И наконец. То, как это будет напечатано и то, как это будет отсканировано, — две большие разницы. То, как данные печатаются под штрихкодом, и как они передаются сканером — это в чистом виде настройки принтера и сканера.
В нашем примере мы закодировали в штрихкод поля порядке: сначала (21), потом (01), а на изображении под штрихкодом распечаталось сначала (01), потом (21). Это снова называется Human readable interpretation (HRI), и порядок вывода в подписи соответствует правилу “потому что так принято”.
Сканер штрихкодов тоже имеет свои настройки, которые заставляют его переставлять поля, вставлять скобки и другие символы, переносить строки и т.п.
В большинстве случаев сканер прочитает наш штрихкод как “21abba01GS0104601200000003”. Никакого лидирующего FNC1, никаких скобок, GS не печатаемый и не виден в “Блокноте” (нужно использовать хотя бы Notepad+).
И принтер, и сканер могут делать со штрихкодами что хотят: добавлять и убирать символы, менять их местами — ради соответствия гайдлайну или для совместимости со сторонней программой.
Что еще интересно: в этом штрихкоде только 16 байт данных (на 24 символа без скобок).
Вот что тут происходит:
Т.е. чтобы закодировать “a”, нужно записать в штрихкод “b”, чтобы закодировать “1”, нужно записать “2” и т.д., именно поэтому прямо в самом штрихкоде нет байта 97 (значение буквы “a” в ASCII).
Итого, в приведенном штрихкоде “закодировано” в байтах 232, 151, 98, 99, 99, 98, 131, 232, 131, 134, 190, 142, 130, 130, 130, 133. И это еще до кодов коррекции и паддинга!
Непонимание процесса кодирования приводит к тому, что, например, для начавшейся обязательной маркировки обуви люди печатают на принтер неправильно сформированные данные и получают неправильные штрихкоды, которые выглядят вполне нормально, читаются приложением “Честный знак”, но данные в них неверные, как минимум это не GS1 DataMatrix.
Штрихкоды неправильно напечатаны, неправильно читаются, и такая обувь не считается правильно промаркированной.
В своем софте “Кировка” мы боремся с этим следующим образом: для печати принимаем в качестве исходных данных любой мусор, пытаемся распарсить его как GS1 DataMatrix, разбираем на косточки. Если всё прошло удачно, то конвертируем в правильный формат, чтобы принтер это понял; а при сканировании перепроверяем данные от сканера, делая таким образом вывод о правильности печати.
Для этого нам, конечно, приходится работать на нативном уровне и со сканером мобильных устройств, и с принтерами, чтобы всё это было правильно ими интерпретировано, а мы собирали максимально полную информацию.
Выполним еще одно упражнение: посмотрим, какого размера должен быть штрихкод GS1 DataMatrix для хранения кода маркировки обуви и легпрома.
На сайте «Честного знака» написано, что код маркировки обуви должен содержать следующие поля (для легпрома те же требования):
Для каждого из этих полей в данных для штрихкода должен быть указан идентификатор применения GS1 (AI, application identifier).
Таблица codeword для DataMatrix
Таблица, объясняющая кодирование КМ обуви в DataMatrix:
Что | Формат | Codewords | Сколько байт | Всего байт, минимум | Всего байт, максимум |
---|---|---|---|---|---|
— | Codeword [232] | 1 | 1 | 1 | |
AI (00) | — | Codeword [130] | 1 | 2 | 2 |
GTIN | 14 цифр | Codeword со [130] по [229] | 7 | 9 | 9 |
AI (21) | — | Codeword [141] | 1 | 10 | 10 |
s/n | 13 знаков ASCII | Codewords с [1] по [128] и со [130] по [229] | от 7 до 13* | 17 | 23 |
— | Codeword 30 | 1 | 18 | 24 | |
AI (91) | — | Codeword 221 | 1 | 19 | 25 |
Ключ проверки | 4 цифры | Codeword с 130 по 229 | 4 | 23 | 29 |
AI (92) | — | Codeword 222 | 1 | 24 | 30 |
Код проверки | 88 знаков ASCII | Codewords с [1] по [128] и со [130] по [229] | от 44 до 88* | 28 | 118 |
* если в данных для штрихкода есть пары подряд идущих цифр, то они будут кодироваться одним байтом, а не двумя (Codewords со [130] по [229]), и это экономит байты.
Как видно, размер данных в теории может меняться в широких пределах от 68 до 118 байт. На практике разброс меньше, длина ближе к 118, потому что в серийном номере и в криптокоде мало цифр и много знаков препинания, включая скобки.
Согласно GS1 DataMatrix Guideline, такие данные укладываются в штрихкоды размером от 36х36 до 44х44 (колонок и строк битов, не миллиметров). В миллиметрах размер будет зависеть от разрешающей способности принтера (обычно это 203-600 dpi).
Таблица из GS1 DataMatrix Guideline
А как же голая Эмма Уотсон? Рассмотрим в следующей статье.