stringtranslate.com

Код 128

Швейцарский почтовый штрих-код, кодирующий «RI 476 394 652 CH» в коде 128 (B и C).

Код 128 — это линейная символика штрих-кода высокой плотности , определенная в стандарте ISO/IEC 15417:2007. [1] Используется для буквенно-цифровых или только цифровых штрих-кодов . Он может кодировать все 128 символов ASCII и, с использованием символа расширения (FNC4), символы Latin-1, определенные в ISO/IEC 8859-1 . [ нужна цитация ] Обычно это приводит к более компактным штрих-кодам по сравнению с другими методами, такими как Code 39 , особенно когда тексты содержат в основном цифры. Код 128 был разработан корпорацией Computer Identics в 1981 году. [2]

Штрих-код GS1-128, кодирующий GTIN, дату годности и номер партии.

GS1-128 (ранее известный как UCC/EAN-128) является подмножеством кода 128 и широко используется во всем мире в судоходной и упаковочной отраслях в качестве идентификационного кода продукта для уровней контейнеров и поддонов в цепочке поставок.

Спецификация

«Код 459
Схема штрих-кода (Код 128Б).
1 : тихая зона, 2 : стартовый код B, 3 : данные, 4 : контрольная сумма, 5 : стоп

Штрих-код Code 128 состоит из семи разделов:

  1. Тихая зона
  2. Символ запуска
  3. Закодированные данные
  4. Символ проверки (обязательно)
  5. Символ остановки
  6. Последний бар (часто считается частью символа остановки)
  7. Тихая зона

Проверочный символ рассчитывается на основе взвешенной суммы ( по модулю 103) всех символов.

Подтипы

Код 128 включает 108 символов: 103 символа данных, 3 начальных символа и 2 стоповых символа. Каждый символ состоит из трех черных полос и трех белых пространств различной ширины. Все ширины кратны базовому «модулю». Каждая полоса и пространство имеют ширину от 1 до 4 модулей, а символы имеют фиксированную ширину: сумма ширин трех черных полос и трех белых полос составляет 11 модулей.

Стоп-паттерн состоит из двух перекрывающихся символов и имеет четыре бара. Шаблон остановки обеспечивает двунаправленное сканирование. Когда шаблон остановки читается слева направо (обычный случай), распознается символ остановки (за которым следует полоса из 2 модулей). Когда шаблон остановки читается справа налево, распознается символ обратной остановки (за которым следует полоса из 2 модулей). Сканер, увидев символ остановки в обратном направлении, понимает, что ему необходимо пропустить полосу из 2 модулей и прочитать остальную часть штрих-кода в обратном порядке.

Несмотря на свое название, код 128 не имеет 128 различных символов, поэтому он не может напрямую представлять 128 кодовых точек. Чтобы представить все 128 значений ASCII, он переключается между тремя наборами кодов (A, B, C). Вместе наборы кодов A и B охватывают все 128 символов ASCII. Кодовый набор C используется для эффективного кодирования строк цифр. Начальное подмножество выбирается с помощью соответствующего начального символа. В каждом кодовом наборе некоторые из 103 кодовых точек данных зарезервированы для перехода к одному из двух других кодовых наборов. Сдвиги выполняются с использованием кодовых точек 98 и 99 в кодовых наборах A и B, 100 в кодовых наборах A и C и 101 в кодовых наборах B и C для переключения между ними):

Минимальная ширина тихой зоны слева и справа от кода 128 равна 10x, где x — минимальная ширина модуля. Это обязательное поле слева и справа от штрих-кода.

Старт/стоп и ширина полосы

Каждый символ штрих-кода состоит из трех полос и трех пробелов. Каждая полоса или пробел имеет ширину 1, 2, 3 или 4 единицы, сумма ширин полос должна быть четной (4, 6 или 8 единиц), сумма ширин пробелов должна быть нечетной (3, 5 или 8 единиц). 7 единиц), а всего 11 единиц на символ. Например, кодировку ASCII-символа «0» можно рассматривать как 10011101100, где последовательность единиц — это полоса, а последовательность нулей — пробел. Одна цифра 1 будет самой тонкой линией штрих-кода. Три единицы подряд (111) обозначают полосу, в три раза толще одной полосы 1.

Существует 108 возможных символов шириной 11 единиц, и в коде используются все возможные символы. Два символа используются для индикации остановки (конца штрих-кода), остановки и остановки в обратном направлении. Два стоп-символа являются особенными, поскольку за ними всегда следует полоса из 2 единиц, образующая модель длинного стопа из 13 единиц. Чтение стоп-образца слева направо является символом остановки (за которым следует полоса из 2 единиц), а чтение стоп-образца справа налево является символом обратного стопа (за которым следует полоса из 2 единиц).

Проверка расчета цифр

Контрольная цифра представляет собой взвешенную контрольную сумму по модулю 103. Он рассчитывается путем суммирования «значения» начального кода и произведений «значений» каждого символа, умноженных на вес его позиции в строке штрих-кода. Начальный символ и первый закодированный символ находятся в позиции 1. Затем сумма произведений уменьшается по модулю 103. Остаток затем преобразуется обратно в один из 103 символов без разделителя (следуя инструкциям, приведенным ниже) и добавляется к штрих-коду. , непосредственно перед символом остановки.

Например, в следующей таблице для варианта A кода 128 вычисляется значение контрольной суммы для буквенно-цифровой строки PJJ123C:

Таким образом, добавляется значение 54, равное V, а затем код остановки.

В целях вычисления контрольного символа символы сдвига и переключения кода обрабатываются так же, как и любой другой символ в штрих-коде.

Использование FNC4 для кодирования высоких (160–255) символов.

Специальный символ FNC4 («Функция 4»), присутствующий только в наборах кодов A и B, может использоваться для кодирования всех символов Latin-1 ( ISO-8859-1 ) в штрих-коде Code 128. [3]

Когда в строке присутствует одиночный «FNC4», следующий символ читается как ASCII, но значение увеличивается на +128, таким образом переходя к более высокому диапазону таблицы ISO-8859-1. Если следующий символ — «SHIFT», то для получения символа будет использоваться второй символ.

Если используются два последовательных символа «FNC4», все последующие символы данных являются расширенными символами ASCII до тех пор, пока не встретятся еще два последовательных символа «FNC4» или не будет достигнут конец символа. Если во время этой последовательности расширенного кодирования встречается один символ «FNC4», он используется для возврата к стандартной кодировке ASCII только для следующего символа данных. Символы SHIFT и подмножества символов будут иметь обычный эффект во время такой последовательности. [4]

Из кода 128A вы можете получить специальные символы Latin-1 от 160 (шестнадцатеричный A0, неразрывный пробел) до 223 (шестнадцатеричный DF, ß) через FNC4. Символы нижнего регистра от 224 (шестнадцатеричный E0, à) до 254 (шестнадцатеричный FE, þ) доступны с помощью FNC4+SHIFT B. Символы ÷ (247, шестнадцатеричный F7) и ÿ (255, шестнадцатеричный FF) недоступны.

Эта функция недоступна для GS1-128. [5] [6] Поскольку поддержка кода 128 типа B (и C) не очень распространена, возможно, вместо этого будет проще использовать QR-код для символов из диапазона кодов ISO-8859-1.

Ширина штрих-кода

Code128 определяет комбинацию из 6 чередующихся полос и пробелов (по 3 каждого) для каждого символа. Таким образом, каждый символ начинается с черты и заканчивается пробелом. В шрифтах штрих-кода последняя полоса обычно сочетается с символом остановки, чтобы создать более широкий узор остановки. В следующей таблице подробно описаны ширины, связанные с каждой полосой и пространством для каждого символа. Ширина каждой полосы или пробела может составлять 1, 2, 3 или 4 единицы (модуля). В приведенном выше примере буква «А» будет изображаться с узором 10100011000 или шириной 111323 в таблицах ниже.

