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

11.11.2020

Немного теории о штрих-кодах

Сложно представить нашу жизнь без штрих-кодов особенно сейчас, когда мы их встречаем на каждом шагу. Идём в кинотеатр и ваш билет будет содержать этот “чёрно-белый рисунок из линий”, заходим в супермаркет и на каждом товаре будет информация о нём в виде штрих-кода. Можно сейчас только вообразить какие бы были очереди, если бы кассир вводил идентификаторы товаров вручную, а не с помощью сканера. К тому же, велик риск ошибиться при вводе последовательности цифр. Сегодня же мы рассмотрим малую часть из всевозможных баркодов.

ITF (Interleaved Two of Five) или же штрих-код “2 из 5 чередующихся”  - это двухполосный числовой код, по-другому код высокой плотности, который может кодировать только пары чисел (штрих-код должен иметь чётное число цифр!). Каждый такой штрих-код кодирует нечётную цифру темной линией и чётную цифру - пробелом между ними. Чтобы закодировать нечётное число цифр, вы должны дополнить самую левую (старшую) цифру нулем.

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

Если коротко, то:
- Можно кодировать только числа;
- Длина переменная, но должна иметь четное число цифр;
- Контрольная сумма не обязательна.

Поскольку ITF является штрих-кодом с очень высокой плотностью данных, то он имеет следующие свойства:

  • Размер метки может быть меньше, чем у других кодов с такими же цифрами. Эффективнее будет печатать штрих-коды небольшого размера.
  • Больше данных может содержаться по сравнению с другими кодами, если размер этикетки такой же. (Количество цифр можно увеличить.)
  • Есть возможность использовать более широкую полосу, если размер этикетки и количество цифр совпадают. Раз ширина полосы больше, то считыватель штрих-кода легче считает данные даже с большого расстояния.

Сравнив длину кода на двоичном уровне с CODE 39 и Codabar, можно заметить особенность ITF, а именно его очевидно маленькую длину.

Сравниваем длину IFP c CODE 39 и Codabar

Хоть у ITF есть много преимуществ, он также имеет недостаток, заключающийся в возможном «пропуске чтения» из-за его структуры. Пропуск считывания означает, что
штрих-код, представляющий «3852», может неправильно считаться как «38» с пропуском некоторых цифр.

Недостаток ITF/ Lack of ITF

Как ITF-14, так и GTIN-14 создаются с использованием штрих-кода 2 из 5 с чередованием. Этот штрих-код используется на транспортных контейнерах и основан на коде UPC. Обычно interleaved печатают на гофрокартонных коробках, в которых содержатся товары для доставки и имеет он вот такую структуру:

Структура interleaved

Industrial был разработан Identicon Corp. и Computer Identics Corp. в 1970 году и активно использовался в промышленных приложениях, однако в настоящее время он не используется (за исключением некоторых приложений логистики). Индустриальный «2 из 5» имеет следующий вид и использует 5 полос для представления одного знака. Поскольку этот код назначает данные только столбцам, а не пробелам, то он имеет очень низкую плотность данных.

Структура industrial

Matrix 2 из 5 является более плотным членом семейства символов кода 2 из 5, который был впервые разработан в 1968 году. В основном его использовали для сортировки на складе и для фото отделки. Имя "2 из 5" происходит от того, что из пяти элементов (баров и пробелов), которые используются для кодирования каждого символа, два являются широкими, а три-узкими.

Структура matrix

Тонкая настройка штрих-кода в Delphi и Lazarus для печати

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

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

FastReport VCL

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

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

Code - область для написания числового значения штрих-кода;
Type of Bar - тип штрих-кода можно изменить сразу в редакторе не добавляя на отчёт новый компонент obCatBarcode;
CalcCheckSum- это контрольная сумма. Это свойство имеется у всех линейных штрих-кодов. Помните про “пропуск считывания”? С этим надо как-то бороться! Свойство определяет, надо ли считать контрольную сумму автоматически. Если оно отключено, контрольная сумма должна присутствовать в тексте объекта.
Zoom - задает масштабирование штрих-кода и используется только вместе со свойством "Авторазмер";
Text - это текст под штрих-кодом.
Rotation - позволяет задать поворот объекта на один из фиксированных углов – 0, 90, 180, 270 градусов.

Пример кода штриховой маркировки ITF

Проверяем корректность сгенерированного штрих-кода (благо фотоаппарат и программа для сканирования штрихкодов сейчас доступны во всех современных смартфонах).

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

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
uses frxBarcod;
procedure TForm1.Button1Click(Sender: TObject);
var bc: TfrxBarcodeView;
begin
bc := TfrxBarcodeView(frxReport1.FindObject('BarCode1'));
{Устанавливаем тип штрихкода}
bc.BarType := bcCode_2_5_interleaved;
{Устанавливаем фиксированное значение штрихкода}
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;
{Устанавливаем, нужно ли отображать текcт внизу штрихкода}
bc.ShowText := True;
frxReport1.ShowReport();
end;

Теперь мы знаем немного больше о ITF штрих-кодах и можем использовать их для своих отчётов-этикеток-ценников и вообще всего.

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 ООО «Быстрые отчеты»