Создать штрих-код по номеру

Создать штрих-код по номеру Карманный ПК

Генератор этикеток и штрихкодов

Сервис BARCODER от WBCON.RU — это онлайн генератор этикеток и штрихкодов. Он создан для того, чтобы упростить генерацию этикеток на товар, штрихкодов (баркодов) и наклеек на дополнительную упаковку.

Достаточно заполнить данные о товарах и нажать одну кнопку, чтобы получить готовый PDF – сохранить себе или просто отправить на печать. Сервис имеет гибкие настройки и подойдет любому поставщику маркетплейсов и не только.

Генератор qr-кода для поставки wildberries fbo
Универсальный генератор QR
Генератор ШК КОРОБОВ WB (CODE128)

Одинаковое название поставщика на всех наклейках

* — параметры Штрихкод, Наименование продавца, Количество обязательны для заполнения. Штрихкод также проверяется на валидность

Размер наклейки (мм, ШхВ)

Или введите свой размер (мм. ШхВ) — макс. 210х297 (А4)

Размер шрифта (px)

После выбора нужных полей, они появятся в таблице для заполнения

Цвет и Размер в одну строку

Разделить Штрихкод и информацию на две наклейки

Товар не подлежит обязательной сертификации

Сделать отступ внутри страницы по X по левому краю (мм) +-30

Сделать отступ внутри страницы по X по правому краю (мм) +-30

Сделать отступ внутри страницы по Y по верхнему краю (мм) +-30

Сделать отступ внутри страницы по Y по нижнему краю (мм) +-30

Какой штрих-код лучше всего использовать?

В различных отраслях промышленности существуют стандарты использования типов штрих-кодов. Для маркировки товаров в рознице используются EAN и UPC. Используйте ISBN, ISSN и Bookland для книг и периодических изданий. Используйте UCC-128, EAN-128 или SSCC-18 для маркировки транспортных коробок. Обратите внимание, что промышленный стандарт не обязательно совпадает с символикой штрих-кода. ISBN, ISSN — это промышленные стандарты, основанные на символике штрих-кода EAN. UCC-128, EAN-128 и SSCC-18 используют штрих-код Code 128. Как правило, если товары должны сканироваться или продаваться в розницу, то лучшим типом штрих-кода для использования будут штрих-коды UPC или EAN. Учитывайте также объем данных, которые вам требуются. Если требуются буквенно-цифровые символы, то лучшим вариантом будет код 39 или код 128. Также учитывайте размер предметов, которые вы кодируете, и систему, которую вы будете использовать, поскольку двухмерные штрих-коды намного меньше, но могут не поддерживаться вашей системой или вашими партнерами по цепочке поставок.

Насколько маленьким может быть штрих-код?

Штрих-код может быть достаточно маленьким. Например, 1×1 см для двухмерного штрих-кода. Но в штрих-код меньшего размера можно закодировать меньше информации. И вам также предется использовать принтер с более высоким разрешением.

Сколько данных может содержать штрих-код?

Обычно это около 25 символов для 1D штрихкода и около 2000 для 2D. Конечно, чем больше символов вы закодируете, тем крупнее будет штрих-код. Штрих-код 1D может стать непрактично широким, если кодирует более чем из 15 символов.

Какой принцип работы штрих-кода?

Штрих-код — это комбинация контрастных меток, которую сканер может считывать и декодировать. В случае 1D штрих-кода это черные и белые вертикальные линии разной толщины. Для 2D это обычно узор из квадратных точек. Сканер использует специальные алгоритмы для декодирования этих шаблонов в текст.

Какие бывают типы штрих-кодов?

Существует множество различных символик штрих-кодов для разных областей применения.
Наиболее популярные одномерные штрих-коды:
Коды UPC — 12-значный одномерный штрих-код, используемый преимущественно в США для розничной торговли и товаров народного потребления. Этот штрих-код вы видите на своих розничных и потребительских покупках. Коды UPC состоят из пятизначного номера производителя и пятизначного номера продукта с однозначным идентификатором системы счисления в начале кода.
Коды EAN — европейский эквивалент кодов UPC. Код отличается от кода UPC тем, что дополнительная первая цифра определяет код страны происхождения.
Code 39 — используется в обороне и автомобилестроении. Код 39, как следует из названия, может содержать до 39 символов в штрих-коде. Код 39 — самый простой из буквенно-цифровых, он предназначен для самопроверки символов и часто используется малыми предприятиями для внутреннего использования.
Код 128 — Используемый на транспорте и логистике код 128 представляет собой код высокой плотности. Code 128 кодирует как числовой, так и буквенно-цифровой текст. Штрих-коды code 128, предназначенные для использования во внутренней цепочке поставок, могут хранить разнообразную информацию.