Значение ширины получается путем подсчета длины каждой серии из 1, а затем 0 в шаблоне, начиная слева. Всегда будет 6 прогонов, и длина этих 6 прогонов формирует значение ширины. Например, при использовании шаблона 10100011000 длина серии равна 1 (цифра 1), 1 (цифра 0), 1 (цифра 1), 3 (цифра 0), 2 (цифра 1), 3 (цифра 0). Отчет только о длине каждого прогона дает 1, 1, 1, 3, 2, 3, тем самым создавая значение ширины 111323.

Символы «Код A», «Код B» и «Код C» приводят к тому, что все последующие символы интерпретируются в соответствии с соответствующим субкодом (т. е. 128A, 128B или 128C). Символ «Shift» переключает интерпретацию одного следующего символа между субкодами A и B.

Закодированный символ ASCII зависит от фактического используемого шрифта штрих-кода. В частности, символы ASCII со значением 0 и значением 95 и выше могут определяться по-разному в установленном шрифте.

Коды FNC x используются для специальных целей. FNC1 в начале штрих-кода указывает на штрих-код GS1-128, который начинается с 2-, 3- или 4-значного идентификатора приложения , присвоенного Советом по унифицированным кодам , который объясняет следующие цифры. Например, идентификатор приложения 421 указывает, что за ним следует цифровой код страны ISO 3166-1 и почтовый индекс места доставки. Таким образом, почтовый индекс Белого дома в США обычно печатается как «(421) 840 20500», но на самом деле он будет закодирован как « [Start C] [FNC1] 42 18 40 20 50 [Code A] 16 [Check symbol 92] [Stop]»

FNC2 (добавление сообщения) может появиться в любом месте штрих-кода, указывая, что считыватель штрих-кода должен сохранить текущую строку и добавить ее к строке следующего считываемого штрих-кода. Он не используется GS1-128.

FNC3 (инициализация) может появляться в любом месте штрих-кода, чтобы дать указание считывателю штрих-кода инициализировать или перепрограммировать себя в соответствии с инструкциями строки штрих-кода.

FNC4 используется для представления расширенного набора символов ASCII (см. § Примечания). Он не используется GS1-128. [7]

Доступность

Для конечного пользователя штрих-коды Code 128 могут создаваться либо внешним приложением для создания изображения штрих-кода, либо с помощью решения для создания штрих-кода на основе шрифтов. Любое решение требует использования приложения или надстройки приложения для вычисления контрольной цифры и создания штрих-кода.

Оптимизация длины штрих-кода с помощью Code 128 Type-C

Кодовый набор C использует один кодовый символ для обозначения двух цифр. Таким образом, он может создавать более короткие штрих-коды, если содержимое состоит только из цифр или если в коде есть более длинные последовательности цифр.

Однако, когда строка содержит всего несколько цифр или смешана с нецифровыми символами, она не всегда создает более компактный код, чем наборы кодов A или B. Использование набора кодов C экономит один символ на две цифры, но требует режима -символ сдвига для входа и выхода из набора. Таким образом, его стоит использовать только при наличии достаточного количества последовательных цифр. Например, для кодирования строки «X00Y» с помощью кодового набора A или B требуется 7 кодовых символов ( [Start B] 56 16 16 57 [checksum] [Stop]), тогда как использование кодового набора C для «X00Y» приведет к получению кода длиной 8 символов ( [Start B] 56 [Code C] 00 [Code B] 57 [checksum] [Stop]).

Использование набора кодов C выгодно только при следующих условиях:

В конце строки задержка перехода к кодовому набору C до тех пор, пока не останется четное количество цифр, позволяет избежать появления дополнительного символа. Рассмотрим строку «...01234»: отложенное переключение выдает, ... 0 [Code C] 12 34 [checksum] [Stop]а раннее переключение выдает ... [Code C] 01 23 [Code A] 4 [checksum] [Stop]. [8]

