Открыть сервис

C40 кодирование

C40 — это один из режимов кодирования данных в спецификации штриховых кодов формата Data Matrix, предназначенный для компактного представления цифро-буквенной информации. Он относится к классу алгоритмов сжатия символов и используется для оптимизации плотности записи данных в двумерных матричных кодах. Основное назначение C40 — уменьшение физического размера символа за счёт кодирования двух символов в три байта, что особенно эффективно при работе с текстовыми строками, содержащими заглавные латинские буквы, цифры и ограниченный набор специальных знаков. Режим определён в стандартах ISO/IEC 16022 и ISO/IEC 24767 и применяется в промышленности, логистике и идентификации продукции.

История и контекст появления

Режим C40 был разработан в 1990-х годах компанией International Data Matrix Inc. (ныне — часть группы компаний Zebra Technologies) при создании формата Data Matrix, который стал одним из наиболее популярных двумерных кодов в машиностроении, фармацевтике и электронике. Data Matrix был предложен как альтернатива традиционным одномерным штрих-кодам, неспособным вмещать большой объём данных на ограниченной площади. В первоначальной спецификации, опубликованной в 1989 году, Data Matrix поддерживал лишь базовые режимы кодирования, включая числовой (numeric) и алфавитно-цифровой (ASCII). Однако уже в версии стандарта ISO/IEC 16022:2000 были введены дополнительные режимы, в том числе C40, Text и X12, предназначенные для повышения эффективности кодирования текстовой информации.

В отличие от простого набора символов ASCII, где каждый символ занимает один байт (8 бит), C40 использует преобразование набора символов в компактные коды по 6 бит на символ, что позволяет упаковывать 2 символа в 3 байта (16 бит). Этот подход был заимствован из старых алгоритмов сжатия данных для телетайпной связи, где требовалось передавать ограниченный алфавит с минимальным числом бит. Внедрение C40 позволило сократить размер кода Data Matrix примерно на 20–30 % для текстовых строк, содержащих в основном заглавные буквы, цифры и знаки препинания.

Принцип работы

Алфавит C40

Режим C40 оперирует фиксированным набором из 40 символов, которые отображаются в целые числа от 0 до 39. В набор входят:

Любой символ, отсутствующий в этом наборе, кодируется через механизм «экранирования» — последовательности из двух кодов C40, которые соответствуют байтовому представлению символа в кодировке Latin-1 (ISO/IEC 8859-1). Экранный код состоит из трёх частей: стартового кода 0 (или 1 для дополнительного сдвига), затем кодов 38 и 39, за которыми следует байтовое значение. Этот подход несколько снижает эффективность сжатия для редких символов, но сохраняет полную совместимость с Unicode-представлением через последующее кодирование в серию байтов.

Процесс кодирования

Алгоритм кодирования C40 выполняет следующие шаги:

  1. Считывание пары символов. Каждая пара последовательных символов входной строки обрабатывается совместно. Если длина строки нечётна, последний символ дополняется искусственным пробелом (код 32) или нулевым значением в зависимости от конфигурации.
  2. Преобразование в коды C40. Каждый символ заменяется соответствующим числом от 0 до 39 согласно таблице алфавита.
  3. Вычисление 16-битного значения. Для двух символов с кодами C1 и C2 (в порядке следования) вычисляется значение:

V = 1600 C1 + 40 C2 + 1. Это даёт число в диапазоне от 1 до 1600×39 + 40×39 + 1 = 64 801. На практике значение укладывается в 16 бит (0–65 535), что соответствует трём байтам.

  1. Преобразование в байты. Полученное 16-битное значение разбивается на три байта по схеме:

На практике для C40 третий байт почти всегда равен нулю, так как диапазон V недостаточен для занятия трёх байт. Фактически кодирование сводится к двум байтам, но для единообразия используется 3-байтовая структура.

  1. Переключение режима. Если встречается символ, отсутствующий в алфавите C40, декодер переходит в режим Base256 (Raw) для кодирования байтов или использует специальные команды сдвига для строчных букв.

Пример кодирования

Пусть требуется закодировать строку «AB».

Если строка «Z» (нечётная), то к ней добавляется пробел (код 32) как заполнитель. Пара 'Z' (код 25) и пробел (код 32) даёт V = 1600×25 + 40×32 + 1 = 41 281, что кодируется как три байта. Лишний байт (старший) будет игнорироваться при декодировании, поскольку длина нечётна.

Виды и модификации

В спецификации Data Matrix различают несколько режимов C40, которые различаются набором допустимых символов и механизмом переключения:

Кроме того, C40 является базой для режима Text, который кодирует строчные латинские буквы и использует тот же алгоритм упаковки двух символов в три байта, но с другим перекодировочным алфавитом. Text-режим применяется, когда текст содержит преимущественно строчные буквы.

Применение

C40-кодирование используется в следующих областях:

  1. Маркировка продукции в фармацевтике и медицине. Data Matrix с C40-кодированием применяется для нанесения на ампулы, блистеры и упаковки лекарственных средств. Экономия места в коде позволяет размещать больше информации о партии, сроке годности и серийном номере на малых площадях (до 2×2 см).
  2. Электроника и сборка. В производстве печатных плат Data Matrix с C40 используется для маркировки компонентов (чипов, конденсаторов) в автоматизированных линиях. Высокая плотность записи позволяет наносить код на корпуса размером 1×1 мм.
  3. Логистика и складской учёт. Штриховые коды формата Data Matrix с C40 применяются для идентификации упаковок, ящиков и палет. Часто кодируются номера заказов, артикулы и даты.
  4. Документооборот и бланки. В некоторых системах электронного документооборота Data Matrix с C40 используется для сжатия текстовых реквизитов (например, ИНН, ОКПО) при печати на накладных и счетах-фактурах.

Преимущества и ограничения

Преимущества

Недостатки

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →