Как создать штрих-коды CODE 39 и CODE 39 Extended в VCL

23.10.2020

CODE 39 - это штрих-код, разработанный Intermec Corporation в 1975 году, который может содержать в себе 43 символа, включая английский алфавит, цифры, пробел и некоторые символы, а именно 0123456789 ABCDEFG HIJKLMNOP QRSTUVWXYZ-.$/+%. Поскольку в CODE 39 есть поддержка букв, это делает его незаменимым в промышленных областях в таких, как автомобилестроение и электроника. Например, в Германии же он применяется для фармацевтических продуктов, но в основном используется для складирования. В России CODE 39 является стандартом и регламентируются ГОСТ 30742-2001 (ИСО/МЭК 16388—99) «Автоматическая идентификация. Кодирование штриховое. Спецификация символики Code 39 (Код 39)». 

Пример кодировки символов

Структура CODE 39

CODE 39 назван так из-за своей структуры, состоящей из столбцов и пробелов, причем 3 из 9 столбцов и пробелов являются широкими. Штрих-код выглядит следующим образом:

  • Одна буква (символ) представлена 9 барами и пробелами;
  • Звездочки (*) прикреплены к началу и концу штрих-кода. (старт / стоп символ);
  • Пробел между символами называется «межсимвольным пробелом или разрывом». Обычно ширина этого пространства равна ширине узкой полосы. (Максимальная ширина должна быть в 3 - 5,3 раза шире, чем у узкой полосы).

Межсимвольный разрыв

Межсимвольный разрыв

Эта таблица описывает спецификацию CODE 39. Числовое значение, присвоенное каждому символу (кроме start/stop), используется в алгоритме контрольной суммы.

Структура с контрольной суммой

CODE 39 иногда используется с дополнительной контрольной цифрой по модулю 43, код с контрольной цифрой выглядит как “CODE 39 mod 43”

А вот и сам алгоритм рассчёта контрольной суммы:
1. Возьмите значение (от 0 до 42) каждого символа в штрих-коде, исключая коды запуска и остановки.
2. Суммируйте значения.
3. Разделите результат на 43.
4. Остаток - это значение символа контрольной суммы, подлежащего добавлению.

Пример CODE 39

Code 39 Extended - это расширенная версия кода 39, поддерживающая набор символов ASCII. С ним вы сможете закодировать 128 символов: 0123456789 ABCDEFG HIJKLMNOP QRSTUVWXYZ !#$%&'()*+,-./:;<=>?@[\]^_` {|} abcdefg hijklmnopqrs tuvwxyz, а это 26 заглавных букв (A-Z), 26 строчных букв (a-z) и специальные символы вместе с пробелом.

Важно отметить, символы Extended Code 39 примерно в два раза длиннее стандартных символов Code 39. В соответствии с ISO 646 эти символы отображаются путем объединения двух знаков символа, первый может быть одним из четырех символов $ + % / и сопровождается одной из 26 букв. Если декодер запрограммирован с полным набором символов ASCII, то передается только эквивалент ASCII, а не комбинация знаков символа.

CODE 39 Extended также может использоваться с контрольной суммой, которая вычисляется по модулю 43, а код с контрольной цифрой выглядит как “CODE 39 EXTENDED
mod 43”.

Пример CODE 39 Extended

Наглядное сравнение CODE 39 и CODE 39 Extended

Сравним одинаковые фразы в разных баркодах. В обоих случаях в первом столбике мы не видим отличия. Но почему же нет разницы? Всё потому что символы 0123456789 ABCDEFG HIJKLMNOP QRSTUVWXYZ-.$/+% в двух штрих-кодах кодируются одинаково, но стоит заглавные буквы заменить строчными, как появляются изменения.

Пример CODE 39 и CODE 39 Extended

Повторюсь, что в CODE 39 Extended символы отображаются путем объединения двух знаков символа, первый может быть одним из четырех символов $ + % / и сопровождается одной из 26 букв.

Пример CODE 39 и CODE 39 Extended

Создание штрих-кодов в визуальном дизайнере

FastReport VCL позволяет использовать в ваших отчётах оба рассмотренных ранее типа штрих-кода. Посмотрим, как с ними работать.

В дизайнере FastReport VCL добавляем на отчёт компонент obCatBarcode и выбираем тип из предложенного списка:

 obCatBarcode

Далее мы переходим в редактор штрих-кода:

Редактор штрих-кода

Code - область для написания числового значения штрих-кода;

Type of Bar - тип штрих-кода можно изменить сразу в редакторе не добавляя на отчёт новый компонент;

Calc CheckSum- это контрольная сумма. Это свойство имеется у всех линейных штрих-кодов. Помните про “пропуск считывания”? С этим надо как-то бороться! Свойство определяет, надо ли считать контрольную сумму автоматически. Если оно отключено, контрольная сумма должна присутствовать в тексте объекта;

Zoom - задает масштабирование штрих-кода и используется только вместе со свойством "Авторазмер";

Text - включение/отключение отображения текста под штрих-кодом;

Rotation - позволяет задать поворот объекта на один из фиксированных углов – 0, 90, 180, 270 градусов.

Нажимаем на значок F(x) и попадаем в большой редактор выражений.

Подробнее ознакомиться можно самостоятельно в дизайнере FastReport VCL или в документации. Ссылка 1 и Ссылка 2

Редактор выражений


НастройкиПереходим в свойства компонента obCatBarcode.

То, что будет написано в редакторе штрих-кода в поле Code будет перенесено в поле Expression. Если Expression пустое, то отображается текст из поля Text.

Если коротко, то в Text записывается статический текст, а в Expression содержится вычисляемое выражение, в том числе значение из источника данных.

Создаём штрих-код из кода Delphi/Lazarus

CODE 39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
uses frxBarcod;
 
procedure TForm1.Button1Click(Sender: TObject);
var bc: TfrxBarcodeView;
begin
 bc := TfrxBarcodeView(frxReport1.FindObject('BarCode1'));
 {Устанавливаем тип штрихкода}
 bc.BarType := bcCode39;
 {Устанавливаем фиксированное значение штрихкода}
 bc.Text := '123456';
 {Устанавливаем вычисляемое значение штрихкода}
 //bc.Expression := '<YourDatasetName."FieldName1"> + <YourDatasetName."FieldName2">';
 {Устанавливаем, нужно ли подсчитывать контрольную сумму и добавлять её в конец штрихкода}
 bc.CalcCheckSum := False;
 {Устанавливаем масштаб, в котором будет отображаться штрихкод}
 bc.Zoom := 2;
 {Устанавливаем угол поворота штрихкода. Может принимать значения 0, 90, 180, 270}
 bc.Rotation := 0;
 {Устанавливаем, нужно ли устанавливать ширину штрихкода в зависимости от его содержимого.}
 {При значении False Zoom будет принимать такое значение, чтобы ширина штрихкода оставалась фиксированной}
 bc.AutoSize := True;
 {Устанавливаем цвет фона штрихкода}
 bc.Color := clNone;
 {Устанавливаем цвет линий штрихкода}
 bc.ColorBar := clBlack;
 {Устанавливаем, нужно ли отображать тект внизу штрихкода}
 bc.ShowText := True;
 frxReport1.ShowReport();
end;

Теперь мы можем использовать штрих-код стандарта CODE 39 в своих бизнес-приложениях (кодировать не только числовые, но и алфавитные символы), например, для вывода в этикетках (в том числе, например, в формате ZPL).

VCL Lazarus FastReport Штрихкод Delphi VCL Lazarus FastReport Штрихкод Delphi
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»