Преобразуйте GUID в более короткую строку, используя алфавит из 36 символов 0-9 и AZ - PullRequest
3 голосов
/ 18 января 2011

У меня есть приложение, в котором я использую напечатанные qr-коды для идентификации объектов реальной жизни с их записями в базе данных.

База данных использует GUID в качестве первичных ключей (это не подлежит обсуждению, поскольку это иногда подключаемая система).

Чтобы сделать код qr как можно меньшим, я пытаюсь преобразовать мой шестнадцатеричный GUID из 32 символов в более короткую строку, в которой используется алфавит из 36 символов (0-9 и AZ), доступный в буквенно-цифровой форме.qr коды.

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

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Вы можете сохранить GUID в виде байтового массива и преобразовать его в Base32 .

Также посмотрите этот связанный вопрос .

1 голос
/ 18 января 2011

Я бы конвертировал его в Base64, который примерно на 20% меньше, чем Base32. Библиотеки или примеры кода для преобразования в base64 легко доступны. Единственная проблема с base64, очевидно, состоит в том, что буквы 'a' и 'A' отличаются в зависимости от base64, но не обязательно для вашей БД, поэтому, если вы выберете Base64 вместо Base32, вам придется проверить, что ваша таблица сортировки БД имеет настроить правильно.

0 голосов
/ 27 апреля 2012

Значение глобального уникального идентификатора (GUID) может быть представлено в виде шестнадцатеричной строки из 32 символов, но обычно хранится как 128-разрядное (16-байтовое) целое число.

Я подозреваю, что наименьшееВозможный QR-код, который может хранить такие 128-битные значения, состоит в том, чтобы указать «двоичное / байтовое кодирование» (которое может хранить любые 8-битные байты) и сохранить 16 байтов напрямую.Это кодирует с 1 пикселем на бит, 8 пикселями на байт (плюс стандартные служебные биты).Я уверен, что все другие действительные QR-кодировки будут использовать по крайней мере 1 пиксель на бит и иметь такие же стандартные издержки.Таким образом, вы не получите меньший QR-код с любым видом преобразования Base64, Base45, Base36 или Base32.

Большинство QR-кодов, которые я когда-либо видел, которые кодируют URL, используют один и тот же «двоичный код /Байт-кодирование "для поддержки строчных букв.В моем опыте QR-коды, использующие буквенно-цифровую кодировку, встречаются реже - при кодировании URL-адресов они декодируются в URL-адреса в верхнем регистре (поскольку они могут хранить только 45 символов 0–9, A – Z [только в верхнем регистре)], пробел, $,%, *, +, -,., /, :).«11 бит на 2 символа» довольно умный во многих ситуациях, но он не очень помогает при кодировании GUID.

Вы видели http://www.younoodle.com/startups/barcode_guid или Википедия: spime ?

...