Самый эффективный штрих-код для хранения GUID

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

Все мои данные используют GUID как ключевые поля, поэтому я хотел бы сохранить GUID непосредственно на карте в штрих-коде. Хотя его достаточно просто, чтобы закодировать его как 3 из 9, он не будет самым эффективным использованием пространства.

Существует ли наилучшая практика или наиболее эффективный метод хранения GUID в штрих-коде? Я бы предположил, что, поскольку существует согласованная длина, и глубина до данных будет стандартом, но я не могу ее найти. Было бы достаточно легко создать собственный собственный элемент управления char, а затем двоичные данные между ними, но хотелось бы, чтобы стандартные читатели знали, как интерпретировать.

Любая помощь с благодарностью получила.

Ответ 1

Не существует открытых стандартов для сжатия данных специального назначения с помощью общих линейных штрих-кодов, таких как Код 39 и Код 128. Большинство стандартизированных ISO/IEC 2D-штрих-кодов поддерживают механизм кодирования данных специального назначения, называемый расширенной интерпретацией каналов (ECI), который позволяет вам указать, что данные соответствуют определенному стандарту приложения или режиму кодирования, например, ECI 298765 для сжатия адресов IPv4 [*]. К сожалению, сжатие GUID не входит в число тех, которые были зарегистрированы, и даже если бы это было так, вам, тем не менее, пришлось бы обрабатывать это в вашем приложении, так как поддержка читателей была бы недостаточной.

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

Эффективным способом сохранения GUID было бы преобразование его в 40-значное десятичное представление [†] и сохранение результата в штрих-коде Code 128 с использованием числового сжатия двойной плотности ("Режим C").

Например, рассмотрим GUID:

cd171f7c-560d-4a62-8d65-16b87419a58c

Выражается шестнадцатеричным числом:

0xCD171F7C560D4A628D6516B87419A58C

Преобразовано в 40 десятичных цифр:

0272611800569275698104677545117639878028

Кодируется в штрих-коде Code 128 [‡]:

GUID encoded in decimal within a Code 128

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

[*] Регистр назначенных кодов ECI можно бесплатно получить в магазине AIM как "ECI Part 3: Register".

[†] Хотя весь диапазон GUID можно сохранить в пределах 39 цифр, 39-значный код 128 кода режима C на самом деле длиннее 40-значного символа.