Мира вам.
Намедни позвонил родственник и говорит:
- Нужно на визитки напечатать штрих-коды.
- Зайди на любой онлайн-генератор, вставь полученную картинку на визитку и печатай.
- Нужен уникальный код для каждой визитки.
- Создай лист визиток через персонализацию или DataMerge.
- Нужно 100 000 кодов. И в EAN-13.
Тут даже мой кот присвистнул. 100 тыщ кодов – 100 тыщ картинок. Комп на неделю в спячку уйдет.
- Ладно, - говорю, - что-нибудь придумаю.
Я раньше скачивал всяко разные программы-генераторы, а они все практически генерят картинку. Картинка меня не устраивает. Есть шрифты с штрихами, а следовательно на основе шрифта и генерить код символами. Такой фокус я уже проворачивал с одним клиентом. В экселе создал колонку с кодом с увеличением +1. В Indesign через DataMerge раскидал коды на лист с наклейками, применил шрифт Barcode и в печать. Сканер считывал коды и клиент ушел радостный.
Захотел применить такой же фокус и в этот раз. Но, уже с EAN13. Шрифт использовал Libre Barcode EAN13. Не читает сканер. Вспомнил про стартовые и стоповые символы – читает всяку ересь, но не код. Пришлось читать литературу про код.
Итак. Сам код 13-значный. Вернее, последовательность чисел кода (например, с инкриментом +1) состоит из 12 цифр. 13-я – контрольная сумма. Стартует полоса-пробел-полоса (биты 101) равной ширины и они же задают ширину бита. Стоповый набор полос тот же. Я вручную глифами пытался собрать код. Не получилось считать сканером. Оказывается штрих-код начинается со ВТОРОЙ цифры. Отбрасываем первую цифру и код имеет вид:
[6 цифр] [разделитель] [6 цифр].
Причем, в правой части пишем и контрольную сумму. Вычисляется как число необходимое до доведения кратному 10 суммы цифр на нечетных позициях числа и утроенной суммы нечетных позиций. Например, сумма получилась 126, то контрольная цифра - 4.
Разделитель - те же полоски, что и на старте.
Оказывается каждая цифра штрих-кода кодируется тремя разными (и хитрыми) способами: set A, set B, set C. Правые шесть цифр всегда кодируется set C - в соответствие цифрам 0-9 ставятся символы a-j из шрифта штрих-кода. Левые 6 цифр кодируется перебором 10 вариантов из set A и set B. Порядок перебора зависит от первой цифры числа кода. Штрихи set A соответствуют символам A-J, set B - символам K-T шрифта штрих-кода. Ряд чисел 0-9 нам даст стартовый штрих с соответствующей цифрой у подножия.
По сути мы (человеки) видим все 13 цифр штрих-кода, а сканер 12 (без первой цифры). Первую он вычисляет из набора вариантов перебора левых 6 цифр. А затем еще и сверяется с контрольным.
Итак, мне оставалось найти соответствие символа (ASCII) каждой цифре числа штрих-кода. Решения в экселе в большинстве своем были на VBA. Мне это не нравилось. И читая комментарии на одном из форумов нашел одно интересное решение встроенными функциями экселя.
Вставил в лист с кодами - ЗАРАБОТАЛО. Сканер читает и без ошибок!
Файл экселя с решением прилагаю. Если в третьем столбце поменяете шрифт на читаемый, то увидите набор символов ASCII для формирования рисунка штрих-кода.
Таблицы битовых кодов set-ов и варианты их перебора изложены в интернете.
Также эта формула применима и к шрифту Code EAN13, но сканер иногда на нем ошибался.
Может мои изыскания помогут кому-нибудь в массовой генерации кодов.
Намедни позвонил родственник и говорит:
- Нужно на визитки напечатать штрих-коды.
- Зайди на любой онлайн-генератор, вставь полученную картинку на визитку и печатай.
- Нужен уникальный код для каждой визитки.
- Создай лист визиток через персонализацию или DataMerge.
- Нужно 100 000 кодов. И в EAN-13.
Тут даже мой кот присвистнул. 100 тыщ кодов – 100 тыщ картинок. Комп на неделю в спячку уйдет.
- Ладно, - говорю, - что-нибудь придумаю.
Я раньше скачивал всяко разные программы-генераторы, а они все практически генерят картинку. Картинка меня не устраивает. Есть шрифты с штрихами, а следовательно на основе шрифта и генерить код символами. Такой фокус я уже проворачивал с одним клиентом. В экселе создал колонку с кодом с увеличением +1. В Indesign через DataMerge раскидал коды на лист с наклейками, применил шрифт Barcode и в печать. Сканер считывал коды и клиент ушел радостный.
Захотел применить такой же фокус и в этот раз. Но, уже с EAN13. Шрифт использовал Libre Barcode EAN13. Не читает сканер. Вспомнил про стартовые и стоповые символы – читает всяку ересь, но не код. Пришлось читать литературу про код.
Итак. Сам код 13-значный. Вернее, последовательность чисел кода (например, с инкриментом +1) состоит из 12 цифр. 13-я – контрольная сумма. Стартует полоса-пробел-полоса (биты 101) равной ширины и они же задают ширину бита. Стоповый набор полос тот же. Я вручную глифами пытался собрать код. Не получилось считать сканером. Оказывается штрих-код начинается со ВТОРОЙ цифры. Отбрасываем первую цифру и код имеет вид:
[6 цифр] [разделитель] [6 цифр].
Причем, в правой части пишем и контрольную сумму. Вычисляется как число необходимое до доведения кратному 10 суммы цифр на нечетных позициях числа и утроенной суммы нечетных позиций. Например, сумма получилась 126, то контрольная цифра - 4.
Разделитель - те же полоски, что и на старте.
Оказывается каждая цифра штрих-кода кодируется тремя разными (и хитрыми) способами: set A, set B, set C. Правые шесть цифр всегда кодируется set C - в соответствие цифрам 0-9 ставятся символы a-j из шрифта штрих-кода. Левые 6 цифр кодируется перебором 10 вариантов из set A и set B. Порядок перебора зависит от первой цифры числа кода. Штрихи set A соответствуют символам A-J, set B - символам K-T шрифта штрих-кода. Ряд чисел 0-9 нам даст стартовый штрих с соответствующей цифрой у подножия.
По сути мы (человеки) видим все 13 цифр штрих-кода, а сканер 12 (без первой цифры). Первую он вычисляет из набора вариантов перебора левых 6 цифр. А затем еще и сверяется с контрольным.
Итак, мне оставалось найти соответствие символа (ASCII) каждой цифре числа штрих-кода. Решения в экселе в большинстве своем были на VBA. Мне это не нравилось. И читая комментарии на одном из форумов нашел одно интересное решение встроенными функциями экселя.
Вставил в лист с кодами - ЗАРАБОТАЛО. Сканер читает и без ошибок!
Файл экселя с решением прилагаю. Если в третьем столбце поменяете шрифт на читаемый, то увидите набор символов ASCII для формирования рисунка штрих-кода.
Таблицы битовых кодов set-ов и варианты их перебора изложены в интернете.
Также эта формула применима и к шрифту Code EAN13, но сканер иногда на нем ошибался.
Может мои изыскания помогут кому-нибудь в массовой генерации кодов.
Вложения
Последнее редактирование: