До речі, як мені здається, ще важливо з розумом підійти до вибору алфавіту. Наприклад, я б не став включати в нього занадто схожі символи - 0 і O, 1 і l і I і інші. Плюс, до регістру урла - теж не кращий «побічний ефект».
Мається на увазі алгоритм при якому спочатку все посилання будуть однакової довжини. Природно, що така безліч варіантів не є нескінченним, але воно має допустимий розмір.
Або ж, звичайно, можна і алгоритм, який буде починати з коротких URL-ів і якщо безліч закінчиться - буде використовуватися на один символ більше.
Головне - не чисельні ідентифікатори. Ну, тобто посилання на кшталт тих, що я привів в приклад: bit.ly, clck.ru.
а що заважає брати MD5 від поточного юнікстайма і обрізати по довжині, брати, припустимо, перші 5 символів?
Те, що MD5 такий унікальний тільки при повній своїй довжині.
Повний або урізаний MD5 - все одно потрібна перевірка на наявність згенерованого коду на базі. Тут слід говорити про ймовірність повторення шифру двох різних рядків. І чим коротше шифр тим більше ця ймовірність. І ніякий інший алгоритм цю вірогідність не зменшить при однаковому рівномірному розподілі результатів шифрування. Тому урізання MD5 цілком може застосовуватися. Але краще md5 брати не від часу а від самого URL наприклад. Якщо не впевнені в рівномірності md5 можна використовувати генератор випадкових чисел і потім перетворювати числа в літери по їх коду. У будь-якому випадку будуть повтори. Їх можна виключати простим збільшенням на одиницю до тих пір поки шифр не стане унікальним. При рівномірному розподілі вам не знадобиться багато разів збільшувати шифр. Припустимо у вас 45 млн комбінацій і 40 з них зайняті. Тоді в середньому кожна 8 осередок вільна. І так воно і буде на практиці.