Какой штрих-код лучше всего использовать?
В различных отраслях промышленности существуют стандарты использования типов штрих-кодов. Для маркировки товаров в рознице используются EAN и UPC. Используйте ISBN, ISSN и Bookland для книг и периодических изданий. Используйте UCC-128, EAN-128 или SSCC-18 для маркировки транспортных коробок. Обратите внимание, что промышленный стандарт не обязательно совпадает с символикой штрих-кода. ISBN, ISSN – это промышленные стандарты, основанные на символике штрих-кода EAN. UCC-128, EAN-128 и SSCC-18 используют штрих-код Code 128. Как правило, если товары должны сканироваться или продаваться в розницу, то лучшим типом штрих-кода для использования будут штрих-коды UPC или EAN. Учитывайте также объем данных, которые вам требуются. Если требуются буквенно-цифровые символы, то лучшим вариантом будет код 39 или код 128. Также учитывайте размер предметов, которые вы кодируете, и систему, которую вы будете использовать, поскольку двухмерные штрих-коды намного меньше, но могут не поддерживаться вашей системой или вашими партнерами по цепочке поставок.
Насколько маленьким может быть штрих-код?
Штрих-код может быть достаточно маленьким. Например, 1×1 см для двухмерного штрих-кода. Но в штрих-код меньшего размера можно закодировать меньше информации. И вам также предется использовать принтер с более высоким разрешением.
Сколько данных может содержать штрих-код?
Обычно это около 25 символов для 1D штрихкода и около 2000 для 2D. Конечно, чем больше символов вы закодируете, тем крупнее будет штрих-код. Штрих-код 1D может стать непрактично широким, если кодирует более чем из 15 символов.
Какой принцип работы штрих-кода?
Штрих-код — это комбинация контрастных меток, которую сканер может считывать и декодировать. В случае 1D штрих-кода это черные и белые вертикальные линии разной толщины. Для 2D это обычно узор из квадратных точек. Сканер использует специальные алгоритмы для декодирования этих шаблонов в текст.
Какие бывают типы штрих-кодов?
Существует множество различных символик штрих-кодов для разных областей применения.
Наиболее популярные одномерные штрих-коды:
Коды UPC — 12-значный одномерный штрих-код, используемый преимущественно в США для розничной торговли и товаров народного потребления. Этот штрих-код вы видите на своих розничных и потребительских покупках. Коды UPC состоят из пятизначного номера производителя и пятизначного номера продукта с однозначным идентификатором системы счисления в начале кода.
Коды EAN — европейский эквивалент кодов UPC. Код отличается от кода UPC тем, что дополнительная первая цифра определяет код страны происхождения.
Code 39 — используется в обороне и автомобилестроении. Код 39, как следует из названия, может содержать до 39 символов в штрих-коде. Код 39 – самый простой из буквенно-цифровых, он предназначен для самопроверки символов и часто используется малыми предприятиями для внутреннего использования.
Код 128 – Используемый на транспорте и логистике код 128 представляет собой код высокой плотности. Code 128 кодирует как числовой, так и буквенно-цифровой текст. Штрих-коды code 128, предназначенные для использования во внутренней цепочке поставок, могут хранить разнообразную информацию.
Самые популярные 2D штрих-коды:
QR-коды – один из самых распространенных 2D-кодов. QR-коды – это двухмерные матричные коды, ориентированные на потребителей и маркетинг. QR-коды поддерживают числовые, буквенно-цифровые, байтовые / двоичные коды и иероглифы. QR-коды бесплатны и доступны в открытом доступе.
Коды DataMatrix – эти 2D-коды, популярные для логистики и операций, имеют крошечные размеры и идеально подходят для маркировки небольших предметов, таких как электронные компоненты. Коды имеют преимущество в высокой отказоустойчивости и быстрой читаемости.
PDF417 – Эти коды могут хранить огромные объемы данных до 1,1 КБ. Коды идеально подходят для государственных приложений, таких как водительские права, поскольку они могут хранить фотографии, отпечатки пальцев, подписи, текст, числа и графику. Код общедоступен и бесплатен для использования.
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 19 марта 2016 года; проверки требуют 14 правок.
Слово «Wikipedia», записанное при помощи Code 128-B
Стандарт штрихкода Code 128 существенно отличается от таких широко распространённых стандартов штрихового кода, как, например, EAN. Отличия заключаются, прежде всего, в возможности кодирования не только цифр, но и букв латинского алфавита, а также специальных символов. Кроме того, цифровой код в формате Code 128 становится очень компактным, что достигается за счёт «двойной упаковки» данных, когда две цифры записываются в один шаблон штрихкода. Буквенные символы кодируются обычным — «одиночным» — способом, что делает буквенный код в формате Code 128 вдвое длиннее цифрового.
Описание[править | править код]
Штриховой код Code 128 включает в себя 107 символов, из которых 103 символа данных, 3 стартовых и 1 остановочный (стоп) символ. Для кодирования всех 128 символов ASCII предусмотрено три комплекта символов штрихового кода Code 128 — A, B и C, которые могут использоваться внутри одного штрихкода.
- 128A — символы в формате ASCII от 00 до 95 (цифры от «0» до «9» и буквы от «A» до «Z»), специальные символы и символы FNC 1-4;
- 128B — символы в формате ASCII от 32 до 127 (цифры от «0» до «9», буквы от «A» до «Z» и от «a» до «z»), специальные символы и символы FNC 1-4;
- 128C — числа от 00 до 99 (двузначное число кодируется одним символом) и символ FNC 1.
Технические требования к символике штрихового кода Code 128, показатели символики, кодирование знаков данных, размеры, алгоритмы декодирования, параметры применения и строки-префиксы и идентификатора символики в России регламентируются ГОСТ 30743-2001 (ИСО/МЭК 15417—2000) (Заменен на ГОСТ ISO/IEC 15417-2013) «Автоматическая идентификация. Кодирование штриховое. Спецификация символики Code 128 (Код 128)».
Структура Code 128[править | править код]
Структура штрихкода Code 128 достаточно проста. Штрихкод состоит из шести зон:
- Белое поле;
- Стартовый символ (Start);
- Кодированная информация;
- Проверочный символ (контрольный знак);
- Остановочный (Stop) символ;
- Белое поле.
Символы штрихового кода Code 128 состоят из трёх штрихов и трёх промежутков. Штрихи и промежутки имеют модульное построение. Ширина каждого штриха и промежутка составляет от 1 до 4 модулей (1 модуль = 0,33 мм). Ширина знака равна 11 модулям. Остановочный (стоп) знак состоит из тринадцати модулей и имеет четыре штриха и три промежутка.
Контрольный знак Code 128[править | править код]
Существует 107 шаблонов (patterns), каждый из которых кодируется 11 модулями, включающими 3 полоски (slim bars) и 3 промежутка (spaces). Исключение — стоп-шаблон [STOP] имеет 4 полоски и кодируется 13 модулями.
Каждый шаблон декодируется по таблице, для некоторых шаблонов определены управляющие воздействия, определяющие режим декодирования.
Один из трех стартовых шаблонов [START-A] (#103), [START-B] (#104) или [START-C] (#105) ограничивает код слева и определяет таблицу декодирования (A, B или C). Шаблон [STOP] (#106) ограничивает код справа. Перед шаблоном [STOP] идет шаблон контрольной суммы. Слева и справа от штрихкода должно быть свободное пространство (Quiet zone) шириной по крайней мере в 10 модулей.
Шаблон [SHIFT] (#98 в таблицах A и B) позволяет переключаться между таблицами A и B. Шаблоны [Code C] (#99 в таблицах A и B), [Code B] (#100 в таблицах A и C) и [Code A] (#101 в таблицах B и C) управляют непосредственным включением соответствующей таблицы декодирования.
Функциональные шаблоны [FNC1]-[FNC4] не определены.
Контрольная сумма занимает один шаблон и должна быть добавлена перед шаблоном [STOP]. Шаги для расчета контрольной цифры таковы:
1. Начальное значение = значению шаблона [START] (103, 104 или 105).
2. Для каждого следующего шаблона в сообщении (исключая [STOP]): взять его номер в таблице кодировки, умножить его на свою позицию (позиция первого шаблона после [START] равна 1). Результат добавить к контрольной сумме.
3. Контрольной суммой будет считаться остаток от деления результата на 103.
Значением (value) шаблона считается его порядковый номер в таблице (считаем с нуля).[1]
См. также[править | править код]
- EAN-128
- Code 39
Примечания[править | править код]
- ↑ TradePilot (недоступная ссылка — история). — Описание стандарта штрихкода Code 128. Дата обращения: 29 ноября 2009. Архивировано 13 апреля 2012 года.
Ссылки[править | править код]
- Online barcode generator Бесплатный онлайн ресурс для генерации ШК различных типов. Please check — On this page make barcode fo type Code128 — not correct.
- Code 128 generator (MIT) JavaScript реализация
Время на прочтение
9 мин
Количество просмотров 5.9K
Однажды в процессе производственной деятельности у меня появилась необходимость генерации штрихкода по стандарту code128. Появилась в виду того, что имевшаяся в эксплуатации функция (хранимая процедура в базе Oracle) генерировала клёвый, полосатый штрихкод, который читался не во всех случаях. Разработчики в своё время оттестировали эту процедуру весьма некачественно, но перерабатывать уже не собирались т.к. проект был давно сдан, а потребности в считывании так и не появились.
Первая мысль — поиск готовых библиотек. Навскидку определили критерии — с pl/sql не связываемся, пусть это будет внешний сервис: возможно кусок на javascript для генерации прямо на страничке, либо обращение за картинкой к ближайшему серверу где имеется php. Беглый поиск в интернете показал что тема истоптана весьма плотно. Есть как наколенные поделки уровня лабораторки по программированию, так и мощные библиотеки для всех вариантов кодирования вплоть до qr-кодов. Варианты с JavaScript пришлось отбросить т.к. они во-первых практически все «обфусканы» (даже непонятно, то ли для сокращения объема, то ли стыдно исходники показать), во-вторых генерируют строку для отображения определенным шрифтом, наличие которого не всегда можно обеспечить на клиентском месте и требует дополнительных обработок для экранирования спецсимволов. Внимательное изучение библиотек и кусков кода на php тоже произвело тягостное впечатление — на первый взгляд всё вроде бы правильно: и классы написаны на все случаи жизни, комментарии в наличии, украшательства типа выбора цвета и рамочек, примеры подготовлены. Начнёшь вникать — хотят либо php самой распоследней версии (на боевых серверах не всегда это получается добыть), либо внутренняя логика не различима совсем, либо штрихкод на выходе получается длиннее ожидаемого. Вот последнее не дало покоя и подтолкнуло к собственной реализации.
Самое время пощупать теорию. Вернее мы с ней познакомились намного раньше, просто до последнего не хотелось ввязываться в дополнительное программирование. Исторические факты опустим, а вот очень хорошее техническое описание имеется на http://code128.narod.ru/ (в архиве это файл Descript.doc ) либо в Википедии. В принципе, это всё что нам потребуется для понимания и собственной реализации алгоритма (тут я немного лукавлю — из любой готовой библиотеки нужно выдрать таблицы толщин штрихов, чтобы не вбивать их вручную). Ну и напишем всё это безобразие на php, заодно посмотрим пару прикольных моментов, про которые все забывают или стесняются использовать.
Теория гласит, что code128 позволяет закодировать (сюрпрайз!) 128 символов, при этом нам доступно 3 алфавита, между которыми можно переключаться по ходу дела. Наибольший практический интерес представляют алфавит «B» для буквенно-цифровых символов и алфавит «С» который используется для кодирования цифр, но с некоторой оптимизацией — одним штриховым символом можно закодировать 2 исходных символа и получить более короткий штрихкод. Вот эта оптимизация пока не даётся ни одному php-разработчику — максимум что я видел это попытка в начале кодирования определить состав строки и при наличии только цифр переключаться на алфавит «С». В остальных библиотеках это банальная подстановка символов штрихкода по таблице.
Для начала осмотрим приборы и материалы — в начале строки можем задать алфавит для кодирования, перед каждым символом можем переключить алфавит. Также мы на входе ограничены по длине строки – это очень хорошо и важно для нас. Имеем цель — получить штрихкод. Точнее, самый короткий штрихкод.
Разберём пару примеров. Допустим у нас есть последовательность «ABC12DE» попробуем её закодировать разными методами, на примере изображены слева только алфавит B, справа – совместно B и С:
Наша попытка оптимизировать длину кода используя более короткий алфавит потерпела фиаско – мы получили дополнительные символы на переключениях алфавита и в результате штрихкод стал на 1 символ длиннее. Если хорошо подумать, то переключение на алфавит С выгодно при наличии 6 и более цифр подряд. Но есть ведь и граничные случаи — цифры в конце последовательности, в начале, а есть еще вариант с нечетным количеством цифр и тогда надо пристально смотреть когда переключаться на алфавит С — с первой цифры или со второй? В общем вариантов достаточно много, что в итоге у большинства отбивает желание оптимизировать длину кода, а делать всё одним алфавитом.
И вот тут нас озаряет, что работа с рекурсивной функцией избавит нас от рассмотрения всех этих условий и задача станет невероятно простой — функция будет вызывать сама себя с тремя вариантами кодирования текущего символа и возвращать наиболее короткий (итоговый) вариант. Причём длина варианта включает в себя и символ переключения между алфавитами. Причин отказа от захода в ветку алгоритма совсем немного — либо кончился входной поток, либо мы не можем закодировать символ(ы) данным алфавитом (например нет 2-х цифр для алфавита «С»). Так, как входной поток имеет ограничение по длине, то дерево не будет расти бесконечно! По тексту будем реализовывать только алфавит «B» и «C» – проще для понимания и потом объясню остальное 🙂
Сразу набросаем простейший класс который содержит сам текст, такие-же классы для рассмотрения вариантов по алфавиту B и С, длину последовательности. Делаем ему минимальный конструктор — на входе строка для кодирования, режим кодирования, ссылки на потомков. В начале конструктора добавляем проверки, чтобы не прорабатывать данную ветку дерева:
<?php
class code128 {
private $code = '';
private $leafB = NULL, $leafC = NULL;
public function __construct($text, $mode = 'B')
{
if (strlen($text) == 0) return NULL;
$this->mode = $mode;
if ($mode == 'B') {
$this->code = substr($text, 0, 1);
$text = substr($text, 1);
}
else if ($mode == 'C') {
if (strlen($text) < 2) return NULL;
if (!is_numeric($text[0])) return NULL;
if (!is_numeric($text[1])) return NULL;
$this->code = substr($text, 0, 2);
$text = substr($text, 2);
}
else
return NULL;
$this->leafB = new code128($text, 'B');
$this->leafC = new code128($text, 'C');
}
public function draw()
{
echo "Code [" . $this->code . "]n";
if ($this->leafB != NULL) $this->leafB->draw();
if ($this->leafC != NULL) $this->leafC->draw();
}
}
$n = new code128('s92317lsdfa4324', 'B');
$n->draw();
?>
и сразу ловим конкретный косяк — куча “пустых” объектов. И это не смотря на то что мы явно отказались создаваться и вроде как железно возвращаем NULL! В общем сразу надо понять, что в php объект создаётся в любом случае. Полагаю что также и в остальных объектно-ориентированных языках. И все эти условия надо проверять перед созданием объекта. Следовательно правильный конструктор будет выглядеть примерно так:
public function __construct($text, $mode = 'B')
{
$this->mode = $mode;
if ($mode == 'B') {
$this->code = substr($text, 0, 1);
$text = substr($text, 1);
}
else if ($mode == 'C') {
$this->code = substr($text, 0, 2);
$text = substr($text, 2);
}
if(strlen($text)>0) $this->leafB = new code128($text, 'B');
if(strlen($text)>1)
if(is_numeric($text[0]) && is_numeric($text[1])) $this->leafC = new code128($text, 'C');
}
Не считая того, что мы избавились от пустых объектов, код получился даже немного короче чем прототип. Дальше начнём немного оптимизировать – добавим небольшой трюк: вместо того чтобы делать кучу проверок является ли последовательность символами, цифрами, их количество и т.д. просто смотрим в таблице наличие такого индекса в алфавите. Я уже писал что таблицу можно добыть в любой библиотеке реализующей кодирование code128? В общем напоминаю ещё раз, и готовый кусочек кода, который мне уже нравится, приведен ниже:
if($mode == 'B') list($this->code, $text) = sscanf($text, '%c%s');
if($mode == 'C') list($this->code, $text) = sscanf($text, '%2d%s');
if(strlen($text)>0)
if(array_key_exists(substr($text, 0, 1), $symCode)) $this->leafB = new code128($text, 'B', $this);
if(strlen($text)>1)
if(array_key_exists(substr($text, 0, 2), $symCode)) $this->leafC = new code128($text, 'C', $this);
$symCode – это алфавиты, которые я загнал в файл tables.php и включаю его через require в начале исходника. Формат простой – символ алфавита => код штрихкода.
$symCode = array(
/* alphabet B alphabet C */
' ' => 0, '00' => 0,
'!' => 1, '01' => 1,
'"' => 2, '02' => 2,
'#' => 3, '03' => 3,
'$' => 4, '04' => 4,
'%' => 5, '05' => 5,
'&' => 6, '06' => 6,
Дерево строится, но результата пока не видно. Следующим этапом необходимо определить самую короткую ветку: Первый вариант – заводим в классе счётчик и увеличиваем его при каждом переходе на ветку. Как только достигнем дна (конца исходного текста), на концах дерева будет указан размер финального кода. Второй вариант — конечные веточки ставят себе размер 1, а дальше родитель решает какой из потомков имеет код короче и ставит себе размер на 1 или 2 больше. Почему на 2? Надо учитывать накладные расходы на переключение алфавита. Кстати и в первом варианте это тоже надо учитывать. В итоге в корне дерева будет длина самой короткой последовательности. Чем хорош первый вариант? Получение итоговой последовательности практически мгновенное — возвращаешься «по папе» к корню дерева. Ну и недостаток — чтобы найти самую короткую ветку надо сделать полный обход дерева. Второй вариант — длина самой короткой последовательности известна и находится в одном месте, но получение последовательности чуток посложнее, хотя и не требует полного обхода. Попробуем проработать первый вариант — доделать надо совсем немного, просто родитель после создания потомков должен выбрать самого короткого потомка и сохранить ссылку на конечный элемент ветки. Выразился невероятно коряво, но Вы посмотрите код – там ещё страшнее 🙂
require 'tables.php';
class code128 {
private $code = NULL;
private $text = '';
private $mode = 'Auto';
private $len = 1;
private $leafB = NULL, $leafC = NULL, $parent = NULL, $minCode = NULL;
public function __construct($text, $mode = 'Auto', $parent = NULL)
{
global $symCode;
$this->parent = $parent;
$this->text = $text;
$this->mode = $mode;
if($parent != NULL) {
$this->len = $this->parent->len + 1;
if($this->parent->mode != $mode) $this->len++;
}
if($mode == 'B') list($this->code, $text) = sscanf($text, '%c%s');
if($mode == 'C') list($this->code, $text) = sscanf($text, '%2d%s');
if(strlen($text)>0)
if(array_key_exists(substr($text, 0, 1), $symCode)) $this->leafB = new code128($text, 'B', $this);
if(strlen($text)>1)
if(array_key_exists(substr($text, 0, 2), $symCode)) $this->leafC = new code128($text, 'C', $this);
if($this->leafB == NULL && $this->leafC == NULL) $this->minCode = $this;
else {
$this->minCode = ($this->leafB != NULL) ? $this->leafB->minCode : $this->leafC->minCode;
if($this->leafC != NULL)
if($this->minCode->len > $this->leafC->minCode->len) $this->minCode = $this->leafC->minCode;
}
return $this;
}
Итак, худо-бедно мы нашли самый короткий путь (штрихкод). Надо его вывести для начала на экран. Делаем в два этапа: сначала от потомка возвращаемся к родителю. Итоговые символы, включая переключение между алфавитами, пушим (push) в массив. Да, в PHP есть такая функция, и она позволяет нам сделать из массива довольно удобный стэк.
private function getCode()
{
$stack = array();
$p = $this->minCode;
while($p != NULL) {
array_push($stack, $p->code);
if($p->parent != NULL) {
if($p->parent->mode == 'Auto') { array_push($stack, 'Start'.$p->mode); break;}
if($p->mode != $p->parent->mode) array_push($stack, 'Code'.$p->mode);
}
$p = $p->parent;
}
return $stack;
}
Когда потребуется вывести строку — используем array_pop. Таким образом, мы по прежнему используем данный массив как стэк и легко выводим информацию в обратном порядке. Попутно готовим дополнительную обвязку для нашего штрихкода — старт/стоп/контрольная сумма.
Финал совсем близко – я уже устал писать, Вы устали читать. Предлагаю пробежаться весьма бегло. Само рисование сделано в виде SVG. Для данной задачи весьма удобно — нет необходимости кодировать размеры изображения, они будут задаваться тэгами на страничке. Кроме того, рендеринг и масштабирование осуществляется конечным устройством, что обеспечит необходимое качество в dpi соответствующее устройству вывода.
private function printPattern($code, $posX, $res, $height)
{
for($i = 0; $i < strlen($code); $i++) {
$w = $res*intval($code[$i]);
if(!($i%2))
echo " <rect x='$posX' y='0' width='$w' height='$height' fill='#0'/>n";
$posX += $w;
}
return $posX;
}
public function printSVG($resolution=1, $height=50)
{
global $symCode;
global $barPattern;
$s = $this->getCode();
$pos = 1;
$offset = $resolution*11;
$width = ((count($s) + 4)*11 + 2)*$resolution;
echo "<svg xmlns='http://www.w3.org/2000/svg' width='$width' height='$height'>n";
$start = $symCode[array_pop($s)];
$checksum = $start;
$offset = $this->printPattern($barPattern[$start], $offset, $resolution, $height);
while(!empty($s)) {
$code = $symCode[array_pop($s)];
$offset = $this->printPattern($barPattern[$code], $offset, $resolution, $height);
$checksum += $code*$pos;
$pos++;
}
$offset = $this->printPattern($barPattern[$checksum%103], $offset, $resolution, $height);
$offset = $this->printPattern($barPattern[$symCode['Stop']], $offset, $resolution, $height);
echo "</svg>n";
}
Появился глобальный массив $barPattern. Искать в файле tables.php рядом с $symCode. Кусочек приведу. Там всё просто – для заданного кода выходного символа чередуются толщины черных и белых штрихов:
$barPattern = array(
'212222', /* 0 */
'222122', /* 1 */
'222221', /* 2 */
'121223', /* 3 */
'121322', /* 4 */
Как этим пользоваться? В файл с классом в конец добавим пару строк:
header('Content-Type: image/svg+xml');
echo "<?xml version='1.0' encoding='UTF-8' standalone='no'?>nn";
$n = new code128(html_entity_decode($_SERVER["QUERY_STRING"]));
$n->printSVG();
попробовать можно сразу, вставив в html-страничку примерно вот такой тэг:
<img src="barcode128.php?ad32324adsFAE13413ldsFf">
Ну и напоследок. Реализованы только алфавиты «B» и «С». Уложился примерно в 100 строчек, не считая таблиц перекодировки. Реализовать алфавит «А» можно аналогичным способом просто дописав конструктор и таблицу с алфавитами, только желательно учесть один хитрый код, позволяющий кратковременно переключиться на один символ другого алфавита. Самому дописать у меня нет ни желания, ни времени, ни прочих мотиваций. (Полу)готовый проект вероятно пополнит кладбище штрихкодировщиков на гитхабе – если у кого есть желание продолжить проект – пишите, не стесняйтесь.
Введите кодовый текст, выберите символы и размер, чтобы сгенерировать код Code 128 бесплатно онлайн.
Питаться от aspose.com а также aspose.cloud
Code 128 is a high-density linear barcode symbology defined in ISO/IEC 15417:2007.[1] It is used for alphanumeric or numeric-only barcodes. It can encode all 128 characters of ASCII and, by use of an extension symbol (FNC4), the Latin-1 characters defined in ISO/IEC 8859-1.
Загружая свои файлы или используя наш сервис, вы соглашаетесь с нашими условия обслуживания and Политика конфиденциальности.
Ваши файлы успешно обработаны
СКАЧАТЬ
Начать заново
ОБЗОР
Создать CODE-128 и другие штрих-коды
Наше приложение для генерации штрих-кода CODE-128 позволяет вам бесплатно генерировать код CODE-128 онлайн. Генерируйте CODE-128 или любые другие типы идентификационных и двумерных штрих-кодов. Установка стороннего программного обеспечения не требуется. Веб-интерфейс Приложение быстрое, надежное, простое в использовании и абсолютно бесплатное
Создать другой штрих-код
Создавайте различные штрих-коды, включая EAN-8, EAN-13, EAN-14, QR, GS1 QR, PDF 417, GS1 Databar Expanded и многие другие.
Бесплатная генерация штрих-кода онлайн
Молниеносная генерация штрих-кода для выбранных вами параметров.
HOW TO
Как сгенерировать штрих-код
- Введите кодовый текст.
- Нажмите кнопку “Создать штрих-код”, чтобы сгенерировать штрих-код.
Learn More
Часто задаваемые вопросы
Как генерировать различные типы штрих-кодов?
Просто воспользуйтесь нашим онлайн-приложением Generate штрих-кода. Оно быстрое, простое в использовании и совершенно бесплатное. Он предназначен для быстрого создания штрих-кода.
Поддерживается более 60 символик штрих-кода, включая типы штрих-кодов 1D и типы штрих-кодов 2D.
Это быстрый и простой способ добавления тегов машинного чтения к вашим документам и продуктам. Он поддерживает как растровые, так и векторные форматы выходных изображений.
Обычно это до 25 символов для 1D-штрих-кода и около 2000 для 2D-штрих-кода. Такого ограничения нет, чем больше символов вы кодируете, тем больше штрих-код. 1D-штрих-код может стать непрактично широким, если он закодирован более чем на 15 символов. .
В конце процесса вы получите ссылку для скачивания. Вы можете скачать результат сразу или отправить ссылку на вашу электронную почту.
Все пользовательские файлы хранятся на серверах Aspose в течение 24 часов. По истечении этого времени они будут автоматически удалены.
Aspose уделяет самое большое внимание вопросам безопасности. Будьте уверены, что ваши файлы хранятся на безопасных серверах хранения и защищены от любого несанкционированного доступа.
Он может быть достаточно маленьким. Например, 1×1 см для 2D-штрих-кода. Но в меньшем штрих-коде вы можете закодировать меньше информации. Также вам следует использовать принтер с более высоким разрешением.
ИНФОРМАЦИЯ О ФАЙЛЕ
Узнайте о различных типах штрих-кодов
Позвольте себе больше узнать о широко известных типах штрих-кодов.
Code 128
<a class=’text-white’ style=’text-decoration: underline !important;’ href=’https://en.wikipedia.org/wiki/Code_128′ target=’_blank’>Code 128</a> is a high-density linear barcode symbology defined in ISO/IEC 15417:2007.[1] It is used for alphanumeric or numeric-only barcodes. It can encode all 128 characters of ASCII and, by use of an extension symbol (FNC4), the Latin-1 characters defined in ISO/IEC 8859-1.
Читать далее
САМЫЙ ПОПУЛЯРНЫЙ
Самые популярные штрих-коды
Мы поддерживаем различные типы штрих-кодов, включая QR, GS1 QR, PDF417, GS1 DataBar Expanded, Data Matrix, EAN-8 и многие другие.
Нажмите Ctrl + D, чтобы добавить эту страницу в избранное, или Esc, чтобы отменить действие.
Приложение работает на устройстве с большим соотношением сторон экрана (минимальная ширина 320 пикселей).
Кодировка швейцарского почтового штрих-кода «RI 476 394 652 CH» в коде 128-B
Код 128 является символы высокой плотности линейного штрих-кода, определенные в ISO / IEC 15417: 2007. Он используется для буквенно-цифровых или только цифровых штрих-кодов. Он может кодировать все 128 символов ASCII и, используя символ расширения (FNC4), символы Latin-1, определенные в ISO / IEC 8859-1.. Обычно это приводит к в более компактных штрих-кодах по сравнению с другими методами, такими как Code 39, особенно когда тексты содержат в основном цифры.
GS1-128 (ранее известный как UCC / EAN-128) является подмножеством Code 128 и широко используется во всем мире в отраслях отгрузка и упаковка как продукт идентификационный код уровня контейнера и поддона в цепочке поставок.
Содержание
- 1 Спецификация
- 1.1 Подтипы
- 1.2 Тихая зона
- 1.3 Пуск / останов и закодированные данные
- 1.4 Расчет контрольной цифры
- 1.5 Использование FNC4 для кодирования высокого уровня (128–255) символов
- 1.6 Ширина штрих-кода
- 1.7 Доступность
- 1.8 Оптимизация длины штрих-кода
- 2 Ссылки
- 3 Внешние ссылки
- 3.1 Пример кода
Спецификация
Схема штрих-кода ( Код 128B).. 1: тихая зона, 2 : начальный код, 3 : данные, 4 : контрольная сумма, 5 : стоп-код
Штрих-код Code 128 состоит из семи разделов:
- Тихая зона
- Стартовый символ
- Закодированные данные
- Контрольный символ (обязательный)
- Символ остановки
- Конечная полоса (часто считается частью символа остановки)
- Тихая зона
Контрольный символ рассчитывается на основе взвешенной суммы (по модулю 103) всех символов.
Подтипы
Код 128 включает 108 символов: 103 символа данных, 3 начальных символа и 2 символа остановки. Каждый символ состоит из трех черных полос и трех белых промежутков разной ширины. Все ширины кратны базовому «модулю». Каждая полоса и пробел имеют ширину от 1 до 4 модулей, а символы имеют фиксированную ширину: сумма ширины трех черных полос и трех белых полос составляет 11 модулей.
Шаблон остановки состоит из двух перекрывающихся символов и имеет четыре полосы. Шаблон остановки позволяет сканировать в двух направлениях. Когда шаблон остановки читается слева направо (обычный случай), распознается символ остановки (за которым следует двухмодульная полоса). Когда шаблон остановки читается справа налево, распознается символ обратного останова (за которым следует двухмодульная полоса). Сканер, который видит символ обратного останова, знает, что он должен пропустить двухмодульную полосу и прочитать остальную часть штрих-кода в обратном порядке.
Несмотря на свое название, Code 128 не имеет 128 отдельных символов, поэтому он не может напрямую представлять 128 кодовых точек. Чтобы представить все 128 значений ASCII, он переключается между тремя кодовыми наборами (A, B, C). Вместе кодовые наборы A и B охватывают все 128 символов ASCII. Кодовый набор C используется для эффективного кодирования строк цифр. Начальное подмножество выбирается с помощью соответствующего начального символа. В каждом кодовом наборе некоторые из 103 кодовых точек данных зарезервированы для перехода к одному из двух других кодовых наборов. Сдвиги выполняются с использованием кодовых точек 98 и 99 в кодовых наборах A и B, 100 в кодовых наборах A и C и 101 в кодовых наборах B и C для переключения между ними):
- 128A (Code Set A) – символы ASCII 00–95 (0–9, A – Z и управляющие коды), специальные символы и FNC 1–4
- 128B (кодовый набор B) – символы ASCII от 32 до 127 (0–9, A – Z, a – z), специальные символы и FNC 1–4
- 128C (кодовый набор C) – 00–99 (кодирует две цифры с одной кодовой точкой) и FNC1
Тихая зона
Минимальная ширина тихой зоны слева и справа от 128 штрих-кода составляет 10x, где x – минимальная ширина модуля. Это обязательно слева и справа от штрих-кода.
Пуск / останов и закодированные данные
Каждый символ в штрих-коде состоит из трех полосок и трех пробелов. Каждая полоса или пробел имеет ширину 1, 2, 3 или 4 единицы, сумма ширины полос должна быть четной (4, 6 или 8 единиц), сумма ширины пробелов должна быть нечетной (3, 5 или 7 единиц), всего 11 единиц на символ. Например, кодирование символа ASCII «0» можно рассматривать как 10011101100, где последовательность единиц – это полоса, а последовательность 0 – это пробел. Одна единица будет самой тонкой линией в штрих-коде. Три последовательных единицы (111) обозначают столбец в три раза толще одного столбца 1.
Имеется 108 возможных символов шириной 11 единиц, и код использует все возможные символы. Два символа используются для индикации остановки (конца штрих-кода), остановки и обратной остановки. Два символа стопа являются особенными, потому что за ними всегда следует столбик из 2 единиц, который образует шаблон длинных стопов из 13 единиц. Чтение шаблона остановки слева направо – это символ остановки (за которым следует полоса с двумя единицами), а чтение шаблона остановки справа налево – это символ остановки в обратном направлении (за которым следует полоса из двух единиц).
Расчет контрольной цифры
Контрольная цифра представляет собой взвешенную контрольную сумму по модулю 103. Он рассчитывается путем суммирования «значения» начального кода с произведением «значения» каждого символа на его позицию в строке штрих-кода. Начальный символ и первый кодированный символ находятся в позиции 1. Затем сумма произведений уменьшается по модулю 103. Остаток затем конвертируется обратно в один из 103 символов без разделителей (следуя инструкциям, приведенным в ниже ) и добавляется к штрих-коду непосредственно перед символом остановки.
Например, в следующей таблице код 128 вариант A значение контрольной суммы вычисляется для буквенно-цифровой строки PJJ123C:
Code | Value | Position | Значение ×. Положение |
---|---|---|---|
Начальный код A | 103 | 1 | 103 |
P | 48 | 1 | 48 |
J | 42 | 2 | 84 |
J | 42 | 3 | 126 |
1 | 17 | 4 | 68 |
2 | 18 | 5 | 90 |
3 | 19 | 6 | 114 |
C | 35 | 7 | 245 |
Сумма | 878 | ||
Модуль остатка 103 | 54 |
Для вычисления проверочного символа символы сдвига и кодового переключения обрабатываются как любой другой символ в штрих-коде. Контрольная сумма вычисляется по значениям символов, независимо от того, какой кодовый набор активен в данный момент. Например, значение “33” кодового набора C и значение “A” кодового набора B оба считаются значением 33 Code 128, а контрольная цифра вычисляется на основе значения, в 33 раза превышающего позицию символа в штрих-коде..
Использование FNC4 для кодирования старших (128–255) символов
Специальный символ FNC4 («Функция 4»), присутствующий только в кодовых наборах A и B, может использоваться для кодирования всех Символы Latin-1 (ISO-8859-1 ) в штрих-коде Code 128. Эта функция широко не поддерживается и не используется в GS1-128. Когда в строке присутствует один FNC4, следующий символ конвертируется в ASCII как обычно, а затем 128 добавляется к значению ASCII. (Если следующий символ является сдвигом, то для получения символа будет использоваться второй символ.) Если два FNC4 используются последовательно, то все следующие символы будут рассматриваться как таковые, вплоть до конца строки или другой пары FNC4.. Между двойными FNC4 будет использоваться один FNC4, чтобы обозначить, что следующий символ будет стандартным ASCII.
Ширина штрих-кода
Code128 определяет комбинацию из 6 чередующихся полосок и пробелов (по 3 каждого) для каждого символа. Таким образом, каждый символ начинается с полосы и заканчивается пробелом. В шрифтах штрих-кода последняя полоса обычно сочетается с символом остановки для создания более широкого шаблона остановки. В следующей таблице указаны значения ширины каждой полосы и пробела для каждого символа. Ширина каждой планки или пробела может составлять 1, 2, 3 или 4 единицы (модуля). Используя приведенный выше пример, буква «А» будет изображена с узором 10100011000 или шириной 111323 в таблицах ниже.
Значение ширины получается путем подсчета длины каждого ряда единиц, затем нулей в шаблоне, начиная слева. Всегда будет 6 прогонов, и длина этих 6 прогонов формирует значение ширины. Например, при использовании шаблона 10100011000 длины прогона: 1 (цифра 1), 1 (цифра 0), 1 (цифра 1), 3 (цифра 0), 2 (цифра 1), 3 (цифра 0). Отчет только о длине каждого прогона дает 1, 1, 1, 3, 2, 3, тем самым создавая значение ширины 111323.
Значение | Шестнадцатеричное значение | 128A | 128B | 128C | Положение шрифта. (Обычный / Необычный / Barcodesoft) | Штрих / Пробел | ||
---|---|---|---|---|---|---|---|---|
Код | Latin-1 | Шаблон | Ширина | |||||
0 | 00 | пробел | пробел | 00 | 32 или 194/212/252 | ␣ или Â / Ô / ü | 11011001100 | 212222 |
1 | 01 | ! | ! | 01 | 33 | ! | 11001101100 | 222122 |
2 | 02 | “ | “ | 02 | 34 | “ | 11001100110 | 222221 |
3 | 03 | # | # | 03 | 35 | # | 10010011000 | 121223 |
4 | 04 | $ | $ | 04 | 36 | $ | 10010001100 | 121322 |
5 | 05 | % | % | 05 | 37 | % | 10001001100 | 131222 |
6 | 06 | 06 | 38 | 10011001000 | 122213 | |||
7 | 07 | ‘ | ‘ | 07 | 39 | ‘ | 10011000100 | 122312 |
8 | 08 | ( | ( | 08 | 40 | ( | 10001100100 | 132212 |
9 | 09 | ) | ) | 09 | 41 | ) | 11001001000 | 221213 |
10 | 0a | * | * | 10 | 42 | * | 11001000100 | 221312 |
11 | 0b | + | + | 11 | 43 | + | 11000100100 | 231212 |
12 | 0c | , | , | 12 | 44 | , | 10110011100 | 112232 |
13 | 0d | – | – | 13 | 45 | – | 10011011100 | 122132 |
14 | 0e | . | . | 14 | 46 | . | 10011001110 | 122231 |
15 | 0f | / | / | 15 | 47 | / | 10111001100 | 113222 |
16 | 10 | 0 | 0 | 16 | 48 | 0 | 10011101100 | 123122 |
17 | 11 | 1 | 1 | 17 | 49 | 1 | 10011100110 | 123221 |
18 | 12 | 2 | 2 | 18 | 50 | 2 | 11001110010 | 223211 |
19 | 13 | 3 | 3 | 19 | 51 | 3 | 11001011100 | 221132 |
20 | 14 | 4 | 4 | 20 | 52 | 4 | 11001001110 | 221231 |
21 | 15 | 5 | 5 | 21 | 53 | 5 | 11011100100 | 213212 |
22 | 16 | 6 | 6 | 22 | 54 | 6 | 11001110100 | 22311 2 |
23 | 17 | 7 | 7 | 23 | 55 | 7 | 11101101110 | 312131 |
24 | 18 | 8 | 8 | 24 | 56 | 8 | 11101001100 | 311222 |
25 | 19 | 9 | 9 | 25 | 57 | 9 | 11100101100 | 321122 |
26 | 1a | : | : | 26 | 58 | : | 11100100110 | 321221 |
27 | 1b | ; | ; | 27 | 59 | ; | 11101100100 | 312212 |
28 | 1c | < | < | 28 | 60 | < | 11100110100 | 322112 |
29 | 1d | = | = | 29 | 61 | = | 11100110010 | 322211 |
30 | 1e | > | > | 30 | 62 | > | 11011011000 | 212123 |
31 | 1f | ? | ? | 31 | 63 | ? | 11011000110 | 212321 |
32 | 20 | @ | @ | 32 | 64 | @ | 11000110110 | 232121 |
33 | 21 | A | A | 33 | 65 | A | 10100011000 | 111323 |
34 | 22 | B | B | 34 | 66 | B | 10001011000 | 131123 |
35 | 23 | C | C | 35 | 67 | C | 10001000110 | 131321 |
36 | 24 | D | D | 36 | 68 | D | 10110001000 | 112313 |
37 | 25 | E | E | 37 | 69 | E | 10001101000 | 132113 |
38 | 26 | F | F | 38 | 70 | F | 10001100010 | 132311 |
39 | 27 | G | G | 39 | 71 | G | 11010001000 | 211313 |
40 | 28 | H | H | 40 | 72 | H | 11000101000 | 231113 |
41 | 29 | I | I | 41 | 73 | I | 11000100010 | 231311 |
42 | 2a | J | J | 42 | 74 | J | 10110111000 | 112133 |
43 | 2b | K | K | 43 | 75 | K | 10110001110 | 112331 |
44 | 2c | L | L | 44 | 76 | L | 10001101110 | 132131 |
45 | 2d | M | M | 45 | 77 | M | 10111011000 | 113123 |
46 | 2e | N | N | 46 | 78 | N | 10111000110 | 113321 |
47 | 2f | O | O | 47 | 79 | O | 10001110110 | 133121 |
48 | 30 | P | P | 48 | 80 | P | 11101110110 | 313121 |
49 | 31 | Q | Q | 49 | 81 | Q | 11010001110 | 211331 |
50 | 32 | R | R | 50 | 82 | R | 11000101110 | 231131 |
51 | 33 | S | S | 51 | 83 | S | 11011101000 | 213113 |
52 | 34 | T | T | 52 | 84 | T | 11011100010 | 213311 |
53 | 35 | U | U | 53 | 85 | U | 11011101110 | 213131 |
54 | 36 | V | V | 54 | 86 | V | 11101011000 | 311123 |
55 | 37 | W | W | 55 | 87 | W | 11101000110 | 311321 |
56 | 38 | X | X | 56 | 88 | X | 11100010110 | 331121 |
57 | 39 | Y | Y | 57 | 89 | Y | 11101101000 | 312113 |
58 | 3a | Z | Z | 58 | 90 | Z | 11101100010 | 312311 |
59 | 3b | [ | [ | 59 | 91 | [ | 11100011010 | 332111 |
60 | 3c | 60 | 92 | 11101111010 | 314111 | |||
61 | 3d | ] | ] | 61 | 93 | ] | 11001000010 | 221411 |
62 | 3e | ^ | ^ | 62 | 94 | ^ | 11110001010 | 431111 |
63 | 3f | _ | _ | 63 | 95 | _ | 10100110000 | 111224 |
64 | 40 | NUL | ` | 64 | 96 | ` | 10100001100 | 111422 |
65 | 41 | SOH | a | 65 | 97 | a | 10010110000 | 121124 |
66 | 42 | STX | b | 66 | 98 | b | 10010000110 | 121421 |
67 | 43 | ETX | c | 67 | 99 | c | 10000101100 | 141122 |
68 | 44 | EOT | d | 68 | 100 | d | 10000100110 | 141221 |
69 | 45 | ENQ | e | 69 | 101 | e | 10110010000 | 112214 |
70 | 46 | ACK | f | 70 | 102 | f | 10110000100 | 112412 |
71 | 47 | BEL | g | 71 | 103 | g | 10011010000 | 122114 |
72 | 48 | BS | h | 72 | 104 | h | 10011000010 | 122411 |
73 | 49 | HT | i | 73 | 105 | i | 10000110100 | 142112 |
74 | 4a | LF | j | 74 | 1 06 | j | 10000110010 | 142211 |
75 | 4b | VT | k | 75 | 107 | k | 11000010010 | 241211 |
76 | 4c | FF | l | 76 | 108 | l | 11001010000 | 221114 |
77 | 4d | CR | m | 77 | 109 | m | 11110111010 | 413111 |
78 | 4e | SO | n | 78 | 110 | n | 11000010100 | 241112 |
79 | 4f | SI | o | 79 | 111 | o | 10001111010 | 134111 |
80 | 50 | DLE | p | 80 | 112 | p | 10100111100 | 111242 |
81 | 51 | DC1 | q | 81 | 113 | q | 10010111100 | 121142 |
82 | 52 | DC2 | r | 82 | 114 | r | 10010011110 | 121241 |
83 | 53 | DC3 | s | 83 | 115 | s | 10111100100 | 114212 |
84 | 54 | DC4 | t | 84 | 116 | t | 10011110100 | 124112 |
85 | 55 | НАК | u | 85 | 117 | u | 10011110010 | 124211 |
86 | 56 | SYN | v | 86 | 118 | v | 11110100100 | 411212 |
87 | 57 | ETB | w | 87 | 119 | w | 11110010100 | 421112 |
88 | 58 | CAN | x | 88 | 120 | x | 11110010010 | 421211 |
89 | 59 | EM | y | 89 | 121 | y | 11011011110 | 212141 |
90 | 5a | SUB | z | 90 | 122 | z | 11011110110 | 214121 |
91 | 5b | ESC | { | 91 | 123 | { | 11110110110 | 412121 |
92 | 5c | FS | | | 92 | 124 | | | 10101111000 | 111143 |
93 | 5d | GS | } | 93 | 125 | } | 10100011110 | 111341 |
94 | 5e | RS | ~ | 94 | 126 | ~ | 10001011110 | 131141 |
95 | 5f | США | DEL | 95 | 195/200/240 | Ã / È / ð | 10111101000 | 114113 |
96 | 60 | FNC 3 | FNC 3 | 96 | 196/201/241 | Ä / É / ñ | 10111100010 | 114311 |
97 | 61 | FNC 2 | FNC 2 | 97 | 197/202/242 | Å / Ê / ò | 11110101000 | 411113 |
98 | 62 | Сдвиг B | Сдвиг A | 98 | 198/203/243 | Æ / Ë / ó | 11110100010 | 411311 |
99 | 63 | Код C | Код C | 99 | 199/204/244 | Ç / Ì / ô | 10111011110 | 113141 |
100 | 64 | Код B | FNC 4 | Код B | 200/205/245 | È / Í / x | 10111101110 | 114131 |
101 | 65 | FNC 4 | Код A | Код A | 201/206/246 | É / Î / ö | 11101011110 | 311141 |
102 | 66 | FNC 1 | FNC 1 | FNC 1 | 202/207/247 | Ê / Ï / ÷ | 11110101110 | 411131 |
103 | 67 | ул. арт Код A | 203/208/248 | Ë / Ð / ø | 11010000100 | 211412 | ||
104 | 68 | Начальный код B | 204/209/249 | Ì / Ñ / ù | 11010010000 | 211214 | ||
105 | 69 | Начальный код C | 205/210/250 | Í / Ò / ú | 11010011100 | 211232 | ||
106 | 6a | Стоп | — | — | 11000111010 | 233111 | ||
— | — | Обратный останов | — | — | 11010111000 | 211133 | ||
— | — | Стоп шаблон (7 штрихов / пробелов) | 206/211/251 | Î / Ó / û | 1100011101011 | 2331112 |
«Код A Символы «Код B» и «Код C» заставляют все будущие символы интерпретироваться согласно соответствующему субкоду. Символ “Shift” переключает интерпретацию одного следующего символа между подкодами A и B.
Закодированный символ ASCII зависит от фактического используемого шрифта штрих-кода. В частности, символ ASCII со значением 0 и значением 95 и выше может быть определен по-разному в установленном шрифте.
Коды FNCx используются для специальных целей. FNC1 в начале штрих-кода указывает на штрих-код GS1-128, который начинается с 2-3- или 4-значного идентификатора приложения, присвоенного Uniform Code Council, что объясняет следующие цифры. Например, идентификатор приложения 421 указывает, что за ним следует цифровой код страны ISO 3166-1 и почтовый индекс получателя. Таким образом, американский почтовый индекс для Белого дома обычно печатается как «(421) 840 20500», но на самом деле кодируется как «[Начало C] [ FNC1] 42 18 40 20 50 [Код A] 16 [Контрольный символ 92] [Стоп]
“
Расчет контрольной цифры для указанного выше примера почтового индекса:
Значение | Вес | Вес × Значение | |
---|---|---|---|
Начало C | 105 | 1 | 105 |
FNC1 | 102 | 1 | 102 |
42 | 42 | 2 | 84 |
18 | 18 | 3 | 54 |
40 | 40 | 4 | 160 |
20 | 20 | 5 | 100 |
50 | 50 | 6 | 300 |
Код A | 101 | 7 | 707 |
0 | 16 | 8 | 128 |
Сумма = | 1740 | ||
1740 | Mod 103 = | 92 |
Доступность
Для конечного пользователя штрих-коды Code 128 могут быть сгенерированы либо внешним приложением для создания изображения штрих-кода, либо решением для штрих-кода на основе шрифтов. Любое решение требует использования приложения или добавление приложения для вычисления контрольной цифры и создания штрих-кода.
Оптимизация длины штрих-кода
Кодовый набор C использует один кодовый символ для представления двух цифр, поэтому, когда текст содержит только цифры, он будет обычно r Результат в более коротких штрих-кодах. Однако, когда строка содержит только несколько цифр или смешана с нецифровым символом, она не всегда дает более компактный код, чем кодовые наборы A или B. Использование кодового набора C позволяет сэкономить один символ на две цифры, но стоит режим -смена символа для входа и выхода из набора. Таким образом, его стоит использовать только при наличии достаточного количества последовательных цифр. Например, для кодирования строки «X00Y» с помощью кодового набора A или B требуется 7 кодовых символов ([Start B] 56 16 16 57 [контрольная сумма] [Stop]
), при использовании кодового набора C для « 00 “приведет к коду длиной 8 символов ([Начало B] 56 [Код C] 00 [Код B] 57 [контрольная сумма] [Стоп]
).
Использование кодового набора C выгодно только при следующих условиях:
Расположение цифр | Количество последовательных цифр |
---|---|
начало данных | 4+ |
конец данных | 4+ |
середина данных (окруженная символами из кодового набора A или B) | 6+ |
все данные | либо 2 или 4+ (но не 3) |
В конце строки задержка перехода к кодовому набору C до тех пор, пока не останется четное количество цифр, позволяет избежать лишнего символа. Рассмотрим строку «… 01234»: переключение с задержкой производит ... 0 [Код C] 12 34 [контрольная сумма] [Стоп]
, но раннее переключение создает ... [Код C ] 01 23 [Код A] 4 [контрольная сумма] [Стоп]
.
Например, для строки «098x1234567y23» экономия длины штрих-кода с использованием кодового набора C достигается только в том случае, если он применяется к средней части строки. Для начальной и конечной части строки переключение на кодовый набор C не действует. Поскольку в середине строки нечетное количество цифр, для нечетной должен использоваться другой код, установленный, но не имеет значения, первая это или последняя; В любом случае требуется 16 символов: [Start B] 0 9 8 x 1 [Code C] 23 45 67 [Code B] y 2 3 [контрольная сумма] [Stop]
или [Start B] 0 9 8 x [Код C] 12 34 56 [Код B] 7 y 2 3 [контрольная сумма] [Стоп]
.
Оптимизация длины результирующего штрих-кода важна, когда используются считыватели штрих-кода который должен обнаруживать все изображение штрих-кода сразу, чтобы его прочитать, например, обычные лазерные сканеры. Чем длиннее штрих-код, тем большее расстояние требуется от лазерного считывателя штрих-кода до изображения штрих-кода, что затрудняет или делает невозможным считывание значений длин / расстояний, превышающих определенные пороговые значения.
Оптимальная кодировка может быть найдена с помощью алгоритма динамического программирования.
Ссылки
Внешние ссылки
- GS1- 128 Спецификация – Подробный список идентификаторов приложений.
- Barcodesoft – Отображение шрифтов Barcodesoft, которое отличается от обычного отображения ascii (см. http://ascii-code.com/ ).
- Код 128 – Изучите алгоритм кодирования Code 128 с помощью шрифтового решения для штрих-кода.
- Онлайн-генератор штрих-кода – Бесплатный онлайн-генератор штрих-кода для различных типов штрих-кода.
Образец кода
- ZXing – многоплатформенный сканер / генератор штрих-кода с открытым исходным кодом с версиями, доступными на Java (основной проект), и портами на ActionScript, C ++, C #, ObjectiveC и Ruby.
- Python Bar Code 128 – этот код, кажется, рисует прямоугольники шириной в один пиксель. Похоже, он был изменен из короткого штрих-кода длинной строки, который должен был бы рисовать линии. «Черные прямоугольники» должны быть того же размера, что и «белые прямоугольники».
- GenCode128 – Бесплатно Исходный код C # реализация кода Code128. Реализованы почти все функции, но не на 100%.
- Barcode1DTools Ruby gem – исходный код Ruby для многих символик штрих-кода 1D, включая Code 128.
- Код генерации штрих-кода Perl – исходный код Perl для множество одномерных штрих-кодов, включая Code 128.
- Barcode :: Code128 – Бесплатный модуль генерации штрих-кода Perl.
- GOCR – Бесплатное OCR с распознаванием Code 128.
- Barcode Code 128 – Бесплатная реализация исходного кода JavaScript для Code128.
- Barcode4J – бесплатный Java API с реализацией Code128 и других стандартных штрих-кодов.
- JavaScript Code 128 – реализация Code128 и других линейных штрих-кодов на JavaScript с открытым исходным кодом.
- Введение в создание штрих-кодов Code 128 Руководство по преобразованию текста в штрих-коды Code 128. Написано для Lazarus (многоплатформенный графический интерфейс Pascal с открытым исходным кодом), но для общего использования.
.