Ответ 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 и обратить вспять описанный выше процесс, но я сомневаюсь, что существует значительно более эффективный подход, который не требует, чтобы вы преобразовали данные в необычное основание, а затем имели дело с сложности обработки управляющих символов ASCII во время сканирования.
[*] Регистр назначенных кодов ECI можно бесплатно получить в магазине AIM как "ECI Part 3: Register".
[†] Хотя весь диапазон GUID можно сохранить в пределах 39 цифр, 39-значный код 128 кода режима C на самом деле длиннее 40-значного символа.