штрих код 128 описание

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

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

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

штрих код 128 описание

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

Введение

Использование штрихкодов имеет давнюю историю. Первые попытки автоматизации начинались еще в 50х, патент на устройство считывания кодов был получен в 1952г. Инженер, занимавшийся сортировкой вагонов на железной дороге, захотел упростить процесс. Идея была очевидной — кодировать номер с помощью полос и считывать их с помощью фотоэлементов. В 1962г коды стали официально использоваться для идентификации вагонов на американской железной дороге (система KarTrak), в 1968 прожектор заменили лазерным лучом, что позволило повысить точность и уменьшить размер считывателя. В 1973г появился формат «универсального кода продукта» (Universal Product Code), и в 1974 с использованием сканера кодов был продан первый продукт (жевательная резинка Wrigley’s — это же США;) в супермаркете. В 1984 треть магазинов использовали штриходы, в России же они начали использоваться примерно с 90х годов.

Разных кодов под разные задачи сейчас используется довольно много, к примеру, последовательность «12345678» может быть представлена такими способами (и это еще не все):

штрих код 128 описание

Приступим к побитовому разбору. Далее, все ниженаписанное будет относиться к виду «Code-128» — просто потому, что его формат довольно простой и понятный. Желающие поэкспериментировать с другими видами, могут открыть онлайн-генератор и посмотреть самостоятельно.

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

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

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

штрих код 128 описание

Теперь нужно определить ширину одного «бита». Для этого мы выделим начало стартовой последовательности «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-коды.

Источник

Использование штрих-кода CODE-128 для производства пластиковых карт

В отличие от штрих-кодов EAN-13 и EAN-8, штрих-код CODE-128 не имеет фиксированного количества символов, и в нем не используется контрольный символ.

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

Технические требования к символике штрихового кода Code 128, показатели символики, кодирование знаков данных, размеры, алгоритмы декодирования, параметры применения и строки-префиксы и идентификатора символики в России регламентируются ГОСТ 30743-2001 (ИСО/МЭК 15417—2000) «Автоматическая идентификация. Кодирование штриховое. Спецификация символики Code 128 (Код 128)».

Какие символы кодируются в штрих-код CODE-128?

В штрих-код CODE-128 можно закодировать до 70 символов:

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

Внешний вид штрих-кода CODE-128

На рисунке, расположенном ниже, размещен пример штрих-кода с номером 00001 с различными вариантам отображения подписанного номера.

вы можете проверить
штрих-коды сосканировав их с экрана своим телефоном

CODE-128 С ПОДПИСАННЫМ НОМЕРОМ

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

Введите символы и цифры:

CODE-128 С ЧАСТИЧНО ПОДПИСАННЫМ НОМЕРОМ

Под штрих-кодом полностью отображена часть закодированного номера.

Введите символы и цифры:

Отображать цифр справа:

CODE-128 БЕЗ ПОДПИСАННОГО НОМЕРА

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

Введите символы и цифры:

Структура Code 128

Структура штрих-кода Code128 достаточно проста. Он состоит из шести зон:

Символы Code128 состоят из трех штрихов и трех промежутков. Штрихи и промежутки имеют модульное построение. Ширина каждого модуля составляет от 1 до 4 модулей (1 модуль = 0,33 мм). Ширина знака равна 11 модулям. Остановочный (стоп) знак состоит из тринадцати модулей и имеет четыре штриха и три промежутка.

Контрольный знак Code 128

В спецификации Code128 использование контрольного знака является обязательным.

Согласно таблице символов Code128, каждому знаку присваивается соответствующее значение. Затем, для каждого знака, кроме знака «Stop» и контрольного знака, назначается весовой коэффициент, 1, 2, 3,…,n. При этом знакам «Start» и следующему за ним первому знаку, присваивается весовой коэффициент равный 1.

Контрольный знак вычисляется как сумма произведений весовых коэффициентов на соответствующие значения по модулю 103. Располагается контрольный знак между последним знаком данных и знаком «Stop».

Источник

Штрих код 128 описание

ГОСТ 30743-2001
(ИСО/МЭК 15417-2000)

Спецификация символики Code 128 (Код 128)

Automatic identification. Bar coding.
Symbology specification Code 128

Дата введения 2002-01-01

1 РАЗРАБОТАН ЗАО «Фирма ПИЛОТ» совместно с Ассоциацией автоматической идентификации ЮНИСКАН/EAN РОССИЯ/АIМ РОССИЯ в рамках Межгосударственного технического комитета МТК 517 «Автоматическая идентификация»

ВНЕСЕН Госстандартом России

2 ПРИНЯТ Межгосударственным Советом по стандартизации, метрологии и сертификации (протокол N 19 от 24 мая 2001 г.)

За принятие проголосовали:

Наименование национального органа по стандартизации

Госстандарт Республики Беларусь

Госстандарт Республики Казахстан

4 Постановлением государственного комитета Российской Федерации по стандартизации и метрологии от 16 августа 2001 г. N 335-ст межгосударственный стандарт ГОСТ 30743-2001 (ИСО/МЭК 15417-2000) введен в действие непосредственно в качестве государственного стандарта Российской Федерации с 1 января 2002 г.

Введение

Производителям оборудования для штрихового кодирования и пользователям технологии штрихового кодирования необходимы общедоступные стандартные спецификации символик штрихового кода для разработки оборудования и программного обеспечения.

1 Область применения

Настоящий стандарт устанавливает технические требования к символике штрихового кода Code 128 (Код 128), показатели символики Code 128, кодирование знаков данных, размеры, алгоритмы декодирования, параметры применения, определяемые пользователями, и строки-префиксы идентификатора символики.

2 Нормативные ссылки

ГОСТ 27463-87 Системы обработки информации. 7-битные кодированные наборы символов

ГОСТ 27465-87 Системы обработки информации. Символы. Классификация

ГОСТ 30721-2000 / ГОСТ Р 51294.3-99 Автоматическая идентификация. Кодирование штриховое. Термины и определения

ГОСТ 34.302.2-91 (ИСО 8859-2-87) Наборы 8-битных однобайтовых кодированных графических символов. Латинский алфавит N 2

3 Термины и определения

В настоящем стандарте применяют термины по ГОСТ 30721.

4 Требования

4.1 Показатели символики

К показателям символики Code 128 относят следующие показатели:

а) набор кодированных знаков:

1) все 128 знаков версии КОИ-7 в соответствии с [1]*, то есть знаки с десятичными значениями от 0 до 127 включительно,

2) знаки версии КОИ-8 с десятичными значениями от 128 до 255 также могут быть закодированы,

3) четыре функциональных знака, не являющихся данными,

4) четыре знака для вызова кодируемого набора знаков,

5) три знака Start (СТАРТ)**,

6) один знак Stop (СТОП)**,

(ТИЛЬДА) (десятичное значение 111).

** В скобках указано русское обозначение знака согласно приложению L.

4.2 Структура символа

Символы Code 128 должны включать:

a) начальную свободную зону;

c) один или несколько знаков, представляющих данные и специальные знаки;

d) контрольный знак символа;

f) конечную свободную зону.

На рисунке 1 представлен символ Code 128, кодирующий текст «AIM».

штрих код 128 описание

4.3 Значения знаков

4.3.1 Структура знака символа

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

На рисунке 2 приведен знак Start A.

штрих код 128 описание

штрих код 128 описание

На рисунке 3 приведен знак символа с закодированным значением 35, который представляет знак данных С в кодируемых наборах А или В, или две указанные цифры 35 в кодируемом наборе знаков С.

На рисунке 4 приведен знак Stop.

штрих код 128 описание

4.3.2 Кодирование знаков данных

Code 128 имеет три уникальных кодируемых набора знаков данных, приведенных в таблице 1 (наборы А, В и С). Представленные комбинации штрихов и пробелов знаков символов соответствуют знакам данных, приведенным в графах с заголовками «Кодируемый набор А», «Кодируемый набор В» или «Кодируемый набор С». Выбор кодируемого набора зависит от знака Start или использования одного из знаков Code А (Код A), Code В (Код В) или Code С (Код С), или знака Shift (РЕГИСТР). Если символ начинается со знака Start А, то изначально определен кодируемый набор А. Аналогично определяют наборы В и С, когда символ начинается со знака Start В или С соответственно. Кодируемый набор может быть изменен в пределах символа при помощи знаков Code A, Code В и Code С или знака Shift (использование этих специальных знаков в соответствии с 4.3.4.2).

Одни и те же данные могут быть представлены различными символами Code 128 с использованием различных комбинаций знаков Start, знаков кодируемых наборов Code A, Code В и Code С, и знака Shift. Применение не должно устанавливать кодируемый набор для использования. В приложении Е приведены правила, способствующие минимизации длины символа для любых данных. В дополнение к этому декодер должен декодировать символы, содержащие допустимые комбинации знаков Start, Code и Shift, помимо указанных в приложении Е, например символ со знаком Code в конце данных.

Каждому знаку символа соответствует числовое значение, приведенное в таблице 1, которое используют для вычисления контрольного знака символа. Оно может быть также использовано для преобразований в значения КОИ-7 (КОИ-8) и обратно (приложение D).

4.3.3 Кодируемые наборы знаков

4.3.3.1 Кодируемый набор А

