
Для внутренних нужд одного проекта хочу написать сервис сокращения ссылок (аналог u.to, goo.gl, и подобных).
Прошу вашей помощи в составлении подробного алгоритма работы, поскольку в некоторых аспектах мои мысли зашли в тупик.
Описание того, что хочу:
- идентификаторы вида: http://***.to/d2hG
- длина идентификатора должна самостоятельно увеличиваться по мере роста количества ссылок
- начальную длину идентификатора (от 1 символа и более) хорошо бы устанавливать в конфиге
- необходимо иметь возможность установить собственный текст в качестве идентификатора
В чем загвоздка:
1) Как обеспечить уникальность идентификаторов?
В голову приходит логичная мысль, использовать автоинкрементный ключ в БД, и каким-то образом преобразовывать его в строковое представление.
Подумал о использовании числа в виде HEX, но это не дает гибкости - набор символов ограничен 0-9A-F, регистр игнорируется.
Следующей мыслью было - использовать свой набор символов, сохранив принцип конвертации в 16-ричное представление, но это приводит к следующей проблеме:
2) Поскольку в своем наборе используется весь алфавит, есть существенный шанс, что однажды будет занято сокращение, которое потребуется использовать. Например, распространенное - vk, используемое для ссылки на официальную группу проекта, может быть занято очень и очень скоро.
3) Как при этом всем сделать возможность регулирования начальной длины сокращения? Ведь в описанном мной выше способе генерироваться будет всегда от начала, т.е. от 1-го символа.
Хотелось бы услышать ваши мысли на этот счет, и советы по разработке сего скрипта.
Заранее благодарен за ответы, и потраченное на чтение топика время
