В практике автоматизации торговли и складского учета часто возникает специфическая задача: необходимо промаркировать продукцию таким образом, чтобы штрихкод легко считывался терминалами сбора данных (ТСД) или сканерами сотрудников, но при этом был бесполезен или вовсе не читался смартфонами покупателей. Причины могут быть разными: от защиты внутренней логистической информации до предотвращения сравнения цен конкурентами.
Давайте подробно разберем, какие существуют методы решения этой задачи, проанализируем их эффективность и техническую реализацию в среде 1С и складского оборудования.
Задача сводится к двум вариантам реализации:
Рассмотрим различные подходы, начиная от простых логических и заканчивая аппаратными хитростями.
Самый надежный и профессиональный способ, который обсуждался в сообществе, заключается не в том, чтобы сломать сканирование, а в том, чтобы сделать результат сканирования бесполезным для постороннего.
Как правило, публичные штрихкоды (EAN-13) жестко стандартизированы. Если же мы говорим о внутренней маркировке, мы вольны использовать любой формат данных.
Вместо того чтобы кодировать в QR-код или DataMatrix наименование товара, цену и партию открытым текстом, мы кодируем уникальный идентификатор (ссылку) или внутренний код.
Как это работает:
A1B2-C3D4.A1B2-C3D4. Для него это просто набор символов, который не дает никакой информации о цене или свойствах товара. Поиск в Google по этому коду ничего не даст.Этот метод хорош тем, что он не требует сложных алгоритмов шифрования на стороне клиента. Вся логика "расшифровки" находится в вашей базе данных.
Один из самых элегантных "хаков", предложенных специалистами, касается линейных штрихкодов (например, EAN-13, Code 128 и др.). Большинство стандартов штрихкодирования подразумевают наличие контрольного символа (Check Digit). Это последняя цифра кода, которая вычисляется по определенному алгоритму на основе всех предыдущих цифр.
Суть метода:
Сканеры штрихкодов и приложения в смартфонах по умолчанию проверяют корректность считанного кода. Если контрольная сумма не сходится с данными, устройство считает, что сканирование прошло с ошибкой (дрогнула рука, плохое освещение) и не выдает результат.
Мы можем использовать это поведение:
Verify Check Digit (Проверка контрольной цифры) или разрешить передачу данных даже при ошибке контрольной суммы.Таким образом, ваше оборудование, настроенное специальным образом, будет считывать код "как есть", а бытовые устройства будут его игнорировать как "битый".
Если нет возможности использовать онлайн-запросы к базе (как в Методе 1) и данные должны быть зашиты непосредственно в код, но скрыты от глаз, мы используем шифрование.
В теме предлагалось использовать простые шифры (например, шифр Виженера) или простое байтовое кодирование.
Пример реализации на 1С:
Допустим, нам нужно закодировать строку "СекретныйТовар".
Base64 от сжатой строки уже сделает код нечитаемым для человека.Пример кода (концептуальный) для обфускации данных перед печатью:
Функция ЗашифроватьДанныеДляQR(ИсходнаяСтрока)
// Простейшая замена или XOR-шифрование
Ключ = "MySecretKey";
Результат = "";
// Алгоритм шифрования...
// Например, сдвиг символов или XOR с ключом
Возврат Результат;
КонецФункции
При сканировании обычным телефоном пользователь увидит "кракозябры" (бессмысленный набор символов). Ваше приложение на ТСД должно содержать обратную функцию дешифровки.
Современные смартфоны очень умны, но их алгоритмы распознавания заточены под "стандартные" условия. Мы можем создать условия, которые сложны для бытовых камер, но нормальны для промышленных имиджеров.
Стандартный штрихкод — это черные полосы (или модули) на белом фоне. Большинство библиотек распознавания в телефонах ищут именно темные объекты на светлом фоне.
Если напечатать этикетку, где штрихкод будет белым (прозрачным), а фон черным, многие стандартные приложения для сканирования не смогут его распознать, так как не умеют инвертировать изображение на лету. Промышленные сканеры имеют настройку Inverse 1D/2D, которую можно включить для сотрудников.
Лазерные сканеры работают в красном диапазоне спектра. Если напечатать штрихкод цветом, который для человеческого глаза и камеры смартфона сливается с фоном (например, определенные оттенки красного на розовом или желтом), камера не сможет выделить границы штрихов.
Однако этот метод требует тщательного тестирования оборудования, так как современные фото-сканеры (Image scanners) работают по принципу фотографирования, как и смартфоны, и этот метод может помешать и им тоже.
QR-код и DataMatrix стали стандартом де-факто. Любой телефон умеет их читать "из коробки". Однако существует множество других 2D-кодов, которые поддерживаются профессиональным оборудованием, но игнорируются обычными камерами.
Рассмотрим такие форматы как:
При выборе этого метода убедитесь, что компонента печати штрихкода в 1С поддерживает выбранный формат, а ТСД сотрудников умеют его декодировать.
Психология пользователя такова: он сканирует то, что выглядит привлекательно. Можно разместить на этикетке два кода:
Покупатель считает большой код, получит какую-то информацию и успокоится. Сотрудники будут обучены сканировать именно маленький служебный код.
При реализации печати этикеток в 1С для достижения описанных целей нам потребуются настройки компоненты печати штрихкода.
Если мы используем стандартную 1С:КомпонентаПечатиШтрихкодов:
Сообщение (или Text) объекта печати.Внедряя защиту от покупателей, важно помнить о юридических и репутационных аспектах. В эпоху системы "Честный ЗНАК" и тотальной маркировки потребитель привык проверять легальность товара через приложение.
Если покупатель видит код, похожий на DataMatrix маркировки, но не может его считать, он может решить, что товар контрафактный. Поэтому:
Наиболее эффективным и безопасным решением является комбинация методов:
Выбор конкретного пути зависит от парка вашего оборудования и бизнес-задач.