Генератор штрих-кода Code 39

Code 39 держится на предприятиях не потому, что он хорош, а потому, что он ничего не требует. Ни префикса, ни членства в GS1, ни согласования номера с кем бы то ни было: инвентарный номер, номер оснастки, номер дела вы придумываете сами и печатаете хоть на офисном лазернике. Расплата за эту автономность — размер и алфавит. Знаков ровно сорок три: десять цифр, двадцать шесть заглавных латинских букв, пробел и шесть символов — минус, точка, доллар, дробная черта, плюс и процент. Кириллицы среди них нет, и это не настройка генератора, которую можно включить, а состав самой символики.

Оформление
Размеры
Подпись
Положение подписи
Выключка подписи
Цвета

442 × 237 px в PNG

Единицы размера

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

Набор символов
буквы и цифры
Длина
от 1 до 43 символов
Контрольная цифра
в этой символике не используется

Где применяется

  • Инвентарные бирки на основные средства: номер приходит из бухгалтерской карточки и за пределами предприятия ничего не значит
  • Маркировка станков, оснастки и приспособлений в цехе, где сканеры стоят с прошлого десятилетия и перенастраивать их никто не будет
  • Номера дел, нарядов и бланков, которые печатает обычный лазерный принтер прямо в документе, рядом с текстом
  • Пропуска, обходные листы и заявки на ремонт — бумага, которую складывают вчетверо и носят в кармане неделю

Чем отличается

Code 128 компактнее по всем статьям, и разницу честнее считать в модулях. Знак Code 39 занимает шестнадцать модулей: девять элементов плюс узкий промежуток до следующего знака. Знак Code 128 в буквенно-цифровом наборе — одиннадцать. А если значение состоит из одних цифр, Code 128 переключается в числовой набор и укладывает две цифры в те же одиннадцать модулей, то есть по пять с половиной на цифру. Инвентарный номер из десяти цифр вместе со старт-стопом даёт 192 модуля в Code 39 против 90 в Code 128 — вдвое с лишним. Зачем тогда Code 39? Затем, что его можно напечатать шрифтом. У Code 39 нет ни вычисляемого контрольного знака, ни переключения кодовых наборов: каждый знак кодируется сам по себе, поэтому шрифт, подставляющий вместо буквы её штриховой рисунок, даёт корректный символ прямо в текстовом редакторе. У Code 128 так не выйдет — там кодировщик обязан посчитать контрольный символ по модулю 103, а шрифт считать не умеет. Именно поэтому в бухгалтерии, канцелярии и на старых участках учёта живёт Code 39, а не что-то поновее.

Типичные ошибки

  • Кириллица в значении. «ИНВ-000123» поле не примет: строка состояния назовёт недопустимый символ «И» и позицию 1. То же самое произойдёт со строчными латинскими буквами — их в алфавите тоже нет, и артикул, приехавший из выгрузки в нижнем регистре, отклоняется на первой же букве. Лечится это не настройкой, а решением: либо переводить внутреннюю нумерацию на латиницу и верхний регистр целиком, либо брать другую символику. Для русского текста подойдёт QR или Data Matrix, для латиницы со строчными — Code 128.
  • Знаки, которых в алфавите нет. Подчёркивание, запятая, скобки, знак номера — всё это встречается во внутренних номерах постоянно и всё это Code 39 не кодирует. Поле отвечает так же: называет символ и позицию, код не рисуется, кнопки скачивания остаются неактивными. Разрешённых знаков шесть, и список исчерпывающий: минус, точка, доллар, дробная черта, плюс, процент. Плюс пробел. Обычная замена — минус вместо подчёркивания и точка вместо запятой.
  • Пробел, приехавший из выгрузки. Пробел — полноправный знак Code 39, и это ловушка: значение «AB123 » с хвостовым пробелом — латиницей, как и требует алфавит, но с лишним знаком в конце — пройдёт проверку без единого замечания, код нарисуется, файл скачается. Заметят это позже и в другом месте: символ шире на один знак, а строка, которую сканер отдаёт в учётную систему, на один пробел длиннее той, что лежит в базе, и поиск по номеру не находит ничего. Перед пакетной печатью колонку со значениями стоит прогнать через обрезку пробелов — генератор за вас этого не сделает и не должен.
  • Ширина, которую подгоняют под бирку, а не наоборот. Шестнадцать модулей на знак набегают быстро. Инвентарный номер из двенадцати знаков вместе со старт-стопом — это 224 модуля; если втиснуть их в 50 мм на бирке, узкий элемент получится 0,223 мм. Лазерный принтер 300 dpi кладёт точку 0,085 мм, то есть в узкий элемент попадает 2,6 точки: целого числа не выходит, и каждый штрих округляется по-своему, отчего соотношение широких и узких элементов плывёт по всей длине кода. Правильный порядок обратный: сначала назначить узкий элемент — три точки принтера это защитимый минимум, — потом посмотреть, сколько знаков влезает, и при необходимости укоротить саму схему нумерации.

Вопросы и ответы

Можно ли закодировать в Code 39 русский текст?
Нет. В символике сорок три знака, и кириллицы среди них нет ни в каком виде — это не ограничение генератора, а состав алфавита, зафиксированный стандартом. Обойти его нечем: не существует настройки, режима или шрифта, которые добавили бы русские буквы в Code 39. Если в значении обязана быть кириллица, нужен двумерный код — QR или Data Matrix, они кодируют произвольные байты и берут UTF-8.
Нужно ли что-то регистрировать, чтобы печатать Code 39?
Нет, и ради этого его обычно и выбирают. За Code 39 не стоит ни префикс, ни национальная организация, ни ежегодное членство: номер вы назначаете сами. Обратная сторона ровно та же — вашу нумерацию никто не гарантирует уникальной, и за пределами вашего предприятия она не значит ничего. Как только код должен читать кто-то снаружи — сеть, дистрибьютор, маркетплейс, — вопрос перестаёт быть про символику и становится про номер, а это уже EAN-13 или ITF-14 с префиксом от GS1.
Нужен ли Code 39 контрольный знак?
По стандарту он необязателен, и здесь не добавляется: в таблице спецификации на этой странице в графе «Контрольная цифра» так и написано — в этой символике не используется. Проблема возникает, если принимающая система настроена его ждать: она отрежет последний знак вашего значения и прочитает остаток. Считается он на вашей стороне и укладывается в одну формулу в табличном редакторе. Каждому знаку алфавита присвоено значение по порядку: цифры 0–9 — это 0–9, латинские A–Z — 10–35, дальше минус 36, точка 37, пробел 38, доллар 39, дробная черта 40, плюс 41, процент 42. Сложите значения всех знаков строки, возьмите остаток от деления на 43 — знак с этим значением и есть контрольный. Для CODE39 сумма равна 12 + 24 + 13 + 14 + 3 + 9 = 75, остаток от деления на 43 — 32, знак со значением 32 — это W, и в поле вводится CODE39W. Поле его примет: все сорок три возможных контрольных знака входят в тот же алфавит, что и остальное.
Почему под штрихами печатаются звёздочки, а в поле их вводить нельзя?
Звёздочка в Code 39 служит знаком начала и конца символа, и кодировщик ставит её сам — поэтому в подписи под кодом CODE39 выглядит как *CODE39*. Вводить её руками не нужно и не получится: в алфавите поля звёздочки нет, и на значение *CODE39* генератор ответит, что символ «*» недопустим в позиции 1. Путаница идёт от шрифтовых решений: когда код набирают баркод-шрифтом в текстовом редакторе, звёздочки приходится печатать самому, потому что там их некому подставить.
Сколько знаков помещается в один код?
Поле принимает от 1 до 43 знаков, всё длиннее отклоняется по длине. Но упрётесь вы не в это ограничение, а в бирку: при шестнадцати модулях на знак значение из тридцати знаков вместе со старт-стопом даёт 512 модулей, и даже на стомиллиметровой этикетке узкий элемент выходит меньше 0,2 мм. Если номера растут в длину, дешевле пересмотреть схему нумерации, чем печатать этикетки большего формата.