Самые популярные 2D штрих-коды:
QR-коды — один из самых распространенных 2D-кодов. QR-коды — это двухмерные матричные коды, ориентированные на потребителей и маркетинг. QR-коды поддерживают числовые, буквенно-цифровые, байтовые / двоичные коды и иероглифы. QR-коды бесплатны и доступны в открытом доступе.
Коды DataMatrix — эти 2D-коды, популярные для логистики и операций, имеют крошечные размеры и идеально подходят для маркировки небольших предметов, таких как электронные компоненты. Коды имеют преимущество в высокой отказоустойчивости и быстрой читаемости.
PDF417 — Эти коды могут хранить огромные объемы данных до 1,1 КБ. Коды идеально подходят для государственных приложений, таких как водительские права, поскольку они могут хранить фотографии, отпечатки пальцев, подписи, текст, числа и графику. Код общедоступен и бесплатен для использования.

Aspose EAN Генератор — это бесплатное онлайн-приложение для генерации штрих-кодов EAN. Это быстрый и простой способ добавления тегов машинного чтения к вашим документам и продуктам. Он поддерживает как растровые, так и векторные форматы выходных изображений. Генератор штрихкодов EAN поддерживает множество различных форматов вывода (PNG, JPEG, TIFF, BMP, GIF, SVG, EMF).

Это бесплатное приложение предоставлено Aspose.BarCode

Также посмотрите наш Cloud API

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

  • Что такое штрих-код EAN?Штрих-код EAN — это наиболее распространенный тип штрих-кода, используемый для розничных товаров. Коды EAN состоят из 13 цифр и кодируют код страны, код компании и код продукта. Штрих-код EAN можно использовать во всем мире, за исключением США и Канады, где используются штрих-коды UPC.
  • Что такое штрих-код UPC?Штрих-код UPC — второй по распространенности тип розничного штрих-кода. Код состоит из 12 цифр и кодирует код страны, код компании и код продукта. Штрих-коды UPC широко используются в США, Канаде, Европе, Австралии, Новой Зеландии и других странах для отслеживания предметов торговли в магазинах.
  • Где я могу получить номер UPC?Вам нужен «GS1 Company Prefix», который должен быть уникальным для создания собственных UPC штрих кодов. Выдачей таких номеров занимается организация GS1: https://www.gs1ru.org/jointhegs1ru/
  • Зачем нужен номер UPC?Это обычное требование для использования глобальных номеров товаров в торговле. Этот номер уникален для любого товара. Уникальный код помогает отслеживать и контролировать товары.
  • Какие бывают типы штрих-кодов?Существует множество различных символик штрих-кодов для разных областей применения.
    Наиболее популярные одномерные штрих-коды:
    Коды UPC — 12-значный одномерный штрих-код, используемый преимущественно в США для розничной торговли и товаров народного потребления. Этот штрих-код вы видите на своих розничных и потребительских покупках. Коды UPC состоят из пятизначного номера производителя и пятизначного номера продукта с однозначным идентификатором системы счисления в начале кода.
    Коды EAN — европейский эквивалент кодов UPC. Код отличается от кода UPC тем, что дополнительная первая цифра определяет код страны происхождения.
    Code 39 — используется в обороне и автомобилестроении. Код 39, как следует из названия, может содержать до 39 символов в штрих-коде. Код 39 — самый простой из буквенно-цифровых, он предназначен для самопроверки символов и часто используется малыми предприятиями для внутреннего использования.
    Код 128 — Используемый на транспорте и логистике код 128 представляет собой код высокой плотности. Code 128 кодирует как числовой, так и буквенно-цифровой текст. Штрих-коды code 128, предназначенные для использования во внутренней цепочке поставок, могут хранить разнообразную информацию.

    Самые популярные 2D штрих-коды:
    QR-коды — один из самых распространенных 2D-кодов. QR-коды — это двухмерные матричные коды, ориентированные на потребителей и маркетинг. QR-коды поддерживают числовые, буквенно-цифровые, байтовые / двоичные коды и иероглифы. QR-коды бесплатны и доступны в открытом доступе.
    Коды DataMatrix — эти 2D-коды, популярные для логистики и операций, имеют крошечные размеры и идеально подходят для маркировки небольших предметов, таких как электронные компоненты. Коды имеют преимущество в высокой отказоустойчивости и быстрой читаемости.
    PDF417 — Эти коды могут хранить огромные объемы данных до 1,1 КБ. Коды идеально подходят для государственных приложений, таких как водительские права, поскольку они могут хранить фотографии, отпечатки пальцев, подписи, текст, числа и графику. Код общедоступен и бесплатен для использования.

Генератор штрих кодов Aspose. BarCode

  • Генратор штрих кодов сохраняет изображения в растровом или векторном формате: PNG, JPEG, TIFF, BMP, GIF, SVG, EMF.
  • Приложение поддерживает различные типы штрих кодов: 1D торговые штрих коды: UPC-A, UPC-E, EAN-8, EAN-13, GS1 DataBar (RSS); 1D промышленные штрих коды: Code 39, Code 93, Code 128, GS1-128, Codabar, ITF-14; 2D штрих коды: QR Code, Data Matrix, Aztec, PDF 417

Создать штрих-код по номеру

Создать штрих-код по номеру

Как создать штрих код

  • Введите текст штрих кода.
  • Установите тип и размер штрих кода.
  • Нажмите кнопку «Сгенерировать».

Создать штрих-код по номеру

Введите текст штрих кода, выберите тип штрих кода и нажмите на кнопку “Сгенерировать”.

Создать штрих-код по номеру

Работает на всех платформах, включая Windows, Mac, Android и iOS. Все файлы обрабатываются на наших собственных серверах. Нет необходимости устанавливать дополнительное ПО или плагины.

Работает на Aspose.BarCode. Все файлы обрабатываются с использованием API Aspose, которые используются многими компаниями из списка Fortune 100 в 114 странах.

Популярные типы штрих кодов

Также вы можете создать штрих код из множества поддерживаемых типов.

Генератор штрих кода позволяет выбрать тип шк и создать баркод бесплатно и на русском языке.

Так как данный генератор шк работает онлайн, то вам не потребуется программа генератор штрих кодов, а созданный баркод вы сможете сохранить к себе на мобильник или компьютер.

Выберите Ваш генератор штрих кода

для создания двумерных штрих кодов, например, для маркировки товаров в системе Честный Знак

Создать 2d DataMatrix

EAN 13 это

EAN-13 является наиболее широко признанным штрих-кодом в Европе, используемым в супермаркетах и других розничных заведениях для идентификации основных продуктов.

EAN 13 является европейским эквивалентом штрих-кода UPC-A в США. В то время как EAN обозначает Европейский Номер Изделия, этот код теперь технически называется Международный Номер Изделия и используется также и за пределами Европы.

Как следует из названия, штрих-коды EAN-13 хранят в общей сложности 13 цифр, в отличие от кодов UPC-A, которые хранят 12.

Первые две цифры — это префикс GS1, который идентифицирует страну происхождения товара. Затем пятизначный номер компании для идентификации бренда, затем пятизначный номер товара для идентификации самого продукта.

Нажмите на кнопку ниже, чтобы открыть генератор штрикода еан 13.

EAN 13 Генератор онлайн

QR это

QR (Quick Read) код — это 2D матричный код, предназначенный для использования при маркировке и идентификации автомобильных деталей.

QR код приобрел огромную популярность благодаря коммерческому использованию, благодаря возможности сканирования и считывания со смартфонов.

Рекламодатели могут включать свой код практически на всем, как печатном, так и цифровом, а пользователи смартфонов могут сканировать его для расшифровки сообщения, часто давая им специальное предложение или скидку.

QR-код может быть как очень простым, так и очень сложным, и может отличаться по размеру. Это квадратная форма, которая включает в себя как черные, так и белые ячейки. Верхние два угла и нижний левый угол каждый содержат маленькую фигурку-поисковик, отображающуюся как квадрат внутри квадрата.

