Генератор Code 39 Full ASCII

Обычный Code 39 кодирует цифры, заглавные буквы и несколько знаков. Code 39 Full ASCII добавляет поддержку строчных букв, всех символов ASCII и даже управляющих кодов за счёт специальных двухсимвольных последовательностей.

Автор помнит случай, когда нужно было закодировать адрес электронной почты в штрихкоде на бейдже сотрудника. Адрес содержал строчные буквы, символ «@» и точку. Обычный 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? Поделитесь историями.