Автор помнит случай, когда нужно было закодировать адрес электронной почты в штрихкоде на бейдже сотрудника. Адрес содержал строчные буквы, символ «@» и точку. Обычный Code 39 с этим бы не справился. Пришлось использовать расширение — Full ASCII.
Code 39 Full ASCII — это не отдельная символика, а надстройка над стандартным Code 39. Она использует комбинации из двух обычных символов Code 39 для представления «нестандартных» символов. Рассказываем, как это работает и когда нужно.
Принцип расширения Full ASCII
В базовом Code 39 доступны: 0–9, A–Z, пробел и 7 знаков (- . $ / + %). Итого 43 символа. Чтобы закодировать остальные 128 символов ASCII (включая a–z, @, [, ], {, }, | и т.д.), разработчики придумали схему «экранирования»:
- Каждый символ из расширенного набора представляется двумя символами базового Code 39.
- Первый символ — обычно «%», «$», «+», «/» или их комбинации (так называемые «shift-символы»).
- Второй символ — буква из диапазона A–Z, которая указывает, какой именно символ кодируется.
Например, строчная «a» кодируется как «+A», символ «@» — как «%V», а «[» — как «$K». Полная таблица преобразования задана в стандарте.
Как генерировать Full ASCII
Генератор Code 39 Full ASCII должен уметь прозрачно выполнять преобразование:
- Принять любую ASCII-строку (от 0 до 127 включительно, а можно и расширенную латиницу до 255, но с осторожностью).
- Разбить её на символы и заменить каждый «не базовый» символ на соответствующую двухсимвольную последовательность. Например, строка «Hello@world» превратится в "HELLO%VWORLD".
- Затем сгенерировать обычный Code 39 для получившейся строки, добавив стартовую/стоповую звёздочку (*).
- В удобочитаемой части (под кодом) выводить исходную строку, а не преобразованную. Иначе пользователь увидит непонятные комбинации.
Важно: преобразование увеличивает длину кода примерно вдвое для каждого «нестандартного» символа. Учитывайте это при планировании размера этикетки.
Где применяется Full ASCII
Несмотря на громоздкость, у этого расширения есть свои ниши:
- Маркировка лабораторных образцов с длинными буквенно-цифровыми кодами, включая строчные буквы.
- Системы учёта документов, где в штрихкод нужно поместить email или логин.
- Обмен данными со старыми мейнфреймами, где используется ASCII-кодировка.
- Военные и оборонные заказы (иногда требуется полный ASCII).
Проблемы и предостережения
На основе реальных кейсов:
- Огромный размер кода. Каждый строчный символ или спецзнак удлиняет код вдвое. Для длинных строк это может быть критично.
- Не все сканеры поддерживают Full ASCII. Многие старые ТСД распознают только базовый Code 39 и будут выдавать мусор вместо преобразованных последовательностей.
- Ошибки в таблице преобразования. Разные производители иногда использовали нестандартные таблицы. Генератор должен следовать официальной спецификации (ANSI/AIM BC4-1999).
Заключение
Коротко по делу:
- Code 39 Full ASCII расширяет базовый Code 39 на весь набор ASCII через двухсимвольные комбинации.
- Генератор должен автоматически выполнять преобразование и показывать исходный текст в удобочитаемой части.
- Используйте его только если ваши сканеры поддерживают Full ASCII, иначе лучше взять Code 128.
Вопрос: а вы знали, что Code 39 может кодировать строчные буквы? Как часто вам требовался Full ASCII? Поделитесь историями.