Сканер штрих-коду не читає мої штрих-коди

Сканер штрих-коду не читає мої штрих-коди ..

Перечитати інфу по коду. Помилка в генерації / друку коду.

Яка система кодування? Підозрюю, що EAN-13.
Так там остання цифра - контрольна, розраховується по спец. алгоритму (напам'ять не пам'ятаю, але в мережі навалом описів).
Так що під езерскую інфу залишається тільки 12 цифр.

Так в генерації ніяк не може бути помилки, це все робить FastReport. Тобто друкую послідовність чисел як на стандартному коді - 4600732134392 і друкую через FastReport, то все розпізнається сканером без проблем. Делее, друкую свій код - 1000000000095. на штриху зображено як треба начебто, а ось в сканер не входить все. Я так розумію, якщо я генеруючи свій код, то свій код повинен складатися з 12 символів, а 13й - контрольний, правило вичитав в интеренете:

починаючи з початку (зліва) сума непарних цифр (СН) (Первогов третьої і т.д)
плюс сума парних (СЧ) множення на три.
контрольна сума - добавка, щоб ділилося на 10-ть.
9 - ((СН + СЧ * 3-1)% 10);

Може є більш точне пояснення у кого небудь, що то до кінця ідею # XA0; розібрати не можу.


> Що то до кінця ідею # XA0; розібрати не можу.

4 6 0 0 7 3 2 1 3 4 3 9 2

СН = 4 + 0 + 7 + 2 + 3 + 3 = 19
СЧ = 6 + 0 + 3 + 1 + 4 + 9 = 23
9 - (19 + 23 * 3 - 1) mod 10 = 2

Спробуйте замість EAN-13 використовувати Code128 або како-небудь інший тип, який підтримує змінну кількість цифр.
EAN-13 напевно все-таки не призначений для зберігання в ньому будь-якої інформації по товару.


> Генеруючи по ньому код в звіті, і. сканер не розпізнає
> код

Сканер зможе розпізнати код тільки в разі правильного підрахунку контрольного розряду.


> Починаючи з початку (зліва) сума непарних цифр (СН) (Первогов
> Третьої і т.д)
> Плюс сума парних (СЧ) множення на три.
> Контрольна сума - добавка, щоб ділилося на 10-ть.
> 9 - ((СН + СЧ * 3-1)% 10);

Неправильне правило. Підрахунок ведеться не зліва, а справа. Спочатку підсумовуються парні числа, починаючи з другого, потім непарні, починаючи з 3-го.


> EAN-13 напевно все-таки не призначений для зберігання в ньому
> Всякої інформації по товару

Якщо "всяка інфа" - це тільки вага, то призначений. Ваги з етикеточний принтерами якраз EAN-13 і використовують.


> Підрахунок ведеться не зліва, а справа. спочатку підсумовуються
> Парні числа, починаючи з другого, потім непарні, починаючи
> З 3-го.

Що совою про пень, що пнем по сові;)

> Що совою про пень, що пнем по сові;)

Ні, різниця все ж таки є. Один і той самий алгоритм розрахунку КС використовується для різних типів штрих-кодів з різною довжиною коду, так що ведення підрахунку справа наліво універсальніше.

працюючий код, неписьменний звичайно, але без проблем читається сканером.


procedure TBARCODE.CRCEAN13;
var CRC1, CRC2: integer;
begin
// Обнуляємо
# XA0; fCRC: = "";
// складаємо числа на парних місцях
# XA0; CRC1: = StrToInt (fData [2]);
# XA0; CRC1: = CRC1 + StrToInt (fData [4]);
# XA0; CRC1: = CRC1 + StrToInt (fData [6]);
# XA0; CRC1: = CRC1 + StrToInt (fData [8]);
# XA0; CRC1: = CRC1 + StrToInt (fData [10]);
# XA0; CRC1: = CRC1 + StrToInt (fData [12]);
// отримане множимо на 3
CRC1: = CRC1 * 3;
// складаємо числа на непарних місцях
# XA0; CRC2: = StrToInt (fData [1]);
# XA0; CRC2: = CRC2 + StrToInt (fData [3]);
# XA0; CRC2: = CRC2 + StrToInt (fData [5]);
# XA0; CRC2: = CRC2 + StrToInt (fData [7]);
# XA0; CRC2: = CRC2 + StrToInt (fData [9]);
# XA0; CRC2: = CRC2 + StrToInt (fData [11]);
// Складаємо цифри відкидаємо десятки
# XA0; fCRC: = inttostr (CRC1 + CRC2);
# XA0; fCRC: = fCRC [length (fCRC)];
// Віднімаємо з 10
if fCRC<>"0" then fCRC: = inttostr (10-strtoint (fCRC));


> Хотів теж пристосувати під своє завдання по виписці товару.

а готові компоненти не пробували юзати? є і безкоштовні