Автор часто сталкивался с вопросом: «В чём разница между Code 128, Code 128A и Code 128B?». Чтобы ответить, пришлось погрузиться в историю. Code 128 был разработан как замена Code 39 для случаев, где важна высокая плотность. Он может автоматически переключаться между тремя наборами символов (A, B, C) в одном коде, но иногда принудительно выбирают только один.
Code 128-A — это подмножество, которое включает все печатные символы из набора A: заглавные A–Z, цифры 0–9, знаки препинания и 32 управляющих кода ASCII (например, SOH, STX, ETX). Он незаменим при работе со старыми системами, где нужны управляющие символы в штрихкоде.
Особенности Code 128-A
Code 128 — непрерывный, многодлинновый штрихкод (4 разной ширины). Каждый символ кодируется 11 модулями. Набор A включает:
- Значение 00–31: управляющие символы (NUL, SOH, STX, ...).
- 32–63: пробел, знаки препинания, цифры 0–9, несколько спецсимволов.
- 64–95: заглавные буквы A–Z, некоторые знаки.
- 96–102: специальные символы для смены набора и FNC.
Главное преимущество Code 128-A перед B и C — это поддержка управляющих кодов ASCII, которые используются в протоколах передачи данных (RS-232, ввод с клавиатуры). Также он имеет высокую плотность: кодирует до 9,4 цифр на дюйм.
Как генерировать Code 128-A
Генерация Code 128-A требует расчёта контрольной суммы (mod 103). Вот алгоритм:
- Входная строка должна содержать только символы, допустимые в наборе A. Это заглавные буквы, цифры, некоторые знаки, а также управляющие коды (которые вводятся, например, как \001 для SOH).
- Автоматическое добавление стартового символа: для набора A стартовый код — 103 (в десятичном исчислении).
- Расчёт контрольной суммы: сумма стартового значения плюс произведения каждого символа на его позицию (начиная с 1) по модулю 103.
- Добавление стопового символа (106) и завершающей полосы.
- Вывод кода.
Хороший генератор также умеет автоматически переключаться между наборами A, B, C для оптимизации длины кода, но если вы принудительно выбираете Code 128-A, он должен строго следовать этому набору.
Где применяется Code 128-A
Этот поднабор не так популярен, как Code 128-B (базовый) и Code 128-C (чисто цифровой). Тем не менее, его можно встретить:
- В промышленной автоматизации — для передачи управляющих кодов через штрихкод (например, запуск станка).
- В системах связи с мейнфреймами, которые ожидают конкретные ASCII-команды.
- В логистических системах, где данные передаются по последовательному интерфейсу с использованием управляющих символов.
- В оборонных и космических приложениях.
Ошибки при генерации
Практика показывает, что основные проблемы с Code 128-A связаны с:
- Попыткой закодировать строчные буквы — в наборе A их нет. Если они появятся, генератор или выдаст ошибку, или переключится на другой набор (что может быть нежелательно).
- Неправильным расчётом контрольной суммы — это частая проблема универсальных генераторов.
- Использованием управляющих символов без правильного экранирования (например, просто вставка символа с кодом 1 в текстовом поле).
Заключение
Коротко по делу:
- Code 128-A — это поднабор Code 128 для заглавных букв, цифр и управляющих кодов ASCII.
- Обеспечивает очень высокую плотность (самую высокую среди линейных кодов).
- Генерация требует расчёта контрольной суммы по модулю 103 и правильного стартового символа.
- Используется в основном в промышленности и телекоммуникациях, где нужны управляющие символы.
Вопрос читателям: приходилось ли вам использовать Code 128-A, а не более простой Code 128-B? Для каких задач понадобились именно управляющие символы? Делитесь — это интересная и редкая тема.