Нажмите на кнопку ниже, чтобы открыть генератор QR кода.

QR Генератор онлайн

Datamatrix это

Дата Матрикс — это 2D матричный код, способный кодировать очень большие объемы данных в компактном пространстве.

Datamatrix используется в различных сферах, включая аэрокосмическое использование, маркировку компонентов, оборону, почту и печатные средства массовой информации.

Также Datamatrix код используется для маркировки товаров в системе Честный Знак.

Штрих код Data Matrix способен кодировать до 2335 буквенно-цифровых символов или до 3116 цифровых символов.

Код Datamatrix состоит из нескольких блоков черно-белых ячеек, которые имеют либо квадратный, либо прямоугольный рисунок. Кроме того, каждая матрица данных имеет как периметр поиска, так и временной шаблон.

Благодаря встроенной системы исправления ошибок 2d штрих код Data Matrix предназначен для считывания даже в том случае, если он на 40% поврежден  Он также способен кодировать буквы, цифровые данные или другие ASCII-символы.

Нажмите на кнопку ниже, чтобы открыть генератор Datamatrix кода.

DataMatrix Генератор онлайн

Авторизация

Генератор Datamatrix — создай штрих код Data Matrix онлайн и бесплатно. Генератор Дата Матрикс позволяет задать нужную форму и размер штрихкода.

Данный генератор дата матрикс позволяет сделать по одному штрих коду за раз.

Если вам требуется сделать много кодов, например, из CSV или XLS файла, то перейдите в раздел Программы Генераторы Датаматрикс.

  • Вводите строку с информацией, например, Ваш e-mail, название веб-сайта, код маркировки товара;
  • Выбираете форму кода Дата Матрикс — квадратную или прямоугольную;
  • Выбираете размер — побольше или поменьше.

Остальные параметры, такие как форма модуля datamatrix и плотность размещения модулей datamatrix обычно не меняют.

Код data matrix создаётся в формате картинки GIF без потери качества.

Просто нажмите на полученное изображение штрих кода дата матрикслевой клавишей мышки и выберите «сохранить картинку».

Генератор создаёт штрих код по современному стандарту GS1 Data Matrix

Пример генерации кода DataMatrix

Я закодировал адрес сайта ecoprint.spb.ru с помощью кода DataMatrix различной формы и размера.

Вы можете проверить как считывается код DataMatrix с помощью камеры своего смартфона.

Квадратный DataMatrix код

стандартный размер, прямоугольный data matrix код получается меньше по высоте, чем квадратный датаматкрис код

Четырёх секционный Data Matrix код

замена формы модуля на «Х»

Код DataMatrix с точками

круглая форма модуля

Генератор Data Matrix Онлайн

Все современные программы для печати этикеток на термопринтере умеют генерировать код Дата Матрикс и создавать этикетки для маркировки в системе Честный Знак.

Программы генераторы штрих кода дата матрикс используют для подключения к базе данных с кодами маркировки (обычно в форме файла csv). После настройки подключения можно печать этикеток по шаблону.

Я сделал подборку программ для печати этикеток, в которую входят как бесплатные, так и платные программы.

Выбор программы зависит от модели вашего принтера этикеток и от потребностей в уровне автоматизации процесса штрих-кодирования.

Программа для печати этикеток DataMatrix

Штрих код представляет собой графическое изображение, с содержащейся в нем информацией для считывания которой необходимы технические средства. Первый штрих-код был изобретён в 1932 г.
Штрих коды подразделяются на линейные и двумерные (2d).   
Линейный штрих код  представляют из себя набор полосок, считывание которых происходит в одном направлении в  горизонтальной плоскости.
К линейным кодам относятся:

  • EAN/UPC (EAN-8 и UPC-E  состоят из 8 цифр, UPC-A – состоит из 12 цифр, в EAN-13 — используются 13 цифр)
  • Codabar

Двухмерный штрих код  служит для кодирования большого объема информации и его считывание происходит в двух направлениях – в горизонтальном и вертикальном. В свою очередь двумерный штрих код подразделяется на многоуровневый и матричный.
Многоуровневый штрих код состоит из нескольких рядов линейных штрих кодов.
К двумерным многоуровневым штрих кодам относятся следующие коды:

  • PDF417
  • RSS14