Например, для строки «098x1234567y23» экономия на длине штрих-кода при использовании набора кодов C достигается только в том случае, если он применяется к средней части строки. Для начальной и конечной части строки переключение на кодовый набор C не действует. Поскольку в середине строки нечетное количество цифр, нечетная цифра должна использовать другой кодовый набор, но не имеет значения, первая она или последняя; В любом случае требуется 16 символов: [Start B] 0 9 8 x 1 [Code C] 23 45 67 [Code B] y 2 3 [checksum] [Stop], или [Start B] 0 9 8 x [Code C] 12 34 56 [Code B] 7 y 2 3 [checksum] [Stop].

Оптимизация длины результирующего штрих-кода важна, когда используются считыватели штрих-кода , которые должны сразу обнаружить все изображение штрих-кода, чтобы его прочитать, например, обычные лазерные сканеры . Чем длиннее штрих-код, тем большее расстояние требуется для лазерного считывателя штрих-кода от изображения штрих-кода, что затрудняет или делает невозможным считывание при превышении некоторых пороговых длин/расстояний.

Оптимальную кодировку можно найти с помощью алгоритма динамического программирования . [9]

Рекомендации

  1. ^ «ISO/IEC 15417:2007. Информационные технологии. Методы автоматической идентификации и сбора данных. Спецификация символики штрих-кода Code 128» . www.iso.org . Проверено 15 февраля 2018 г.
  2. ^ «КОД 128 и ГС1-128». Информация и советы по штрих-коду . Кейнс . Проверено 6 ноября 2023 г.
  3. ^ Очевидно, ISO 15417, Приложение F.
  4. ^ "TBarcode1D_Code128". Корпорация Хан-софт . Проверено 21 января 2017 г. Если используется один символ «FNC 4», это означает, что следующий символ данных в символе является расширенным символом ASCII. Символ «SHIFT» может следовать за символом «FNC 4», если необходимо изменить подмножество символов для следующего символа данных. Последующие символы данных возвращаются к стандартному набору символов ASCII. Если используются два последовательных символа «FNC4», все последующие символы данных являются расширенными символами ASCII до тех пор, пока не встретятся еще два последовательных символа «FNC4» или не будет достигнут конец символа. Если во время этой последовательности расширенного кодирования встречается один символ «FNC4», он используется для возврата к стандартной кодировке ASCII только для следующего символа данных. Символы SHIFT и подмножества символов будут иметь обычный эффект во время такой последовательности.
  5. ^ «Объяснение кода 128» . Софтматик ГмбХ . Проверено 21 января 2017 г. В принципе, символы, отличные от ASCII, такие как немецкие умлауты (например, ÄÖÜ), могут быть закодированы в символе кода 128 с помощью специального символа (FNC4). Однако эта функция не получила широкого распространения. Лучшим выбором может быть использование символики 2D-штрих-кода, такой как Aztec или Datamatrix, со специальной поддержкой данных, отличных от ASCII.
  6. ^ Общие спецификации GS1 (январь 2006 г. - версия 7.0), раздел 5.3.1.1 Характеристики символики GS1-128, в котором говорится: «Символы со значениями ASCII от 128 до 255 также могут быть закодированы в символах кода 128. Символы со значениями ASCII от 128 до 255, доступные через Символ функции 4 (FNC4) зарезервирован для использования в будущем и не используется в символах штрих-кода GS1-128».
  7. ^ «5.4.3.4.2 Функциональные символы» . Стандарт общих спецификаций GS1 . Версия 23.0. GS1 AISBL: 287. Январь 2023 г. Проверено 28 июня 2023 г.
  8. ^ Общие характеристики GS1, версия 13, выпуск 1, январь 2013 г., раздел 5.4.7.7. Использование символов Start, Code Set и Shift для минимизации длины символа (информативно), страницы 268–269. В этом разделе описывается стратегия сжатия.
  9. ^ Скиена, Стивен С. (2010). «8.9 Военная история: сжатие текста для штрих-кодов». Руководство по разработке алгоритмов (2-е изд.). ISBN 978-1-849-96720-4. динамическое программирование привело к более жесткому кодированию в среднем на 8%.

Внешние ссылки

Образец кода