powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / формат данных для штрихкода
8 сообщений из 8, страница 1 из 1
формат данных для штрихкода
    #34374262
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В системе есть разнообразные объекты.
Для каждого экземпляра объекта имеется уникальный (в пределах всей системы) ID::INT8, по которому может быть установлен его тип.

Для некоторых объектов: коробки с товаром, стеллажи, ячейки хранения и пр. хотелось бы генерить уникальные же штрихкоды. Совместимость данных в ШК с какими-либо системами (EAN etc) не важна.

Прямое решение - генерить ШК в виде текстовой строки, в которой написан его ID::INT8 и кодировать, к примеру CODE39.
Уникальность ID уже реализована сопутствующей логикой при создании объекта.

Одно "НО". Хотелось бы в контексте интерфейса пользователя проверять формальную валидность считанного ШК. Например, для "закрытия" коробки с товаром нужно считать ШК коробки, а не ШК накладной, складской ячейки или пачки сигарет. Чтобы проверить, что это действительно коробка, нам придется делать запрос к БД, что явно недешовое решение. Особенно если задумчивый кладовщик будет с наслаждением тыкать сканером в посторонний предмет раз в секунду.

Усложненное решение - генерить ШК в виде строки с префиксом, однозначно связанным с типом объекта. Например "box" & [boxid], "shelvse" & [shelvseid]. ШК можно хранить не в дереве объектов, а в таблице из предметной области (коробки, ячейки и пр.).
Так мы получаем возможность проверять пользовательский ввод в интерфейсе, отсекая явно ложные операции. Минус - придется делать поиск уже не по INT8, а по текстовой строке.

Какой подход окажется лучше с точки зрения быстродействия?
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34374526
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadminМинус - придется делать поиск уже не по INT8, а по текстовой строке.

Сделайте префиксы числовыми (это улучшает качество печатаемого ШК) и фиксированной длины. Тогда восстановить по ШК INT8 не составит труда. И поиск будет идти все также быстро.
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34374929
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey
Сделайте префиксы числовыми (это улучшает качество печатаемого ШК) и фиксированной длины. Тогда восстановить по ШК INT8 не составит труда. И поиск будет идти все также быстро.

Т.е.
1) ШК текстовый, типа [prefix]::INT4 & "-" & [objectID]::INT8,
типа вот так "1001-123456789012345678"
2) клиентское приложение выделяет из строки [prefix] и [objectID]
3) по префиксу делает предварительную проверку
4) select к БД делаем уже по [objectID]::INT8

Спасибо, действительно удобный вариант!
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34375039
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadmin
Т.е.
1) ШК текстовый, типа [prefix]::INT4 & "-" & [objectID]::INT8,
типа вот так "1001-123456789012345678"

Спасибо, действительно удобный вариант!

В общем да, только я бы еще минусик убрал. Типа такого:
1001123456789012345678. Ведь длина префикса все-равно фиксирована. А ели под штрих-кодом надо напечатать человекочитаемый код, то там можно и минусик изобразить.
Ну и пара замечаний:
а) некоторые типы кодов умеют хорошо представлять числовые коды, имеющие четное количество символов. То есть имеет смысл стремиться к чисто числовому код четной длины.
б) Я тут уже где-то писал - повторю. Штрих коды начинающиеся с двойки зарезервированы для внутреннего использования компаниями. Поэтому начинайте префикс с двойки. В этом случае вы легко отловите "задумчивого кладовщика", который вместо стеллажа сканирует штрих-код с недопитой бутылки водки.
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34375722
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey
б) Я тут уже где-то писал - повторю. Штрих коды начинающиеся с двойки зарезервированы для внутреннего использования компаниями. Поэтому начинайте префикс с двойки. В этом случае вы легко отловите "задумчивого кладовщика", который вместо стеллажа сканирует штрих-код с недопитой бутылки водки.

Как я понимаю, под это определение попадают логистические коды для транспортной упаковки ITF-14. Они могут начинаются с "2".

Не стоит ли построить строку с простой контрольной суммой (типа md4), которой дополнять свой код? Это минимизирует коллизии с целочисленными кодами ITF-14 от транспортных компаний.

Следовало бы, конечно, скататься на склад и посканировать все коды, которые наносят поставщики и перевозчики на наш груз, но хочется предусмотреть и "теоретичекую сторону задачи".
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34375738
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати,
если мой числовой префикс совпадет с каким то префиксом ITF-14 (и EAN внутри), то у меня возникнет коллизия с целым диапазоном номеров!
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34376430
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadminКак я понимаю, под это определение попадают логистические коды для транспортной упаковки ITF-14. Они могут начинаются с "2".

Да, я действительно не совсем точно выразился. С двойки не должна начинаться "производственная" маркировка. Учитывая, что между производителем и потребителем стоит много посредников, каждый из которых норовит свою "внутреннюю" (естественно никто эти внутренние этикетки потом не срывает) маркировку сделать, то шанс нарваться на двойку выше. Единственное утешение - логистические коды обычно наносятся именно на внешнюю упаковку (короба, контейнеры и т.п.).
...
Рейтинг: 0 / 0
формат данных для штрихкода
    #34378327
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey то шанс нарваться на двойку выше.
Вот именно этого то я и боюсь. Самое противное, что если чей-то EAN (начиная со второй цифры после двойки), или внутренний код совпадет с моим префиксом, то я получу целый диапазон коллизий!

Хочется ввести что-то случайное (hash) в штрих=код, чтобы я всегда мог его вычислить и проверить, нашей ли системой сгенерен код.

Но,
19 десятичных разрядов на INT8
3 десятичных разряд на префикс

Для контрольной суммы вообще места не остается. Очень длинный код получается.
Можно делать текстовый код и выгонять в его в шестнадцатиричке с битом четности, ловить ошибки преобразования.

Или ну его нафиг.
Как вы думаете?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / формат данных для штрихкода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]