Код 128 как составить

  • Какой штрих-код лучше всего использовать?

    В различных отраслях промышленности существуют стандарты использования типов штрих-кодов. Для маркировки товаров в рознице используются 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

    Примечания[править | править код]

    1. 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 it Works

    HOW TO

    Как сгенерировать штрих-код

    • Введите кодовый текст.
    • Нажмите кнопку “Создать штрих-код”, чтобы сгенерировать штрих-код.

    Learn More

    Часто задаваемые вопросы

    Как генерировать различные типы штрих-кодов?

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

    Поддерживается более 60 символик штрих-кода, включая типы штрих-кодов 1D и типы штрих-кодов 2D.

    Это быстрый и простой способ добавления тегов машинного чтения к вашим документам и продуктам. Он поддерживает как растровые, так и векторные форматы выходных изображений.

    Обычно это до 25 символов для 1D-штрих-кода и около 2000 для 2D-штрих-кода. Такого ограничения нет, чем больше символов вы кодируете, тем больше штрих-код. 1D-штрих-код может стать непрактично широким, если он закодирован более чем на 15 символов. .

    В конце процесса вы получите ссылку для скачивания. Вы можете скачать результат сразу или отправить ссылку на вашу электронную почту.

    Все пользовательские файлы хранятся на серверах Aspose в течение 24 часов. По истечении этого времени они будут автоматически удалены.

    Aspose уделяет самое большое внимание вопросам безопасности. Будьте уверены, что ваши файлы хранятся на безопасных серверах хранения и защищены от любого несанкционированного доступа.

    Он может быть достаточно маленьким. Например, 1×1 см для 2D-штрих-кода. Но в меньшем штрих-коде вы можете закодировать меньше информации. Также вам следует использовать принтер с более высоким разрешением.

    ИНФОРМАЦИЯ О ФАЙЛЕ

    Узнайте о различных типах штрих-кодов

    Позвольте себе больше узнать о широко известных типах штрих-кодов.

    File Information

    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 Пример кода

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

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

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

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

    Контрольный символ рассчитывается на основе взвешенной суммы (по модулю 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.

    Код 128

    Значение Шестнадцатеричное значение 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 с открытым исходным кодом), но для общего использования.

    .

    Добавить комментарий