Я бы посоветовал против 1-1 переписка:
В кодировке base-64 вы сможете только уменьшить входные данные до (4/8) / (6/8) -> 4/6 ~ 66% (и это при условии, что вы имеете дело с "уродливым" "символы base64 без добавления чего-либо нового).
Я бы, вероятно, рассмотрел (вторичный) метод поиска, чтобы получить действительно "красивые" значения. После того, как вы установили этот альтернативный метод, выберите способ генерации значений в этом диапазоне - например, случайные числа - могут быть свободны от исходного хеш-значения (потому что в любом случае соответствие теряется), и может использоваться произвольный «симпатичный» набор целей, например, [a-z] [A-Z] [0-9].
Вы можете преобразовать в базу (62 выше), просто следуя методу «разделяй и переноси» и просматривая массив. Это должно быть забавное маленькое упражнение.
Примечание. Если вы выберете случайное число из [0, 62 ^ 5), вы получите значение, которое будет полностью упаковывать закодированный вывод (и соответствовать 32-битным целочисленным значениям). Затем вы можете выполнить этот процесс несколько раз подряд, чтобы получить результат, кратный -5, например xxxxxyyyyyzzzzzz (где x, y, z - разные группы, а общее значение находится в диапазоне (62 ^ 5) ^ 3 -> 62 ^ 15 -> «огромное значение»)
Редактировать, для комментария :
Поскольку без соответствия 1-1, вы можете создавать действительно короткие симпатичные вещи - возможно, «маленькие» длиной до 8 символов - с base62, 8 символов могут хранить до 218340105584896 значений, что скорее всего, больше, чем вам когда-либо понадобится. Или даже 6 символов, которые «только» позволяют хранить 56800235584 различных значений! (И вы все еще не можете сохранить это число в виде простого 32-разрядного целого числа :-) Если вы уменьшите число до 5 символов, вы снова уменьшите пространство (до чуть менее одного миллиарда: 916 132 832), но теперь у вас есть кое-что, что может вписывается в 32-разрядное целое число со знаком (хотя это несколько расточительно).
БД должна обеспечивать отсутствие дубликатов, хотя индекс по этому значению будет «быстро фрагментироваться» со случайным источником (но вы можете использовать счетчики или еще много чего). Хорошо распределенный PRNG должен иметь минимальные конфликты (читай: повторы) в достаточно большом диапазоне (при условии, что вы продолжаете посевную работу и не сбрасываете ее, или сбрасываете ее соответствующим образом) - Super 7 может даже гарантировать отсутствие дубликатов во время цикла (всего ~ 32k), но, как вы можете видеть выше, целевое пространство по-прежнему большое . Посмотрите математику в верхней части того, что требуется для поддержания отношения 1-1 в терминах минимальный кодированный размер .
Метод «разделяй и переноси» просто объясняет, как получить номер вашего источника в другую базу - возможно, в base62. Тот же самый общий метод может применяться для перехода от «естественной» базы (base10 в PHP) к любой базе.