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

C40-режим кодирования

C40-режим кодирования — это один из методов кодирования данных, используемый в двумерных штриховых кодах (в частности, в стандарте Data Matrix и Aztec Code) для компактного представления алфавитно-цифровой информации. В отличие от базовых режимов (ASCII, цифрового), C40 позволяет эффективно кодировать символы латинского алфавита, цифры и ряд специальных знаков, используя для этого комбинации из шести бит на символ вместо восьми, что обеспечивает экономию пространства в кодовом слове.

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

C40-режим был разработан в рамках стандарта ANSI/AIM BC11-1997 (позже вошедшего в ISO/IEC 16022:2000 для Data Matrix) как решение проблемы неэффективного кодирования текстовой информации. В ранних версиях двумерных кодов (например, PDF417) использовалось прямое 8-битное представление символов, что приводило к избыточности при работе с английским текстом. C40 стал частью семейства так называемых «текстовых режимов» (Text Compaction Modes), куда также входят режимы X12, EDIFACT и Base 256. Его название происходит от кодовой таблицы, содержащей 40 символов (C — «Character», 40 — количество базовых кодовых точек).

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

C40-режим работает на основе кодирования последовательностей символов в 6-битные значения. В отличие от ASCII-режима, где каждый символ занимает 8 бит (один байт), в C40 три символа упаковываются в два байта (16 бит), что даёт среднюю плотность 5,33 бита на символ. Это достигается за счёт использования специальной таблицы кодирования, где каждому символу ставится в соответствие число от 0 до 39.

Таблица кодирования C40

ЗначениеСимволПримечание
0–90–9Цифры
10–35A–ZПрописные латинские буквы
36Пробел
37Сдвиг 1Переход в подрежим специальных символов
38Сдвиг 2Переход в подрежим строчных букв
39Сдвиг 3Переход в подрежим управляющих символов

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

  1. Выбор режима: Декодер определяет, что текущая последовательность символов может быть закодирована в C40. Обычно это происходит, если строка состоит преимущественно из заглавных букв, цифр и пробелов.
  2. Преобразование символов: Каждый символ заменяется его числовым значением из таблицы C40 (0–39).
  3. Упаковка в кодовые слова: Три последовательных значения (v1, v2, v3) объединяются в одно 16-битное кодовое слово по формуле:

кодовое_слово = (v1 1600) + (v2 40) + v3 где 1600 = 40². Полученное число занимает два байта.

  1. Обработка неполных групп: Если количество символов не кратно трём, остаток кодируется специальным образом. Для одного символа используется 11-битное кодовое слово, для двух — 16-битное, но с меньшей плотностью.

Подрежимы (сдвиги)

Для кодирования символов, отсутствующих в основной таблице (строчные буквы, знаки препинания, управляющие коды), используются три подрежима, активируемые значениями 37–39:

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

Применение в стандартах

Data Matrix

В стандарте Data Matrix (ISO/IEC 16022:2006) C40-режим используется как один из трёх основных текстовых режимов сжатия (наряду с Text и X12). Он применяется для кодирования данных в так называемых «квадратных» и «прямоугольных» символах. Вход в режим осуществляется с помощью управляющего кодового слова 230 (0xE6), а выход — с помощью 231 (0xE7) или автоматически при завершении последовательности.

Aztec Code

В стандарте Aztec Code (ISO/IEC 24778:2008) C40-режим является одним из вариантов компактного кодирования текста. Он используется в комбинации с другими режимами (Binary, Byte, Digit) и активируется через заголовочные кодовые слова в сообщении. В Aztec Code C40 часто применяется для кодирования адресов URL, имён и коротких сообщений.

Другие системы

Некоторые проприетарные системы штрихового кодирования (например, MaxiCode, QR Code) используют аналогичные схемы сжатия, но с другими таблицами. В QR Code (ISO/IEC 18004:2015) существует режим «Alphanumeric», который кодирует 45 символов (цифры, заглавные буквы, пробел и 9 специальных знаков) с плотностью 5,5 бит на символ — принципиально близкий к C40, но с меньшим набором символов.

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

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

Ограничения

Сравнение с другими режимами

РежимБит на символНабор символовПрименение
ASCII8Все ASCII (0–127)Универсальный
C405,3340 основных + подрежимыАнглийский текст, URL
X125,3340 символов (EDIFACT)Электронный обмен данными
Base 2568Любые байтыБинарные данные

C40-режим занимает промежуточное положение: он эффективнее ASCII для типичного английского текста, но менее универсален, чем Base 256 для произвольных данных.

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

Источники

  1. ISO/IEC 16022:2006 — Information technology — Automatic identification and data capture techniques — Data Matrix bar code symbology specification.
  2. ISO/IEC 24778:2008 — Information technology — Automatic identification and data capture techniques — Aztec Code bar code symbology specification.
  3. ANSI/AIM BC11-1997 — Uniform Symbology Specification — Data Matrix.
  4. Документация библиотеки libdmtx (версия 0.7.7) — описание режимов кодирования.
  5. Статья «Data Matrix Encoding and Decoding» в журнале «Journal of Electronic Imaging» (2012), том 21, выпуск 3.

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

На главную BFOmetr →