Матричный штрих код представляет из себя квадратное изображение в котором по горизонтали и вертикали расположено равное количество элементов кода.
К двумерным матричным штрих кодам относятся следующие коды:

  • Aztec Code
  • Data Matrix
  • MaxiCode
  • QR код
  • Han Xin

Время на прочтение

Однажды в процессе производственной деятельности у меня появилась необходимость генерации штрихкода по стандарту code128. Появилась в виду того, что имевшаяся в эксплуатации функция (хранимая процедура в базе Oracle) генерировала клёвый, полосатый штрихкод, который читался не во всех случаях. Разработчики в своё время оттестировали эту процедуру весьма некачественно, но перерабатывать уже не собирались т.к. проект был давно сдан, а потребности в считывании так и не появились.

Самое время пощупать теорию. Вернее мы с ней познакомились намного раньше, просто до последнего не хотелось ввязываться в дополнительное программирование. Исторические факты опустим, а вот очень хорошее техническое описание имеется на http://code128.narod.ru/ (в архиве это файл Descript.doc ) либо в Википедии. В принципе, это всё что нам потребуется для понимания и собственной реализации алгоритма (тут я немного лукавлю — из любой готовой библиотеки нужно выдрать таблицы толщин штрихов, чтобы не вбивать их вручную). Ну и напишем всё это безобразие на php, заодно посмотрим пару прикольных моментов, про которые все забывают или стесняются использовать.

Теория гласит, что code128 позволяет закодировать (сюрпрайз!) 128 символов, при этом нам доступно 3 алфавита, между которыми можно переключаться по ходу дела. Наибольший практический интерес представляют алфавит «B» для буквенно-цифровых символов и алфавит «С» который используется для кодирования цифр, но с некоторой оптимизацией — одним штриховым символом можно закодировать 2 исходных символа и получить более короткий штрихкод. Вот эта оптимизация пока не даётся ни одному php-разработчику — максимум что я видел это попытка в начале кодирования определить состав строки и при наличии только цифр переключаться на алфавит «С». В остальных библиотеках это банальная подстановка символов штрихкода по таблице.

Для начала осмотрим приборы и материалы — в начале строки можем задать алфавит для кодирования, перед каждым символом можем переключить алфавит. Также мы на входе ограничены по длине строки — это очень хорошо и важно для нас. Имеем цель — получить штрихкод. Точнее, самый короткий штрихкод.

Разберём пару примеров. Допустим у нас есть последовательность «ABC12DE» попробуем её закодировать разными методами, на примере изображены слева только алфавит B, справа — совместно B и С:

Создать штрих-код по номеру

Наша попытка оптимизировать длину кода используя более короткий алфавит потерпела фиаско — мы получили дополнительные символы на переключениях алфавита и в результате штрихкод стал на 1 символ длиннее. Если хорошо подумать, то переключение на алфавит С выгодно при наличии 6 и более цифр подряд. Но есть ведь и граничные случаи — цифры в конце последовательности, в начале, а есть еще вариант с нечетным количеством цифр и тогда надо пристально смотреть когда переключаться на алфавит С — с первой цифры или со второй? В общем вариантов достаточно много, что в итоге у большинства отбивает желание оптимизировать длину кода, а делать всё одним алфавитом.

И вот тут нас озаряет, что работа с рекурсивной функцией избавит нас от рассмотрения всех этих условий и задача станет невероятно простой — функция будет вызывать сама себя с тремя вариантами кодирования текущего символа и возвращать наиболее короткий (итоговый) вариант. Причём длина варианта включает в себя и символ переключения между алфавитами. Причин отказа от захода в ветку алгоритма совсем немного — либо кончился входной поток, либо мы не можем закодировать символ(ы) данным алфавитом (например нет 2-х цифр для алфавита «С»). Так, как входной поток имеет ограничение по длине, то дерево не будет расти бесконечно! По тексту будем реализовывать только алфавит «B» и «C» — проще для понимания и потом объясню остальное 🙂

Сразу набросаем простейший класс который содержит сам текст, такие-же классы для рассмотрения вариантов по алфавиту B и С, длину последовательности. Делаем ему минимальный конструктор — на входе строка для кодирования, режим кодирования, ссылки на потомков. В начале конструктора добавляем проверки, чтобы не прорабатывать данную ветку дерева:

и сразу ловим конкретный косяк — куча «пустых» объектов. И это не смотря на то что мы явно отказались создаваться и вроде как железно возвращаем NULL! В общем сразу надо понять, что в php объект создаётся в любом случае. Полагаю что также и в остальных объектно-ориентированных языках. И все эти условия надо проверять перед созданием объекта. Следовательно правильный конструктор будет выглядеть примерно так:

Не считая того, что мы избавились от пустых объектов, код получился даже немного короче чем прототип. Дальше начнём немного оптимизировать — добавим небольшой трюк: вместо того чтобы делать кучу проверок является ли последовательность символами, цифрами, их количество и т.д. просто смотрим в таблице наличие такого индекса в алфавите. Я уже писал что таблицу можно добыть в любой библиотеке реализующей кодирование code128? В общем напоминаю ещё раз, и готовый кусочек кода, который мне уже нравится, приведен ниже:

Дерево строится, но результата пока не видно. Следующим этапом необходимо определить самую короткую ветку: Первый вариант — заводим в классе счётчик и увеличиваем его при каждом переходе на ветку. Как только достигнем дна (конца исходного текста), на концах дерева будет указан размер финального кода. Второй вариант — конечные веточки ставят себе размер 1, а дальше родитель решает какой из потомков имеет код короче и ставит себе размер на 1 или 2 больше. Почему на 2? Надо учитывать накладные расходы на переключение алфавита. Кстати и в первом варианте это тоже надо учитывать. В итоге в корне дерева будет длина самой короткой последовательности. Чем хорош первый вариант? Получение итоговой последовательности практически мгновенное — возвращаешься «по папе» к корню дерева. Ну и недостаток — чтобы найти самую короткую ветку надо сделать полный обход дерева. Второй вариант — длина самой короткой последовательности известна и находится в одном месте, но получение последовательности чуток посложнее, хотя и не требует полного обхода. Попробуем проработать первый вариант — доделать надо совсем немного, просто родитель после создания потомков должен выбрать самого короткого потомка и сохранить ссылку на конечный элемент ветки. Выразился невероятно коряво, но Вы посмотрите код — там ещё страшнее 🙂

Итак, худо-бедно мы нашли самый короткий путь (штрихкод). Надо его вывести для начала на экран. Делаем в два этапа: сначала от потомка возвращаемся к родителю. Итоговые символы, включая переключение между алфавитами, пушим (push) в массив. Да, в PHP есть такая функция, и она позволяет нам сделать из массива довольно удобный стэк.

Когда потребуется вывести строку — используем array_pop. Таким образом, мы по прежнему используем данный массив как стэк и легко выводим информацию в обратном порядке. Попутно готовим дополнительную обвязку для нашего штрихкода — старт/стоп/контрольная сумма.

Финал совсем близко — я уже устал писать, Вы устали читать. Предлагаю пробежаться весьма бегло. Само рисование сделано в виде SVG. Для данной задачи весьма удобно — нет необходимости кодировать размеры изображения, они будут задаваться тэгами на страничке. Кроме того, рендеринг и масштабирование осуществляется конечным устройством, что обеспечит необходимое качество в dpi соответствующее устройству вывода.

Появился глобальный массив $barPattern. Искать в файле tables.php рядом с $symCode. Кусочек приведу. Там всё просто — для заданного кода выходного символа чередуются толщины черных и белых штрихов:

$barPattern = array(
‘212222’, /* 0 */
‘222122’, /* 1 */
‘222221’, /* 2 */
‘121223’, /* 3 */
‘121322’, /* 4 */

Как этим пользоваться? В файл с классом в конец добавим пару строк:

попробовать можно сразу, вставив в html-страничку примерно вот такой тэг:

Ну и напоследок. Реализованы только алфавиты «B» и «С». Уложился примерно в 100 строчек, не считая таблиц перекодировки. Реализовать алфавит «А» можно аналогичным способом просто дописав конструктор и таблицу с алфавитами, только желательно учесть один хитрый код, позволяющий кратковременно переключиться на один символ другого алфавита. Самому дописать у меня нет ни желания, ни времени, ни прочих мотиваций. (Полу)готовый проект вероятно пополнит кладбище штрихкодировщиков на гитхабе — если у кого есть желание продолжить проект — пишите, не стесняйтесь.

Как устроен штрихкод?

Со штрихкодами современный человек сталкивается каждый день, даже не задумываясь об этом. Когда мы покупаем в супермаркете продукты, их коды считываются именно с помощью штрихкода. Также посылки, товары на складах, и прочее и прочее. Однако, мало кто знает, как же реально это работает.

Как устроен баркод, и что закодировано на этой картинке?

Создать штрих-код по номеру

Попробуем разобраться, заодно напишем декодер таких кодов.

Введение

Использование штрихкодов имеет давнюю историю. Первые попытки автоматизации начинались еще в 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, так что массив нужно инвертировать. Заодно вычислим среднее значение.

hor_data = 255 — hor_data
avg = np.average(hor_data)

plt.plot(hor_data)
plt.show()

Запускаем программу, чтобы убедиться, что баркод загружен корректно:

Создать штрих-код по номеру

Теперь нужно определить ширину одного «бита». Для этого мы выделим начало стартовой последовательности «1101», записывая моменты перехода графика через среднюю линию.

Мы записываем только переходы через середину, так что код «1101» будет записан как «101», но нам этого достаточно чтобы узнать его ширину в пикселах.

Теперь собственно декодирование. Находим очередной переход через середину, и определяем число бит, попавших в интервал. Поскольку совпадение не абсолютное (код может быть слегка изогнут или растянут), используем округление.

Не уверен что это оптимальный вариант, возможно, есть способ лучше, желающие могут написать в комментариях.

Если все было сделано правильно, то мы получаем на выходе примерно такую последовательность:

Декодирование

Здесь никаких сложностей в принципе, нет. Символы в Code-128 кодируются 11-битным кодом, который имеет 3 разновидности (А, В и С) и может хранить либо разные кодировки символов, либо цифры от 00 до 99.

В нашем случае, начало последовательности 11010010000, что соответствует «Code B». Было жутко влом вбивать вручную все коды из Википедии, поэтому таблица была просто скопирована из браузера и ее парсинг был тоже сделан на Python (hint: на продакшене так делать не надо).

Теперь осталось самое простое. Разбиваем нашу битовую последовательность на 11-символьные блоки:

Наконец, формируем строку и выводим ее на экран:

Ответ на то, что закодировано в таблице, приводить не буду, пусть это будет домашним заданием для читателей (использование готовых программ для смартфонов будет считаться читерством:).

В коде также не реализована проверка CRC, желающие могут сделать это самостоятельно.

Разумеется, алгоритм неидеален, и был написан за полчаса. Для более профессиональных целей есть готовые библиотеки, например pyzbar. Код с использованием такой библиотеки займет всего 4 строчки:

from pyzbar.pyzbar import decode

img = Image.open(image_path)
decode = decode(img)
print(decode)

(предварительно нужно установить библиотеку, введя команду «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 и тд.

Описанный способ стал стандартом вычисления контрольной суммы EAN13 за небольшими правками: число цифр стало фиксированным и равно 13, где 13-ая — это та самая контрольная цифра. Цифры на нечетных местах считаются трижды, на четных — один раз.

Заключение

Как можно видеть, даже такая простая вещь как штрихкод, имеет в себе немало интересного. Кстати, еще один лайфхак для тех, кто дочитал до сюда — текст под штрихкодом (если он есть) полностью дублирует его содержание. Это сделано для того, чтобы в случае нечитабельности кода, оператор мог ввести его вручную. Так что узнать содержимое штрихкода обычно просто — достаточно посмотреть на текст под ним.

Как подсказали в комментариях, наиболее популярным в торговле является код EAN-13, битовое кодирование там такое же, а структуру символов желающие могут посмотреть самостоятельно.

Если у читателей не пропал интерес, отдельно можно рассмотреть QR-коды.

Спасибо за внимание.

Про мини ПК:  Цена успешного беспроводного 2D-сканера штрих-кода
Оцените статью
Карман PC
Добавить комментарий