Code 128
Code 128 — это высокоплотный линейный (одномерный) штриховой код, предназначенный для кодирования буквенно-цифровых символов, управляющих символов и всех 128 символов стандарта ASCII. Разработан в 1981 году компанией Computer Identics (США) как альтернатива менее ёмким кодам Code 39 и Codabar. Отличается высокой плотностью записи данных на единицу длины и широким набором кодируемых символов, что сделало его одним из самых распространённых стандартов в логистике, торговле и промышленности.
История и разработка
Потребность в более ёмком и гибком штриховом коде возникла в конце 1970-х годов, когда существующие стандарты (Code 39, Codabar) не могли эффективно кодировать большие объёмы информации, включая строчные буквы и управляющие символы. В 1981 году компания Computer Identics, один из пионеров автоматической идентификации, представила Code 128. Разработка основывалась на принципе модульной ширины штрихов и пробелов, что позволяло добиться высокой плотности кодирования. В 1983 году стандарт был принят Американским национальным институтом стандартов (ANSI) как ANSI/AIM BC4-1983, а позже — Международной организацией по стандартизации (ISO) как ISO/IEC 15417:2007.
Структура и принцип кодирования
Code 128 представляет собой код переменной длины, состоящий из последовательности штрихов и пробелов различной ширины. Каждый символ кодируется 11 модулями, которые объединены в 3 штриха и 3 пробела. Ширина каждого элемента кратна одному модулю (самой узкой единице). Код является непрерывным, то есть между символами нет межзнаковых промежутков.
Наборы символов (подмножества)
Code 128 использует три подмножества (режима) — A, B и C, которые переключаются с помощью специальных управляющих символов:
- Code 128A: кодирует цифры (0–9), прописные буквы (A–Z), знаки препинания, управляющие символы (ASCII 00–95) и специальные символы (например, FNC1, FNC2, FNC3, FNC4).
- Code 128B: кодирует цифры (0–9), прописные и строчные буквы (A–Z, a–z), знаки препинания и все печатаемые символы ASCII (32–127).
- Code 128C: кодирует только цифры (0–9) в сжатом виде — каждые две цифры (00–99) представляются одним символом. Это обеспечивает максимальную плотность записи (вдвое больше цифр на единицу длины по сравнению с режимами A и B).
Переключение между режимами осуществляется с помощью управляющих символов CODE A, CODE B, CODE C, а также SHIFT (для временного переключения на один символ). Это позволяет гибко комбинировать разные типы данных в одном коде.
Структура символа
Каждый символ Code 128 состоит из:
- Стартового символа: указывает на начало кода и выбранный режим (A, B или C).
- Блока данных: последовательность символов, кодирующих информацию.
- Контрольной суммы: вычисляется по модулю 103 на основе весовых коэффициентов всех символов (включая стартовый).
- Стопового символа: обозначает конец кода (состоит из 13 модулей — 4 штриха и 3 пробела).
Контрольная сумма
Контрольная сумма (checksum) рассчитывается как остаток от деления на 103 взвешенной суммы значений всех символов (стартового и данных). Вес первого символа (стартового) принимается за 1, вес второго — за 2, третьего — за 3 и так далее. Формула:
\[ \text{Checksum} = \left( \sum_{i=1}^{n} (V_i \times i) \right) \bmod 103 \]
где \( V_i \) — значение i-го символа (от 0 до 102), \( n \) — общее количество символов (включая стартовый). Результат кодируется одним символом из набора Code 128.
Кодирование и декодирование
Ширина штрихов и пробелов
Каждый символ кодируется 11 модулями, которые распределены на 3 штриха и 3 пробела. Ширина каждого элемента может быть от 1 до 4 модулей. Сумма ширины всех элементов в символе всегда равна 11 модулям. Например, символ «0» в режиме B кодируется последовательностью ширины: штрих 2, пробел 1, штрих 2, пробел 2, штрих 2, пробел 2 (итого 11).
Декодирование
Сканер считывает последовательность чередующихся чёрных (штрихи) и белых (пробелы) полос, измеряя их ширину. По соотношению ширины элементов определяется значение каждого символа. Стартовый символ указывает на начальный режим, и декодер последовательно обрабатывает символы, переключая режимы при обнаружении управляющих символов. Контрольная сумма проверяется для подтверждения целостности данных.
Применение
Code 128 широко используется в различных отраслях благодаря высокой плотности и гибкости кодирования:
Логистика и транспорт
- Этикетки для отправлений: кодирование адресов, идентификаторов посылок, номеров заказов. Например, стандарт GS1-128 (ранее UCC/EAN-128) использует Code 128 для кодирования глобальных идентификаторов (GTIN), серийных номеров, дат и веса.
- Управление складом: маркировка паллет, ячеек хранения, товарных позиций.
Торговля и розница
- Маркировка товаров: для товаров, не подпадающих под стандарт EAN-13 (например, книги, мелкие детали). Code 128 часто используется для внутренней логистики магазинов.
- Этикетки для цен: кодирование артикулов и цен.
Производство и промышленность
- Маркировка деталей и узлов: отслеживание производственных партий, серийных номеров.
- Управление запасами: кодирование спецификаций и номенклатур.
Здравоохранение
- Маркировка лекарств и медицинских изделий: кодирование идентификаторов, дат истечения срока годности, номеров партий. В России Code 128 используется в системе маркировки лекарственных препаратов (ФГИС МДЛП).
Документооборот
- Штрихкоды на документах: для быстрого сканирования и ввода данных в информационные системы (например, в архивах или банках).
Преимущества и недостатки
Преимущества
- Высокая плотность: Code 128 позволяет кодировать больше данных на меньшей площади по сравнению с Code 39 или Codabar. В режиме C плотность достигает 2 цифр на символ.
- Полный набор ASCII: возможность кодировать все 128 символов ASCII, включая строчные буквы и управляющие символы.
- Гибкость: переключение между режимами A, B и C позволяет оптимизировать длину кода в зависимости от типа данных.
- Надёжность: контрольная сумма и самопроверяющаяся структура (каждый символ имеет уникальную комбинацию ширины) снижают риск ошибок считывания.
- Стандартизация: международный стандарт ISO/IEC 15417 обеспечивает совместимость оборудования.
Недостатки
- Нечитаемость при повреждении: как и все линейные коды, Code 128 требует чёткого контраста и целостности штрихов. Сильные повреждения (разрывы, замятия) делают код нечитаемым.
- Ограниченная длина: хотя теоретически длина не ограничена, на практике слишком длинные коды (более 50–60 символов) становятся громоздкими и менее удобными для сканирования.
- Необходимость в точной печати: для надёжного считывания требуется качественная печать с чёткими границами штрихов.
Интересные факты
- Code 128 является основой для стандарта GS1-128 (ранее UCC/EAN-128), который широко применяется в международной логистике и розничной торговле для кодирования глобальных идентификаторов (GTIN) и дополнительных атрибутов (даты, вес, серийные номера).
- В режиме C Code 128 может кодировать цифровые последовательности с плотностью до 2 цифр на символ, что делает его одним из самых эффективных одномерных кодов для числовых данных.
- Существует расширение Code 128 — Code 128B (также известный как Code 128 Auto), которое автоматически выбирает оптимальный режим для заданной строки данных, минимизируя длину кода.
- Code 128 используется в системе маркировки товаров «Честный ЗНАК» в России для кодирования идентификаторов продукции (например, для обуви, лекарств, табачной продукции).
Критика и ограничения
Основная критика Code 128 связана с его относительной сложностью по сравнению с более простыми кодами (например, Code 39). Для корректного декодирования требуется более мощное программное обеспечение и оборудование. Кроме того, в условиях низкого качества печати или сильного фонового шума Code 128 может быть менее надёжным, чем двухмерные коды (например, QR-код или Data Matrix). Однако в большинстве промышленных и логистических приложений его преимущества (высокая плотность и гибкость) перевешивают эти недостатки.
Источники
- ISO/IEC 15417:2007 — Information technology — Automatic identification and data capture techniques — Code 128 bar code symbology specification.
- ANSI/AIM BC4-1983 — American National Standard for Bar Code Symbology — Code 128.
- GS1 General Specifications — стандарт GS1-128 (UCC/EAN-128).
- «Штриховое кодирование: теория и практика» — учебное пособие, 2018.
- Федеральный закон РФ № 381-ФЗ «Об основах государственного регулирования торговой деятельности в Российской Федерации» (в части маркировки товаров).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →