Уважаемые,
есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.
Здравствуйте 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, ну и так далее.
Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.
Здравствуйте Кодт, Вы писали:
К>Здравствуйте 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, ну и так далее.
К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.
Спасибо, счас побегу к кладовщикам и логистикам: попробую это у них уточнить. а то боссы сказали надо генерить наклейки со штрих кодами, "...а что, почему, не пойму..."
Здравствуйте Кодт, Вы писали:
К>Здравствуйте 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, ну и так далее.
К>Я — эксперт по штрих-кодам. Можешь спрашивать. Но сначала уточни — что у тебя в тех.задании.
Короче, никто ничего не знает. А по каким признакам можно эти виды штрих кодов идентифицировать? Может по кол-ву цифп или еще по чему-нибудь?
Здравствуйте 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-мерный штрихкод. См. винные акцизные марки Российской Федерации.
Прямоугольник с такой рамочкой (иногда состыковывают несколько таких блоков).
В сети много ссылок на коммерческие и халявные программы генерации штрих-кодов. В том числе компоненты для Дельфи и Бейсика.
Как правило, документация по стандартам (!) является коммерческой тайной и продается за деньги. Но если поискать... то можно и найти
Для штрихкода важным является
— алгоритм валидации данных и расчета контрольной суммы
— алгоритм кодирования
— стандартные размеры
— требования к качеству (понятно, что неразборчиво напечатанный штрихкод не воспримется сканером)
Свои модули прислать не могу — это принадлежность фирмы. А вот доброе слово — пожалуйста.
Здравствуйте Кодт, Вы писали:
К>А для чего им вообще захотелось штрихкоды лепить? Для понтов, что ли?
задача следующая:
на склад приходит оборудование в коробке (со шрих кодом). менеджеры могут продать оборудование целиком — в данном случае проблем нет. но они могут что-нибудь от туда вытащить или что-нибудь вставить. в данном случае при отправке такой коробки хорошо было бы что бы на коробке были нанесены штрих код оборудования в базовой комплектации плюс шрих коды дополнительно установленных опшенов.
соответственно при выписке счета должно генериться и распечатываться лейбл к этой коробке что бы затем при отгрузке на складе этти штрих коды считывались и шел рекорд в базу.
вообщем все довольно-таки тривиально. но нужен алгоритм для превращения цифр в бары. имеется ввиду какая цифра соответсвует какой комбинации баров (это конечно в упрощеном виде).
К>Штрихкод применяют К>- для автоматизации складского учета К>- — по марке товара — тогда используют стандартные, напр., EAN-13 (большинство товаров уже промаркировано)
скорее всего этот вариант. К>В сети много ссылок на коммерческие и халявные программы генерации штрих-кодов. В том числе компоненты для Дельфи и Бейсика.
К>Как правило, документация по стандартам (!) является коммерческой тайной и продается за деньги. Но если поискать... то можно и найти
К>Для штрихкода важным является К>- алгоритм валидации данных и расчета контрольной суммы К>- алгоритм кодирования К>- стандартные размеры К>- требования к качеству (понятно, что неразборчиво напечатанный штрихкод не воспримется сканером)
а ты занимался разработкой шрифтов для этих самых штрих-кодов?
Здравствуйте 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.
Я предпочитаю такую цепочку:
строка (без контрольной цифры) -> строка с контрольной цифрой -> строка на "алфавите" штрихкода (внутренние индексы символов) -> зебра (строка ширин пробелов и штрихов) -> рисование штрихкода прямоугольниками.
Здравствуйте Кодт, Вы писали:
К>1. Что хотим написать? Код базового комплекта + коды опций. Просто множество отметок на коробке или некий единый блок? Есть ли сопроводительная информация?
на коробке должны быть штрих коды базового комплекта и плюс
штрих код на каждый вид опции и что бы в этом шрих коде была зашита инфа о кол-ве опций данного вида. К>2. Стандартизирована ли эта информация? Например, каждый элемент был промаркирован производителем с помощью EAN-13. Или же это внутренние коды вашей складской базы данных?
все промаркировано производителем. но производители разные. как узнать применяют ли они один и тот же вид маркировки или разный? К>3. Есть ли требования и ограничения со стороны считывающего оборудования? В принципе, сканер — всеяден. Но данные от него идут к программе. И если на входе будет смесь из стандартизованных товарных кодов EAN-13, внутренних кодов (индексов БД) и еще чего-то, то сможет ли программа это обработать? Написанная тобой — да. А та, которая реально стоит?
а можно ли эту прогу заменить на свою?
char CheckDigit(char* str)
{
int len = strlen(str);
assert(len == 12); // для EAN-13int 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;
}
Каждая цифра в штрихкоде представляется 2 штрихами и 2 пробелами с толщиной 1..4 условных единицы — "модуля" (подробнее о габаритах я расскажу позже). Суммарная ширина зебры для одной цифры — 7 модулей.
Есть одно маленькое "но". Первая цифра не отображается, а влияет на выбор кода для оставшихся 12 цифр.
Примечание 1. На самом деле ширина штрихов и пробелов не равна целому числу модулей — это делается для лучшей помехозащиты. Но на это можно болт забить (что и сделано в приведенном коде).
К сожалению, в исходной программе болт не был забит, поэтому пришлось "переводить". Если не компилится — не обессудь, поправь.
Примечание 2. У штрихкода слева и справа от "зебры" есть т.н. зоны стабилизации (обязательно должны быть белыми). Без них сканер не сможет найти границы штрихкода.
Но об этом — в следующий раз (вероятно, послезавтра).
Примечание 3. "Ножки" (длинные штрихи), правильное расположение и правильный шрифт цифр (да-да! это все нормируется) для внутреннего использования можно проигнорировать.
Т.е. выводить штрихкод можно по-простому:
Все! Теперь у тебя достаточно информации, чтобы рисовать EAN-13 для внутреннего использования.
Кстати, можно коды опций делать заведомо за пределами реестра EAN — например, первые 6 цифр — нули (ну и фиг с ними, американцами).
Или начинать с 999 — тоже неиспользуемая комбинация. Сканеру-то все равно
Когда будешь тестировать вывод штрихкода, обязательно "потренируйся на кошках".
Возьми образец (с пивной банки ), рассчитай для него контрольную сумму, зебру, выведи и сравни с оригиналом.
Если что-то где-то не совпало, и это не твой баг — то обязательно напиши (мало ли, я напутал в листингах).
Наверное, скажу все же о размерах (самых важных).
Зоны стабилизации слева и справа — не менее 11 модулей, сверху и снизу — не менее 1 модуля.
Высота штрихов — не менее 10 модулей (это очень, очень узкая полоска), рекомендуемая — 70.
Здравствуйте chico97, Вы писали:
C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.
Здравствуйте Кодт, Вы писали:
К>Каждая цифра в штрихкоде представляется 2 штрихами и 2 пробелами с толщиной 1..4 условных единицы — "модуля" (подробнее о габаритах я расскажу позже). Суммарная ширина зебры для одной цифры — 7 модулей. К>Есть одно маленькое "но". Первая цифра не отображается, а влияет на выбор кода для оставшихся 12 цифр.
К>
К>Примечание 1. На самом деле ширина штрихов и пробелов не равна целому числу модулей — это делается для лучшей помехозащиты. Но на это можно болт забить (что и сделано в приведенном коде). К>К сожалению, в исходной программе болт не был забит, поэтому пришлось "переводить". Если не компилится — не обессудь, поправь.
К>Примечание 2. У штрихкода слева и справа от "зебры" есть т.н. зоны стабилизации (обязательно должны быть белыми). Без них сканер не сможет найти границы штрихкода. К>Но об этом — в следующий раз (вероятно, послезавтра).
К>Примечание 3. "Ножки" (длинные штрихи), правильное расположение и правильный шрифт цифр (да-да! это все нормируется) для внутреннего использования можно проигнорировать. К>Т.е. выводить штрихкод можно по-простому: К>
К>Все! Теперь у тебя достаточно информации, чтобы рисовать EAN-13 для внутреннего использования.
К>Кстати, можно коды опций делать заведомо за пределами реестра EAN — например, первые 6 цифр — нули (ну и фиг с ними, американцами). К>Или начинать с 999 — тоже неиспользуемая комбинация. Сканеру-то все равно
Спасибо за пояснения и пример кода. правда я на С++ никогда не писал, но думаю разберусь (перешел с VB на .NET Framework) .
Здравствуйте Кодт, Вы писали:
К>Каждая цифра в штрихкоде представляется 2 штрихами и 2 пробелами с толщиной 1..4 условных единицы — "модуля" (подробнее о габаритах я расскажу позже). Суммарная ширина зебры для одной цифры — 7 модулей. К>Есть одно маленькое "но". Первая цифра не отображается, а влияет на выбор кода для оставшихся 12 цифр.
Здравствуйте 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)
Здравствуйте Хитрик Денис, Вы писали:
ХД>Есть ещё сайт про штриховое кодирование http://www.sbarcode.com/
Спасибо, что хоть один человек вспомнил
Re: Алгоритм преобразования цифр в шрих код
От:
Аноним
Дата:
13.11.03 11:55
Оценка:
Здравствуйте, chico97, Вы писали:
C>Уважаемые, C>есть ли стандартизованный алгоритм преобразования цифр в знаки шрих полосок или что-то в этом роде. просто нуно генерить шрих код изображение из цифр кода.
А мине нуна нормально работающая компонента...главное чтобы с EAN 128 нормально выводило...а то куды ни кинься везде таньга нужна...
Да вот еще вопросик...код еан128...цыферьки его 9785272000262...а блип компоненты все почему-то теряют последнюю двойку, хоть тресни не пойму куда...