Re[3]: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 21.10.02 14:21
Оценка: 130 (14)
Здравствуйте chico97, Вы писали:

C>Короче, никто ничего не знает.


Сходи туда — не знаю куда.
А для чего им вообще захотелось штрихкоды лепить? Для понтов, что ли?
Все же попытайся найти того человека, который толкнул эту идею, и расспроси его.

Штрихкод применяют
— для автоматизации складского учета
— — по марке товара — тогда используют стандартные, напр., EAN-13 (большинство товаров уже промаркировано)
— — по другим признакам — используют любой штрихкод (как правило, ITF или Code39/Code93)
— для логистики
— — по европейским и американским стандартам — используют данные в формате EAN, на базе штрихкодов ITF, EAN-13, EAN-128
— для сопроводиловки (например, идентификация микросхем) — любой подходящий, но, как правило, Code39/Code93.
— управляющие штрихкоды (использовать сканер вместо клавиатуры, может быть, ты видел в крутых магазинах) — Code-128

C> А по каким признакам можно эти виды штрих кодов идентифицировать? Может по кол-ву цифп или еще по чему-нибудь?


EAN-13 — самый популярный торговый штрих-код — для идентификации марки товара.
 ||||||||||||||||||   12345
 ||||||||||||||||||   |||||
 ||      ||      ||   |||||
4  607006  915190  >

     это EAN-13       а это - его расширение (2 или 5 цифр)

Иногда закрывающий > не рисуют.
Американская версия — UPC-A — первая цифра отсутствует (подразумевается 0).
В этом же семействе есть другие штрих-коды, отличающиеся числом цифр (EAN-8 — 8, UPC-E — 6 или 7).
Штрихи и пробелы имеют 4 толщины (1:2:3:4)

ITF — чисто цифровой штрихкод, используется в логистике (Serial Ship Container Code -14, -18) и просто для цифровой информации.
######################    ######################    
#   ||||||||||||||   #        ||||||||||||||        ||||||||||||||
# H |||||||||||||| H #        ||||||||||||||        ||||||||||||||
#   ||||||||||||||   #        ||||||||||||||        ||||||||||||||
######################    ######################
    12345678901234            12345678901234        12345678901234

рис.1. Код в рамке        рис.2. Код в направляющих

Характерный вид рис.1 и рис.2, но необязательно.
Четное число цифр. На каждую пару цифр — 5 штрихов и 5 пробелов, плюс 4 черных штриха. Все штрихи и пробелы имеют две толщины (1:2 ... 1:3)

Codabar
Штрихи и пробелы имеют 2 толщины. Код содержит цифры, знаки $/*: и начинается и заканчивается буквами A|B|C|D.

Code-39, Code-93
Также 2 толщины. Цифры, буквы, знаки препинания. Как правило, код начинается и заканчивается знаками * или $.

EAN-128 — универсальный штрихкод для логистики. В одном штрихкоде могут содержаться несколько полей (например, EAN-код товара, код страны доставки и т.д.)
4 толщины. Характерная форма записи: (00)12345678901234(10)HELLO — (тип)значение(тип)значение.

2-мерные штрихкоды:

PDF-417 — 2-мерный штрихкод. См. винные акцизные марки Российской Федерации.
#||#|#|#|#|#||#
#|||#|##||#|||#
#||||#|#|||#||#
#||##|#|##|#||#
#||#||#|#||#||#

Вмещает около килобайта информации. Есть несколько разновидностей (микро-PDF не имеет правого бордюра).

DataMatrix
# # # # #
#....... 
#.......#
#....... 
#.......#
#########

# # # # ## # # # #
#....... #....... 
#.......##.......#
#....... #....... 
#.......##.......#
##################
# # # # ## # # # #
#....... #....... 
#.......##.......#
#....... #....... 
#.......##.......#
##################

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



В сети много ссылок на коммерческие и халявные программы генерации штрих-кодов. В том числе компоненты для Дельфи и Бейсика.

Как правило, документация по стандартам (!) является коммерческой тайной и продается за деньги. Но если поискать... то можно и найти

Для штрихкода важным является
— алгоритм валидации данных и расчета контрольной суммы
— алгоритм кодирования
— стандартные размеры
— требования к качеству (понятно, что неразборчиво напечатанный штрихкод не воспримется сканером)

Свои модули прислать не могу — это принадлежность фирмы. А вот доброе слово — пожалуйста.
Перекуём баги на фичи!
Re: Алгоритм преобразования цифр в шрих код
От: Хитрик Денис Россия RSDN
Дата: 22.10.02 17:26
Оценка: 40 (4)
Здравствуйте chico97, Вы писали:

C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.


Есть ещё сайт про штриховое кодирование http://www.sbarcode.com/
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: Расчет контрольной цифры
От: Кодт Россия  
Дата: 22.10.02 13:47
Оценка: 6 (1)
Для EAN-13 и вообще многих штрихкодов

(постепенно раскрываю тайны штрихкода EAN-13)

Условное название "взвешивание 3:1, дополнение"
char CheckDigit(char* str)
{
  int len = strlen(str);
  assert(len == 12); // для EAN-13

  int sum = 0; // контрольная сумма

  int i;
  for(i = 1; i <= len; i++)
  {
    char c = str[len-i]; // отсчет идет с конца!!!
    assert(c >= '0' && c <= '9');

    int v = с - '0';

    if(i % 2) // цифры в нечетных позициях
      v *= 3;

    sum += v;
  }

  // от полученной суммы берется дополнение по модулю 10
  sum %= 10;
  if(sum)
    sum = 10-sum;

  return '0'+sum;
}
Перекуём баги на фичи!
Re[5]: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 22.10.02 11:58
Оценка: 3 (1)
Здравствуйте chico97, Вы писали:

C>задача следующая:

C>на склад приходит оборудование в коробке (со шрих кодом). менеджеры могут продать оборудование целиком — в данном случае проблем нет. но они могут что-нибудь от туда вытащить или что-нибудь вставить. в данном случае при отправке такой коробки хорошо было бы что бы на коробке были нанесены штрих код оборудования в базовой комплектации плюс шрих коды дополнительно установленных опшенов.
C>соответственно при выписке счета должно генериться и распечатываться лейбл к этой коробке что бы затем при отгрузке на складе этти штрих коды считывались и шел рекорд в базу.
C>вообщем все довольно-таки тривиально. но нужен алгоритм для превращения цифр в бары. имеется ввиду какая цифра соответсвует какой комбинации баров (это конечно в упрощеном виде).

Давай пока абстрагируемся от способа рисования штрихкода.

Сразу сделаю одно замечание. Штрих-кодированная информация стандартизируется — не только по форме штрихкода, но и по содержанию.
Например, коды EAN-13 подлежат регистрации. Ты, наверное, знаешь, что первые 2-3 цифры идентифицируют страну производителя? Здесь отсебятины быть не должно.
Библиотечный индекс ISBN также изображается штрихкодом EAN-13 или EAN-128.

1. Что хотим написать? Код базового комплекта + коды опций. Просто множество отметок на коробке или некий единый блок? Есть ли сопроводительная информация?
2. Стандартизирована ли эта информация? Например, каждый элемент был промаркирован производителем с помощью EAN-13. Или же это внутренние коды вашей складской базы данных?
3. Есть ли требования и ограничения со стороны считывающего оборудования? В принципе, сканер — всеяден. Но данные от него идут к программе. И если на входе будет смесь из стандартизованных товарных кодов EAN-13, внутренних кодов (индексов БД) и еще чего-то, то сможет ли программа это обработать? Написанная тобой — да. А та, которая реально стоит?

К>>Штрихкод применяют

К>>- для автоматизации складского учета
К>>- — по марке товара — тогда используют стандартные, напр., EAN-13 (большинство товаров уже промаркировано)
C>скорее всего этот вариант.

Если все комплекты и опции имеют свой идентификатор EAN-13 — то все окей.

C>а ты занимался разработкой шрифтов для этих самых штрих-кодов?

Шрифтами — нет

Кстати, штрихкод EAN-13 с помощью шрифта не выведешь: там достаточно затейливое кодирование. Первая цифра определяет, какие коды будут использоваться для остальных 12.

Я предпочитаю такую цепочку:
строка (без контрольной цифры) -> строка с контрольной цифрой -> строка на "алфавите" штрихкода (внутренние индексы символов) -> зебра (строка ширин пробелов и штрихов) -> рисование штрихкода прямоугольниками.

Чуть погодя напишу тебе кодер для EAN-13.
Перекуём баги на фичи!
Алгоритм преобразования цифр в шрих код
От: chico97  
Дата: 21.10.02 12:44
Оценка:
Уважаемые,
есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.
Re: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 21.10.02 12:54
Оценка:
Здравствуйте chico97, Вы писали:

C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.


Спросил!

Какой именно штрих-код?
Industial 2 of 5, Interleaved 2 of 5 (ITF), UPC/EAN-13, UPC/EAN-8, UPC/EAN extensions, US PostCode -- и это, заметь, только цифровые.
Есть еще текстовые и даже штрихкоды для большого объема данных: PDF-417 (используется на винных акцизных марках), DataMatrix, ну и так далее.

Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.
Перекуём баги на фичи!
Re[2]: Алгоритм преобразования цифр в шрих код
От: chico97  
Дата: 21.10.02 13:00
Оценка:
Здравствуйте Кодт, Вы писали:

К>Здравствуйте chico97, Вы писали:


C>>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.


К>Спросил!


К>Какой именно штрих-код?

К>Industial 2 of 5, Interleaved 2 of 5 (ITF), UPC/EAN-13, UPC/EAN-8, UPC/EAN extensions, US PostCode -- и это, заметь, только цифровые.
К>Есть еще текстовые и даже штрихкоды для большого объема данных: PDF-417 (используется на винных акцизных марках), DataMatrix, ну и так далее.

К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.


Спасибо, счас побегу к кладовщикам и логистикам: попробую это у них уточнить. а то боссы сказали надо генерить наклейки со штрих кодами, "...а что, почему, не пойму..."
Re[2]: Алгоритм преобразования цифр в шрих код
От: chico97  
Дата: 21.10.02 13:15
Оценка:
Здравствуйте Кодт, Вы писали:

К>Здравствуйте chico97, Вы писали:


C>>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.


К>Спросил!


К>Какой именно штрих-код?

К>Industial 2 of 5, Interleaved 2 of 5 (ITF), UPC/EAN-13, UPC/EAN-8, UPC/EAN extensions, US PostCode -- и это, заметь, только цифровые.
К>Есть еще текстовые и даже штрихкоды для большого объема данных: PDF-417 (используется на винных акцизных марках), DataMatrix, ну и так далее.

К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.


Короче, никто ничего не знает. А по каким признакам можно эти виды штрих кодов идентифицировать? Может по кол-ву цифп или еще по чему-нибудь?
Re[4]: Алгоритм преобразования цифр в шрих код
От: chico97  
Дата: 22.10.02 06:16
Оценка:
Здравствуйте Кодт, Вы писали:

<Оверквотинг удалён модератором.>

Спасибо большое. буду разбираться.
Re[4]: Алгоритм преобразования цифр в шрих код
От: chico97  
Дата: 22.10.02 10:38
Оценка:
Здравствуйте Кодт, Вы писали:

К>А для чего им вообще захотелось штрихкоды лепить? Для понтов, что ли?

задача следующая:
на склад приходит оборудование в коробке (со шрих кодом). менеджеры могут продать оборудование целиком — в данном случае проблем нет. но они могут что-нибудь от туда вытащить или что-нибудь вставить. в данном случае при отправке такой коробки хорошо было бы что бы на коробке были нанесены штрих код оборудования в базовой комплектации плюс шрих коды дополнительно установленных опшенов.
соответственно при выписке счета должно генериться и распечатываться лейбл к этой коробке что бы затем при отгрузке на складе этти штрих коды считывались и шел рекорд в базу.
вообщем все довольно-таки тривиально. но нужен алгоритм для превращения цифр в бары. имеется ввиду какая цифра соответсвует какой комбинации баров (это конечно в упрощеном виде).

К>Штрихкод применяют

К>- для автоматизации складского учета
К>- — по марке товара — тогда используют стандартные, напр., EAN-13 (большинство товаров уже промаркировано)
скорее всего этот вариант.
К>В сети много ссылок на коммерческие и халявные программы генерации штрих-кодов. В том числе компоненты для Дельфи и Бейсика.

К>Как правило, документация по стандартам (!) является коммерческой тайной и продается за деньги. Но если поискать... то можно и найти


К>Для штрихкода важным является

К>- алгоритм валидации данных и расчета контрольной суммы
К>- алгоритм кодирования
К>- стандартные размеры
К>- требования к качеству (понятно, что неразборчиво напечатанный штрихкод не воспримется сканером)
а ты занимался разработкой шрифтов для этих самых штрих-кодов?
Re[6]: Алгоритм преобразования цифр в шрих код
От: chico97  
Дата: 22.10.02 13:28
Оценка:
Здравствуйте Кодт, Вы писали:

К>1. Что хотим написать? Код базового комплекта + коды опций. Просто множество отметок на коробке или некий единый блок? Есть ли сопроводительная информация?

на коробке должны быть штрих коды базового комплекта и плюс
штрих код на каждый вид опции и что бы в этом шрих коде была зашита инфа о кол-ве опций данного вида.
К>2. Стандартизирована ли эта информация? Например, каждый элемент был промаркирован производителем с помощью EAN-13. Или же это внутренние коды вашей складской базы данных?
все промаркировано производителем. но производители разные. как узнать применяют ли они один и тот же вид маркировки или разный?
К>3. Есть ли требования и ограничения со стороны считывающего оборудования? В принципе, сканер — всеяден. Но данные от него идут к программе. И если на входе будет смесь из стандартизованных товарных кодов EAN-13, внутренних кодов (индексов БД) и еще чего-то, то сможет ли программа это обработать? Написанная тобой — да. А та, которая реально стоит?
а можно ли эту прогу заменить на свою?
Re: Кодирование EAN-13
От: Кодт Россия  
Дата: 22.10.02 15:00
Оценка:
Каждая цифра в штрихкоде представляется 2 штрихами и 2 пробелами с толщиной 1..4 условных единицы — "модуля" (подробнее о габаритах я расскажу позже). Суммарная ширина зебры для одной цифры — 7 модулей.
Есть одно маленькое "но". Первая цифра не отображается, а влияет на выбор кода для оставшихся 12 цифр.

const n_separator_items = 4; // два тонких длинных штриха - в начале, середине и конце
const n_digit_items = 4;
const n_barcode_blocks = 12; // исключая первую, "мета-цифру"

const n_barcode_items = n_barcode_blocks * n_digit_items + 3 * n_separator_items - 1;

// для удобства будем пользоваться строками с 0 на конце

// b - black - штрих, w - white - пробел
#define DIGIT(b1,w1,b2,w2) { b1,w1,b2,w2, 0 }

const char* const // тонкие длинные штрихи
  separator12 = { 1,1,1,1, 0 }, // начало и середина
  separator3  = { 1,1,1,   0 }, // последний пробел не нужен!

const char* const
  ean13_subset_a[10] =
  {
    DIGIT(3,2,1,1), // 0
    DIGIT(2,2,3,1), // 1
    DIGIT(2,1,2,2), // 2
    DIGIT(1,4,1,1), // 3
    DIGIT(1,1,3,2), // 4
    DIGIT(1,2,3,1), // 5
    DIGIT(1,1,1,4), // 6
    DIGIT(1,3,1,2), // 7
    DIGIT(1,2,1,3), // 8
    DIGIT(3,1,1,2), // 9
  },
  ean13_subset_b[10] =
  {
    DIGIT(1,1,2,3), // 0
    DIGIT(1,2,2,2), // 1
    DIGIT(2,2,1,2), // 2
    DIGIT(1,1,4,1), // 3
    DIGIT(2,3,1,1), // 4
    DIGIT(1,3,1,1), // 5
    DIGIT(4,1,1,1), // 6
    DIGIT(2,1,3,1), // 7
    DIGIT(3,1,2,1), // 8
    DIGIT(2,1,1,3), // 9
  }
;
const char* const* const ean13_subsets[3] =
{ NULL, ean13_subset_a, ean13_subset_b }; // для удобства - нумерация будет с 1, поэтому [0]=NULL

#define SELECT(a,b,c,d,e,f) { a,b,c,d,e,f, 0 }
const char* const ean13_subset_selector[10]
{
  SELECT(2,2,2,1,1,1), // 0
  SELECT(2,2,1,2,1,1), // 1
  SELECT(2,2,1,1,2,1), // 2
  SELECT(2,2,1,1,1,2), // 3
  SELECT(2,1,2,2,1,1), // 4
  SELECT(2,1,1,2,2,1), // 5
  SELECT(2,1,1,1,2,2), // 6
  SELECT(2,1,2,1,2,1), // 7
  SELECT(2,1,2,1,1,2), // 8
  SELECT(2,1,1,2,1,2), // 9
};

void MakeZebraEAN13(const char* str, char* zebra) // размер zebra = n_barcode_items + 1
{
  assert(str);
  assert(strlen(str) == 13);
  assert(zebra);

  int i;

  // селектор
  assert(isdigit(str[0]));
  const char* selector = ean13_subset_selector[ str[0]-'0' ];

  // начало
  strcpy(zebra, separator12); zebra += n_separator_items;

  // первая шестерка
  for(i = 1; i < 7; i++)
  {
    assert(isdigit(str[i]));

    const char* const* subset = ean13_subsets[ selector[i-1] ];
    const char* digit = subset[ str[i]-'0' ];

    strcpy(zebra, digit); zebra += n_digit_items;
  }

  // середина
  strcpy(zebra, separator12); zebra += n_separator_items;

  // вторая шестерка
  for(i = 7; i < 13; i++)
  {
    assert(isdigit(str[i]));

    const char* const* subset = ean13_subsets[ selector[i-7] ];
    const char* digit = subset[ str[i]-'0' ];

    strcpy(zebra, digit); zebra += n_digit_items;
  }

  // конец
  strcpy(zebra, separator3);
}

Примечание 1. На самом деле ширина штрихов и пробелов не равна целому числу модулей — это делается для лучшей помехозащиты. Но на это можно болт забить (что и сделано в приведенном коде).
К сожалению, в исходной программе болт не был забит, поэтому пришлось "переводить". Если не компилится — не обессудь, поправь.

Примечание 2. У штрихкода слева и справа от "зебры" есть т.н. зоны стабилизации (обязательно должны быть белыми). Без них сканер не сможет найти границы штрихкода.
Но об этом — в следующий раз (вероятно, послезавтра).

Примечание 3. "Ножки" (длинные штрихи), правильное расположение и правильный шрифт цифр (да-да! это все нормируется) для внутреннего использования можно проигнорировать.
Т.е. выводить штрихкод можно по-простому:
|||||||||||||    ||||||||||||||||||
|||||||||||||    ||||||||||||||||||
|||||||||||||    ||      ||      ||
1234567890123   1  234567  890123  >

 по-простому        по стандарту

Все! Теперь у тебя достаточно информации, чтобы рисовать EAN-13 для внутреннего использования.

Кстати, можно коды опций делать заведомо за пределами реестра EAN — например, первые 6 цифр — нули (ну и фиг с ними, американцами).
Или начинать с 999 — тоже неиспользуемая комбинация. Сканеру-то все равно
Перекуём баги на фичи!
Re: Напутствие
От: Кодт Россия  
Дата: 22.10.02 15:33
Оценка:
Когда будешь тестировать вывод штрихкода, обязательно "потренируйся на кошках".

Возьми образец (с пивной банки ), рассчитай для него контрольную сумму, зебру, выведи и сравни с оригиналом.

Если что-то где-то не совпало, и это не твой баг — то обязательно напиши (мало ли, я напутал в листингах).

Наверное, скажу все же о размерах (самых важных).

Зоны стабилизации слева и справа — не менее 11 модулей, сверху и снизу — не менее 1 модуля.
Высота штрихов — не менее 10 модулей (это очень, очень узкая полоска), рекомендуемая — 70.
Перекуём баги на фичи!
Re[2]: Кодирование EAN-13
От: chico97  
Дата: 23.10.02 06:09
Оценка:
Здравствуйте Кодт, Вы писали:

К>Каждая цифра в штрихкоде представляется 2 штрихами и 2 пробелами с толщиной 1..4 условных единицы — "модуля" (подробнее о габаритах я расскажу позже). Суммарная ширина зебры для одной цифры — 7 модулей.

К>Есть одно маленькое "но". Первая цифра не отображается, а влияет на выбор кода для оставшихся 12 цифр.

К>
К>const n_separator_items = 4; // два тонких длинных штриха - в начале, середине и конце
К>const n_digit_items = 4;
К>const n_barcode_blocks = 12; // исключая первую, "мета-цифру"

К>const n_barcode_items = n_barcode_blocks * n_digit_items + 3 * n_separator_items - 1;

К>// для удобства будем пользоваться строками с 0 на конце

К>// b - black - штрих, w - white - пробел
К>#define DIGIT(b1,w1,b2,w2) { b1,w1,b2,w2, 0 }

К>const char* const // тонкие длинные штрихи
К>  separator12 = { 1,1,1,1, 0 }, // начало и середина
К>  separator3  = { 1,1,1,   0 }, // последний пробел не нужен!

К>const char* const
К>  ean13_subset_a[10] =
К>  {
К>    DIGIT(3,2,1,1), // 0
К>    DIGIT(2,2,3,1), // 1
К>    DIGIT(2,1,2,2), // 2
К>    DIGIT(1,4,1,1), // 3
К>    DIGIT(1,1,3,2), // 4
К>    DIGIT(1,2,3,1), // 5
К>    DIGIT(1,1,1,4), // 6
К>    DIGIT(1,3,1,2), // 7
К>    DIGIT(1,2,1,3), // 8
К>    DIGIT(3,1,1,2), // 9
К>  },
К>  ean13_subset_b[10] =
К>  {
К>    DIGIT(1,1,2,3), // 0
К>    DIGIT(1,2,2,2), // 1
К>    DIGIT(2,2,1,2), // 2
К>    DIGIT(1,1,4,1), // 3
К>    DIGIT(2,3,1,1), // 4
К>    DIGIT(1,3,1,1), // 5
К>    DIGIT(4,1,1,1), // 6
К>    DIGIT(2,1,3,1), // 7
К>    DIGIT(3,1,2,1), // 8
К>    DIGIT(2,1,1,3), // 9
К>  }
К>;
К>const char* const* const ean13_subsets[3] =
К>{ NULL, ean13_subset_a, ean13_subset_b }; // для удобства - нумерация будет с 1, поэтому [0]=NULL

К>#define SELECT(a,b,c,d,e,f) { a,b,c,d,e,f, 0 }
К>const char* const ean13_subset_selector[10]
К>{
К>  SELECT(2,2,2,1,1,1), // 0
К>  SELECT(2,2,1,2,1,1), // 1
К>  SELECT(2,2,1,1,2,1), // 2
К>  SELECT(2,2,1,1,1,2), // 3
К>  SELECT(2,1,2,2,1,1), // 4
К>  SELECT(2,1,1,2,2,1), // 5
К>  SELECT(2,1,1,1,2,2), // 6
К>  SELECT(2,1,2,1,2,1), // 7
К>  SELECT(2,1,2,1,1,2), // 8
К>  SELECT(2,1,1,2,1,2), // 9
К>};

К>void MakeZebraEAN13(const char* str, char* zebra) // размер zebra = n_barcode_items + 1
К>{
К>  assert(str);
К>  assert(strlen(str) == 13);
К>  assert(zebra);

К>  int i;

К>  // селектор
К>  assert(isdigit(str[0]));
К>  const char* selector = ean13_subset_selector[ str[0]-'0' ];

К>  // начало
К>  strcpy(zebra, separator12); zebra += n_separator_items;

К>  // первая шестерка
К>  for(i = 1; i < 7; i++)
К>  {
К>    assert(isdigit(str[i]));

К>    const char* const* subset = ean13_subsets[ selector[i-1] ];
К>    const char* digit = subset[ str[i]-'0' ];

К>    strcpy(zebra, digit); zebra += n_digit_items;
К>  }

К>  // середина
К>  strcpy(zebra, separator12); zebra += n_separator_items;

К>  // вторая шестерка
К>  for(i = 7; i < 13; i++)
К>  {
К>    assert(isdigit(str[i]));

К>    const char* const* subset = ean13_subsets[ selector[i-7] ];
К>    const char* digit = subset[ str[i]-'0' ];

К>    strcpy(zebra, digit); zebra += n_digit_items;
К>  }

К>  // конец
К>  strcpy(zebra, separator3);
К>}
К>

К>Примечание 1. На самом деле ширина штрихов и пробелов не равна целому числу модулей — это делается для лучшей помехозащиты. Но на это можно болт забить (что и сделано в приведенном коде).
К>К сожалению, в исходной программе болт не был забит, поэтому пришлось "переводить". Если не компилится — не обессудь, поправь.

К>Примечание 2. У штрихкода слева и справа от "зебры" есть т.н. зоны стабилизации (обязательно должны быть белыми). Без них сканер не сможет найти границы штрихкода.

К>Но об этом — в следующий раз (вероятно, послезавтра).

К>Примечание 3. "Ножки" (длинные штрихи), правильное расположение и правильный шрифт цифр (да-да! это все нормируется) для внутреннего использования можно проигнорировать.

К>Т.е. выводить штрихкод можно по-простому:
К>
К>|||||||||||||    ||||||||||||||||||
К>|||||||||||||    ||||||||||||||||||
К>|||||||||||||    ||      ||      ||
К>1234567890123   1  234567  890123  >

К> по-простому        по стандарту
К>

К>Все! Теперь у тебя достаточно информации, чтобы рисовать EAN-13 для внутреннего использования.

К>Кстати, можно коды опций делать заведомо за пределами реестра EAN — например, первые 6 цифр — нули (ну и фиг с ними, американцами).

К>Или начинать с 999 — тоже неиспользуемая комбинация. Сканеру-то все равно

Спасибо за пояснения и пример кода. правда я на С++ никогда не писал, но думаю разберусь (перешел с VB на .NET Framework) .
Re[2]: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 24.10.02 08:17
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Есть ещё сайт про штриховое кодирование http://www.sbarcode.com/


Где ты был 5 лет назад!!! УУУУУУ!
Перекуём баги на фичи!
Re[3]: Алгоритм преобразования цифр в шрих код
От: Хитрик Денис Россия RSDN
Дата: 24.10.02 08:22
Оценка:
Здравствуйте Кодт, Вы писали:

ХД>>Есть ещё сайт про штриховое кодирование http://www.sbarcode.com/

К>Где ты был 5 лет назад!!! УУУУУУ!

5 лет назад я учился в школе!
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[2]: Кодирование EAN-13
От: Кодт Россия  
Дата: 24.10.02 08:28
Оценка:
Здравствуйте Кодт, Вы писали:

К>Каждая цифра в штрихкоде представляется 2 штрихами и 2 пробелами с толщиной 1..4 условных единицы — "модуля" (подробнее о габаритах я расскажу позже). Суммарная ширина зебры для одной цифры — 7 модулей.

К>Есть одно маленькое "но". Первая цифра не отображается, а влияет на выбор кода для оставшихся 12 цифр.

Конечно же, по пьяни напутал.
Обязательно смотри на ссылку Дениса Хитрика: http://www.sbarcode.com/encoding/ean13.shtml

К>
К>const n_separator1_items = 3, n_separator2_items = 5, n_separator3_items = 3;
К>const n_digit_items = 4;
К>const n_barcode_blocks = 12; // исключая первую, "мета-цифру"

К>const n_barcode_items = n_barcode_blocks * n_digit_items
                          + n_separator1_items + n_separator2_items + n_separator3_items;

К>// для удобства будем пользоваться строками с 0 на конце

К>// b - black - штрих, w - white - пробел
К>#define DIGIT(b1,w1,b2,w2) { b1,w1,b2,w2, 0 }

К>const char* const // тонкие длинные штрихи
К>  separator1 = { 1,1,1,   0 }, // начало
    separator2 = { 1,1,1,1,1, 0 }, // середина
К>  separator3 = { 1,1,1,     0 }, // конец

К>const char* const
К>  ean13_subset_a[10] =
К>  {
К>    DIGIT(3,2,1,1), // 0
К>    DIGIT(2,2,3,1), // 1
К>    DIGIT(2,1,2,2), // 2
К>    DIGIT(1,4,1,1), // 3
К>    DIGIT(1,1,3,2), // 4
К>    DIGIT(1,2,3,1), // 5
К>    DIGIT(1,1,1,4), // 6
К>    DIGIT(1,3,1,2), // 7
К>    DIGIT(1,2,1,3), // 8
К>    DIGIT(3,1,1,2), // 9
К>  },
К>  ean13_subset_b[10] =
К>  {
К>    DIGIT(1,1,2,3), // 0
К>    DIGIT(1,2,2,2), // 1
К>    DIGIT(2,2,1,2), // 2
К>    DIGIT(1,1,4,1), // 3
К>    DIGIT(2,3,1,1), // 4
К>    DIGIT(1,3,1,1), // 5
К>    DIGIT(4,1,1,1), // 6
К>    DIGIT(2,1,3,1), // 7
К>    DIGIT(3,1,2,1), // 8
К>    DIGIT(2,1,1,3), // 9
К>  }
К>;
К>const char* const* const ean13_subsets[3] =
К>{ NULL, ean13_subset_a, ean13_subset_b }; // для удобства - нумерация будет с 1, поэтому [0]=NULL

К>#define SELECT(a,b,c,d,e,f) { a,b,c,d,e,f, 0 }
К>const char* const ean13_subset_selector[10]
К>{
К>  SELECT(2,2,2,1,1,1), // 0
К>  SELECT(2,2,1,2,1,1), // 1
К>  SELECT(2,2,1,1,2,1), // 2
К>  SELECT(2,2,1,1,1,2), // 3
К>  SELECT(2,1,2,2,1,1), // 4
К>  SELECT(2,1,1,2,2,1), // 5
К>  SELECT(2,1,1,1,2,2), // 6
К>  SELECT(2,1,2,1,2,1), // 7
К>  SELECT(2,1,2,1,1,2), // 8
К>  SELECT(2,1,1,2,1,2), // 9
К>};

К>void MakeZebraEAN13(const char* str, char* zebra) // размер zebra = n_barcode_items + 1
К>{
К>  assert(str);
К>  assert(strlen(str) == 13);
К>  assert(zebra);

К>  int i;

К>  // селектор
К>  assert(isdigit(str[0]));
К>  const char* selector = ean13_subset_selector[ str[0]-'0' ];

К>  // начало
К>  strcpy(zebra, separator1); zebra += n_separator1_items;

К>  // первая шестерка
К>  for(i = 1; i < 7; i++)
К>  {
К>    assert(isdigit(str[i]));

К>    const char* const* subset = ean13_subsets[ selector[i-1] ];
К>    const char* digit = subset[ str[i]-'0' ];

К>    strcpy(zebra, digit); zebra += n_digit_items;
К>  }

К>  // середина
К>  strcpy(zebra, separator2); zebra += n_separator2_items;

    const char* const* subset = ean13_subsets[ 0 ];

К>  // вторая шестерка
К>  for(i = 7; i < 13; i++)
К>  {
К>    assert(isdigit(str[i]));

К>    const char* digit = subset[ str[i]-'0' ];

К>    strcpy(zebra, digit); zebra += n_digit_items;
К>  }

К>  // конец
К>  strcpy(zebra, separator3);
К>}
К>


Структура строки "zebra" :
ширина-штриха ширина-пробела ширина-штриха ширина-пробела ..... ширина-штриха
Перекуём баги на фичи!
Re[7]: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 24.10.02 11:18
Оценка:
Здравствуйте chico97, Вы писали:

C>Здравствуйте Кодт, Вы писали:


К>>1. Что хотим написать? Код базового комплекта + коды опций. Просто множество отметок на коробке или некий единый блок? Есть ли сопроводительная информация?

C>на коробке должны быть штрих коды базового комплекта и плюс
C>штрих код на каждый вид опции и что бы в этом шрих коде была зашита инфа о кол-ве опций данного вида.

Именно о количестве опций данного вида?
Тогда напрашивается стандарт EAN-128 на базе штрихкодов EAN-13, Code-128, ITF.

К>>2. Стандартизирована ли эта информация? Например, каждый элемент был промаркирован производителем с помощью EAN-13. Или же это внутренние коды вашей складской базы данных?

C>все промаркировано производителем. но производители разные. как узнать применяют ли они один и тот же вид маркировки или разный?

Если они придерживаются стандарта EAN, то спектр проблем уменьшается.

К>>3. Есть ли требования и ограничения со стороны считывающего оборудования? В принципе, сканер — всеяден. Но данные от него идут к программе. И если на входе будет смесь из стандартизованных товарных кодов EAN-13, внутренних кодов (индексов БД) и еще чего-то, то сможет ли программа это обработать? Написанная тобой — да. А та, которая реально стоит?

C>а можно ли эту прогу заменить на свою?

А это зависит от того, в чьем ведении рабочее место приемщика.


Для идентификации продукта EAN/UCC рекомендует использовать EAN-13, ITF 14 цифр, EAN-128 с AI (application ID) (01).
Для указания количества — EAN-128 с AI (30).
Для идентификации компонента — AI (02) или (8006).
(www.ean.ru/sscc/sscc.htm)

Предположим для простоты, что базовые комплекты и штучные опции (которые по 1 на комплект) кодируются EAN-13 | ITF-14 (там добавляется 0 спереди).
Если опция присутствует в количестве N штук, то либо лепить N штрихкодов, либо EAN-128 с данными (01)идентификатор(30)количество

EAN-128 кодируется с помощью штрихкода Code-128:
F 02 0ppppppppppppp F 30 nn..n
     --------------      -----
         14 цифр         2..8 цифр

где F — спецсимвол "FNC1", p...p — код продукта EAN-13 (включая контрольную цифру), n..n — количество (лучше, если количество цифр будет четным).

Сканер будет считывать 13, 14 цифр либо пачку из 20..26 цифр с разделителем.

Для завершения ввода серии штрихкодов можно напечатать какой-нибудь маленький штрихкод без особого смысла, например AI (99) — произвольный текст.

Итого,
на коробке будут
EAN-13 основного комплекта,
EAN-13 | EAN-128 опций — (02)0ppppppppppppp(30)nn
EAN-128 завершения — (99)
Перекуём баги на фичи!
Re[2]: Алгоритм преобразования цифр в шрих код
От: Dima2  
Дата: 28.10.02 07:19
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Есть ещё сайт про штриховое кодирование http://www.sbarcode.com/


Спасибо, что хоть один человек вспомнил
Re: Алгоритм преобразования цифр в шрих код
От: Аноним  
Дата: 13.11.03 11:55
Оценка:
Здравствуйте, chico97, Вы писали:

C>Уважаемые,

C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.

А мине нуна нормально работающая компонента...главное чтобы с EAN 128 нормально выводило...а то куды ни кинься везде таньга нужна...

Да вот еще вопросик...код еан128...цыферьки его 9785272000262...а блип компоненты все почему-то теряют последнюю двойку, хоть тресни не пойму куда...
Re: Алгоритм преобразования цифр в шрих код
От: HeaveN Россия  
Дата: 13.11.03 20:41
Оценка:
Здравствуйте, chico97, Вы писали:

C>Уважаемые,

C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.

Здесь, а также здесь, здесь, а вообще многое зависит от того, какой код нужен их много... Надо только поискать
[RSDN@Home 1.1.1412.41961]
Нет такого закона, что человеку летать нельзя...
Re[2]: Расчет контрольной цифры
От: Shedow  
Дата: 17.01.06 16:48
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Для EAN-13 и вообще многих штрихкодов


Сорри, а алгоритм расчёта контр. суммы для Code128 можна гляднуть?
Re[3]: Расчет контрольной цифры
От: Кодт Россия  
Дата: 18.01.06 09:50
Оценка:
Здравствуйте, Shedow, Вы писали:

S>Сорри, а алгоритм расчёта контр. суммы для Code128 можна гляднуть?


c[k]*k mod 103, где c[1..] — последовательность кодов (не исходное сообщение, а уже закодированное), включая стартовый символ.
Перекуём баги на фичи!
Re[4]: Расчет контрольной цифры
От: Shedow  
Дата: 19.01.06 08:22
Оценка:
Здравствуйте, Кодт, Вы писали:
К>c[k]*k mod 103, где c[1..] — последовательность кодов (не исходное сообщение, а уже закодированное), включая стартовый символ.

Сенкс за ответ. Пробежался тут по указаным ссылочкам и нашол интересную статейку (http://www.itsolutions.ru/3_91.htm).
оказывается можно обойтись и без контрольной суммы , правда при спользовании BARCODE 3_9.
Re[5]: Расчет контрольной цифры
От: Кодт Россия  
Дата: 19.01.06 08:58
Оценка:
Здравствуйте, Shedow, Вы писали:

S>Сенкс за ответ. Пробежался тут по указаным ссылочкам и нашол интересную статейку (http://www.itsolutions.ru/3_91.htm).

S>оказывается можно обойтись и без контрольной суммы , правда при спользовании BARCODE 3_9.

Ты уж определись, каким штрихкодом хочешь пользоваться. А то спросил про Code128, и вдруг перепрыгнул на 39.

В некоторых из них контрольная сумма — приятный бонус или относится к содержимому.
Например, код GTIN (global trade identity number), который можно записывать с помощью EAN13, ITF, EAN128. Причём в EAN128 будут две контрольные суммы — одна в поле GTIN, другая у штрихкода-носителя Code128.

В других же контрольная сумма (а то и массив кодов коррекции) относится к "низкому уровню". В том числе, Code128.
С неверной контрольной суммой он просто не прочтётся.
Перекуём баги на фичи!
Re[6]: Расчет контрольной цифры
От: Shedow  
Дата: 19.01.06 10:33
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Ты уж определись, каким штрихкодом хочешь пользоваться. А то спросил про Code128, и вдруг перепрыгнул на 39.

К>В некоторых из них контрольная сумма — приятный бонус или относится к содержимому.

К>Например, код GTIN (global trade identity number), который можно записывать с помощью EAN13, ITF, EAN128. Причём в EAN128 будут две контрольные суммы — одна в поле GTIN, другая у штрихкода-носителя Code128.

К>В других же контрольная сумма (а то и массив кодов коррекции) относится к "низкому уровню". В том числе, Code128.

К>С неверной контрольной суммой он просто не прочтётся.

Приходится определятся по ходу. По поводу типа кода ограничений не ставилось по задаче.
А тут есть возможность обойтись малой кровью, т.е. без расчёта контрольной суммы.
Re[2]: Алгоритм преобразования цифр в шрих код
От: Olegator  
Дата: 20.01.06 00:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.


Эксперт, говоришь?

Последнее время (а точнее, после прочтения очередной бесполезной статьи в Хацкере) меня конкретно занимает тема взлома штрих-кода на железнодорожных билетах. Без всякого злого умысла, разумеется . Чисто proof-of-concept — напечатать на принтере билет, на который турникет даст зелёный свет и забыть всё это как страшный сон.

http://barcodes.narod.ru/ видел. Там никаких конкретных результатов не добились. Пока мои достижения — полный карман использованных билетиков (Ярославское направление).

Билеты эти — с двустрочным штрих-кодом. Утверждают, что кодировка — Interleaved 2 of 5. Фишка в том, что данные, на основании которых турникет принимает решение пускать/не пускать (дата, станция и т. д.), закодированы какой-то хитрой хэш-функцией. Помимо того, на этом barcodes.narod.ru говорят, что есть какие-то проблемы со считыванием второй строки.

Ну что скажешь? Знаешь что-нибудь по этой теме?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Алгоритм преобразования цифр в шрих код
От: v23ent  
Дата: 28.10.08 20:21
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.


Не могли бы вы помочь с алгоритмами преобразования символов в изображение на штрих-коде?
Мне нужно делать один код в DataMatrix, а второй в code128.
Цель: хочу написать на php скрипт который платежки почты России будет генерить.
Если поможете советом или ссылкой..буду очень признателен.
Re[3]: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 29.10.08 14:04
Оценка:
Здравствуйте, v23ent, Вы писали:

V>Не могли бы вы помочь с алгоритмами преобразования символов в изображение на штрих-коде?

V>Мне нужно делать один код в DataMatrix, а второй в code128.
V>Цель: хочу написать на php скрипт который платежки почты России будет генерить.
V>Если поможете советом или ссылкой..буду очень признателен.

google: "datamatrix php", "code128 php", "ean128 php"
Вроде бы там какие-то исходники чуть не по первой ссылке предлагаются.
Посмотри, что подойдёт.

Про платёжки Почты сказать ничего не могу — в руках не держал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[4]: Алгоритм преобразования цифр в шрих код
От: v23ent  
Дата: 30.10.08 21:12
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, v23ent, Вы писали:


V>>Не могли бы вы помочь с алгоритмами преобразования символов в изображение на штрих-коде?

V>>Мне нужно делать один код в DataMatrix, а второй в code128.
V>>Цель: хочу написать на php скрипт который платежки почты России будет генерить.
V>>Если поможете советом или ссылкой..буду очень признателен.

К>google: "datamatrix php", "code128 php", "ean128 php"

К>Вроде бы там какие-то исходники чуть не по первой ссылке предлагаются.
К>Посмотри, что подойдёт.

К>Про платёжки Почты сказать ничего не могу — в руках не держал.


самый затык у меня с datamatrix. Для php нахожу библиотеки только платные...ничего бесплатного найти не могу...я в принципе готов сам написать, но не знаю как datamatrix перекодирует сообщение в квадратики на картинке... собственно говоря об этом у Вас и спрашивал)
Находил библиотеки для других языков...может можно это как-то реализовать при помощи cgi на делфи или си(любом) ?
я просто в веб программинге начинающий.
Re[5]: Алгоритм преобразования цифр в шрих код
От: Константин Россия  
Дата: 31.10.08 01:01
Оценка:
Здравствуйте, v23ent, Вы писали:

V>самый затык у меня с datamatrix. Для php нахожу библиотеки только платные...ничего бесплатного найти не могу...я в принципе готов сам написать, но не знаю как datamatrix перекодирует сообщение в квадратики на картинке... собственно говоря об этом у Вас и спрашивал)


ISO/IEC 16022:2006
Цена: CHF 216,00

ISO/IEC 16022:2006 defines the requirements for the symbology known as Data Matrix. It specifies the Data Matrix symbology characteristics, data character encodation, symbol formats, dimensions and print quality requirements, error correction rules, decoding algorithm, and user-selectable application parameters.

It applies to all Data Matrix symbols produced by any printing or marking technology.

Data Matrix is a two-dimensional matrix symbology which is made up of nominally square modules arranged within a perimeter finder pattern. Though primarily shown and described in ISO/IEC 16022:2006 as a dark symbol on light background, Data Matrix symbols can also be printed to appear as light on dark.

Manufacturers of bar code equipment and users of the technology require publicly available standard symbology specifications to which they can refer when developing equipment and application standards. The publication of standardized symbology specifications is designed to achieve this.

Re[5]: Алгоритм преобразования цифр в шрих код
От: Кодт Россия  
Дата: 31.10.08 10:19
Оценка:
Здравствуйте, v23ent, Вы писали:

V>самый затык у меня с datamatrix. Для php нахожу библиотеки только платные...ничего бесплатного найти не могу...я в принципе готов сам написать, но не знаю как datamatrix перекодирует сообщение в квадратики на картинке... собственно говоря об этом у Вас и спрашивал)

V>Находил библиотеки для других языков...может можно это как-то реализовать при помощи cgi на делфи или си(любом) ?
V>я просто в веб программинге начинающий.

У датаматрикса достаточно навороченный алгоритм кодирования. Там и сжатие, и коррекция ошибок всякая.
Поэтому без стандарта под рукой делать нечего.

А стандарт платный. На предыдущей работе, где я занимался штрихкодами, мы его официально покупали, а потом ещё брали напрокат сканер, чтобы отлаживать.
Поэтому я бы на твоём месте десять раз подумал, да и выбил бы бюджет на покупку стороннего компонента, чем самому трахаться.
В моём случае выбора не было — писалось под экзотическую платформу.

Впрочем, если ты разживёшься свободным кодом на си — то можешь хоть cgi забабахать, хоть модуль к php (если хостинг позволяет), хоть перепереть на php и задействовать его графические модули.

Полноценный cgi, наверно, не нужен. Пусть всеми протокольными делами занимается скрипт на php, и подвёрстывает бинарный поток данных от генератора картинки на си.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re: Алгоритм преобразования цифр в шрих код
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 07.11.08 14:29
Оценка:
Здравствуйте, chico97, Вы писали:

Для разных кодов есть шрифты
Куча для Еан13
EanBwrP36Tt,EanGnivc итд
Code39 шрифт
C39HrP48DlTt итд

Они отображаю не оригинальный текст а измененный для этого существуют преобразователи
типа Code39Generate EAN13Generate
и солнце б утром не вставало, когда бы не было меня
Re[2]: Алгоритм преобразования цифр в шрих код
От: Аноним  
Дата: 01.12.08 10:11
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте chico97, Вы писали:


C>>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.


К>Спросил!


К>Какой именно штрих-код?

К>Industial 2 of 5, Interleaved 2 of 5 (ITF), UPC/EAN-13, UPC/EAN-8, UPC/EAN extensions, US PostCode -- и это, заметь, только цифровые.
К>Есть еще текстовые и даже штрихкоды для большого объема данных: PDF-417 (используется на винных акцизных марках), DataMatrix, ну и так далее.

К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.


меня интересует штрих-код Interleaved 2 of 5, к сожалению алгоритм его генерации вы не привели.
Есть ли у Вас информация по этому типу штрих-кодов?
Re[3]: Алгоритм преобразования цифр в шрих код
От: Privalov  
Дата: 01.12.08 11:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>меня интересует штрих-код Interleaved 2 of 5, к сожалению алгоритм его генерации вы не привели.

А>Есть ли у Вас информация по этому типу штрих-кодов?

Посмотри здесь.
Re[2]: Алгоритм преобразования цифр в шрих код
От: Аноним  
Дата: 15.02.09 10:55
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, chico97, Вы писали:


S>Для разных кодов есть шрифты

S>Куча для Еан13
S>EanBwrP36Tt,EanGnivc итд
S>Code39 шрифт
S> C39HrP48DlTt итд

S>Они отображаю не оригинальный текст а измененный для этого существуют преобразователи

S>типа Code39Generate EAN13Generate

Проект с открытым исходным кодом:

With iec16022 you can produce 2d barcodes. Also known as Data Matrix. These
barcodes are defined in ISO/IEC 16022.
Website: http://www.datenfreihafen.org/projects/iec16022.html
Re: Алгоритм преобразования цифр в шрих код
От: IAF  
Дата: 15.02.09 21:48
Оценка:
Здравствуйте, chico97, Вы писали:

C>Уважаемые,

C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.

Поищи barcode на codeproject.com.
Там есть и на C# и на C++ была, помнится, целая серия статей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.