Кодируемый набор А включает все стандартные прописные латинские буквы и цифры, специальные графические знаки (знаки пунктуации) и управляющие знаки (т.е. знаки версии КОИ-7 с десятичными значениями от 00 до 95), а также семь специальных знаков.

Источник

штрих код 128 описание

GS1-128 (ранее известный как UCC / EAN-128) является подмножеством Code 128 и широко используется во всем мире в отраслях судоходства и упаковки в качестве идентификационного кода продукта для уровней контейнера и поддона в цепочке поставок.

СОДЕРЖАНИЕ

Технические характеристики

штрих код 128 описание

Штрих-код Code 128 состоит из семи разделов:

Контрольный символ рассчитывается из взвешенной суммы ( по модулю 103) всех символов.

Подтипы

Код 128 включает 108 символов: 103 символа данных, 3 начальных символа и 2 символа остановки. Каждый символ состоит из трех черных полос и трех белых промежутков разной ширины. Все ширины кратны базовому «модулю». Каждая полоса и пробел имеют ширину от 1 до 4 модулей, а символы имеют фиксированную ширину: сумма ширины трех черных полос и трех белых полос составляет 11 модулей.

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

Несмотря на свое название, Code 128 не имеет 128 различных символов, поэтому он не может напрямую представлять 128 кодовых точек. Чтобы представить все 128 значений ASCII, он переключается между тремя кодовыми наборами (A, B, C). Вместе кодовые наборы A и B охватывают все 128 символов ASCII. Кодовый набор C используется для эффективного кодирования цепочек цифр. Начальное подмножество выбирается с помощью соответствующего начального символа. В каждом кодовом наборе некоторые из 103 кодовых точек данных зарезервированы для перехода к одному из двух других кодовых наборов. Сдвиги выполняются с использованием кодовых точек 98 и 99 в кодовых наборах A и B, 100 в кодовых наборах A и C и 101 в кодовых наборах B и C для переключения между ними):

Старт / стоп и закодированные данные

Расчет контрольной цифры

Например, в следующей таблице для буквенно-цифровой строки PJJ123C вычисляется значение контрольной суммы варианта A кода 128:

КодЦенитьПозицияЗначение ×
позиция
Начальный код A1031103
п48148
J42284
J423126
117468
218590
3196114
C35 год7245
Сумма878
Остаток по модулю 10354

Использование FNC4 для кодирования высоких (128–255) символов

Ширина штрих-кода

Code128 определяет комбинацию из 6 чередующихся полосок и пробелов (по 3 каждого) для каждого символа. Таким образом, каждый символ начинается с полосы и заканчивается пробелом. В шрифтах штрих-кода последняя полоса обычно сочетается с символом остановки, чтобы создать более широкий шаблон остановки. В следующей таблице указаны значения ширины каждой полосы и пробела для каждого символа. Ширина каждой планки или пробела может составлять 1, 2, 3 или 4 единицы (модуля). В приведенном выше примере буква «А» будет изображена с рисунком 10100011000 или шириной 111323 в таблицах ниже.

Значение ширины получается путем подсчета длины каждого ряда единиц, затем нулей в шаблоне, начиная слева. Всегда будет 6 прогонов, и длина этих 6 прогонов формирует значение ширины. Например, при использовании шаблона 10100011000 длины серий будут 1 (цифра 1), 1 (цифра 0), 1 (цифра 1), 3 (цифра 0), 2 (цифра 1), 3 (цифра 0). Если указать только длину каждого прогона, получится 1, 1, 1, 3, 2, 3, что приведет к значению ширины 111323.

Код 128

