и, надеюсь, немного сжатия
Не уверен, что именно вы имеете в виду; создание чего-либо «читабельного» или «произносимого» неизбежно расширит пространство, необходимое для этого. Может быть, вы имели в виду «немного избыточности»? Было бы хорошо, если бы, даже если пользователь допустил небольшую ошибку, система может обнаружить и, возможно, даже исправить ее.
Действительно, это очень сильно зависит от того, насколько велики ваши UUID и как они чаще всего передаются. Если они должны быть переданы по телефону или VoIP, вы хотите больше слышимости избыточности. Если их необходимо вводить в мобильные устройства с помощью цифровых клавиатур, бывает трудно вводить буквенные символы, особенно если они чувствительны к регистру. Если они записаны много, вам нужно беспокоиться о символах, которые выглядят одинаково (например, O и 0 и o). Если их нужно запомнить, то, вероятно, лучше всего использовать строки из реальных слов (взгляните на Список слов PGP ).
Однако я думаю, что отличное универсальное решение - это просто использование цифровых цифр. Их гораздо сложнее спутать друг с другом (как в устной, так и в письменной форме), чем некоторые алфавитные символы. Легко вводить на мобильных устройствах, и люди неплохо запоминают числа.
И длина строки тоже не так уж плоха. Давайте сравним base32 с основанием 10 (десятичное число). Длина десятичной строки в log_10(32)
раз больше длины соответствующей строки base32, или примерно в 1,5 раза длиннее. Десять символов base32 соответствуют 15 десятичным цифрам.
Не так уж много штрафа, IMO, поскольку в базе 32 легко спутать C и T или S, F и X (когда они произносятся), и кто-то, говорящий с иностранным акцентом, с большей вероятностью может вызвать проблемы. 1018 *