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

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 столбцов и пробелов являются широкими. Штрих-код выглядит следующим образом:

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

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

Эта таблица описывает спецификацию 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).