ЦенитьШестнадцатеричное значение128A128B128CПоложение шрифта
(Обычный / Необычный / Barcodesoft)
Бар / Пробел
КодLatin-1ШаблонШирина
000КосмосКосмос0032 или 194 или 207/212/252␣ или Â или Ï / Ô / ü11011001100212222
101!!0133!11001101100222122
202««0234«11001100110222221
303##0335 год#10010011000121223
404$$0436$10010001100121322
505%%0537%10001001100131222
606&&0638&10011001000122213
707073910011000100122312
808((0840(10001100100132212
909))0941 год)11001001000221213
100a**1042*11001000100221312
110b++1143 год+11000100100231212
120c,,1244 год,10110011100112232
130d134510011011100122132
140e..1446.10011001110122231
150f//1547/10111001100113222
1610001648010011101100123122
1711111749110011100110123221
1812221850211001110010223211
1913331951311001011100221132
2014442052411001001110221231
21 год155521 год53511011100100213212
2216662254611001110100223112
2317772355711101101110312131
2418882456811101001100311222
2519992557 год911100101100321122
26 год::26 год58:11100100110321221
271b;;2759;11101100100312212
28 год1c>3062>11011011000212123
31 год1f??31 год63?11011000110212321
3220@@3264@11000110110232121
3321 годАА3365А10100011000111323
3422BB3466B10001011000131123
35 год23CC35 год67C10001000110131321
3624DD3668D10110001000112313
3725EE3769E10001101000132113
3826 годFF3870F10001100010132311
3927граммграмм3971грамм11010001000211313
4028 годЧАСЧАС4072ЧАС11000101000231113
41 год29яя41 год73я11000100010231311
42JJ4274J10110111000112133
43 год2bKK43 год75K10110001110112331
44 год2cLL44 год76L10001101110132131
452dMM4577M10111011000113123
462eNN4678N10111000110113321
472fОО4779О10001110110133121
4830пп4880п11101110110313121
4931 годQQ4981 годQ11010001110211331
5032рр5082р11000101110231131
5133SS5183S11011101000213113
5234ТТ5284Т11011100010213311
5335 годUU5385U11011101110213131
5436VV5486V11101011000311123
5537WW5587W11101000110311321
5638ИксИкс5688Икс11100010110331121
57 год39YY57 год89Y11101101000312113
58ZZ5890Z11101100010312311
593b[[5991[11100011010332111
603c\\6092\11101111010314111
613d]]6193]11001000010221411
623e^^6294^11110001010431111
633f__6395_10100110000111224
6440NUL`6496`10100001100111422
6541 годSOHа6597а10010110000121124
6642STXб6698б10010000110121421
6743 годETXc6799c10000101100141122
6844 годEOTd68100d10000100110141221
6945ENQе69101е10110010000112214
7046ACKж70102ж10110000100112412
7147BELграмм71103грамм10011010000122114
7248BSчас72104час10011000010122411
7349HTя73105я10000110100142112
74LFj74106j10000110010142211
754bVTk75107k11000010010241211
764cFFл76108л11001010000221114
774dCRм77109м11110111010413111
784eТАКп78110п11000010100241112
794fSIо79111о10001111010134111
8050DLEп80112п10100111100111242
81 год51DC1q81 год113q10010111100121142
8252DC2р82114р10010011110121241
8353DC3s83115s10111100100114212
8454DC4т84116т10011110100124112
8555НАКты85117ты10011110010124211
8656SYNv86118v11110100100411212
8757 годETBш87119ш11110010100421112
8858ЖЕСТЯНАЯ БАНКАИкс88120Икс11110010010421211
8959ЭМу89121у11011011110212141
90SUBz90122z11011110110214121
915bESC <91123 <11110110110412121
925cFS|92124|10101111000111143
935dGS>93125>10100011110111341
945eRS10001011110131141
955fнасDEL95195/200/240Ã / È / ð10111101000114113
9660FNC 3FNC 396196/201/241Ä / É / ñ10111100010114311
9761FNC 2FNC 297197/202/242Å / Ê / ò11110101000411113
9862Сдвиг BСдвиг А98198/203/243Æ / Ë / ó11110100010411311
9963Код CКод C99199/204/244Ç / Ì / ô10111011110113141
10064Код BFNC 4Код B200/205/245È / Í / õ10111101110114131
10165FNC 4Код АКод А201/206/246É / Î / ö11101011110311141
10266FNC 1FNC 1FNC 1202/207/247Ê / Ï / ÷11110101110411131
10367Начальный код A203/208/248Ë / Ð / ø11010000100211412
10468Начальный код B204/209/249Ì / Ñ / ù11010010000211214
10569Начальный код C205/210/250Í / Ò / ú11010011100211232
106Стоп11000111010233111
Обратный стоп11010111000211133
Стоп-паттерн (7 баров / пробелов)206/211/251Î / Ó / û11000111010112331112

Символы «Код A», «Код B» и «Код C» заставляют все следующие символы интерпретироваться согласно соответствующему субкоду (то есть 128A, 128B или 128C). Символ «Shift» переключает интерпретацию одного следующего символа между подкодами A и B.

Закодированный символ ASCII зависит от фактического используемого шрифта штрих-кода. В частности, символ ASCII со значением 0 и значением 95 и выше может быть определен по-разному в установленном шрифте.

Расчет контрольной цифры для указанного выше примера почтового индекса:

ЦенитьМассаВес × значение
Начать C1051105
FNC11021102
4242284
1818354
40404160
20205100
50506300
Код А1017707
0168128
Сумма =1740 г.
1740 г.Мод 103 =92

Доступность

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

Оптимизация длины штрих-кода

Использование кодового набора C выгодно только при следующих условиях:

Расположение цифрКоличество последовательных цифр
начало данных4+
конец данных4+
середина данных (окружена символами из кодового набора A или B)6+
все данныелибо 2, либо 4+ (но не 3)

Оптимальное кодирование может быть найдено с использованием динамического программирования алгоритма.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *