Ну, проблема в том, что вы хотите что-то уникальное и короткое. У вас не может быть и того, и другого.
Плотное представление случайного числа, которое можно прочитать человеком, было бы чем-то вроде base64
(заменить допустимые символы для любых символов, которые не должны быть в имени файла). Однако это все равно означает, что для каждого символа в имени файла есть «всего» 64 варианта.
Если вы хотите простое имя файла, просто используйте инкрементное число и закодируйте его в base64 (отложите его, если хотите минимальную длину для имени). Если вы хотите, чтобы это было недопустимо, вам нужен генератор случайных чисел, но тогда вам нужно убедиться, что вы избежите удвоения, иначе вы перепишете файл. Этот шанс для катастрофы выше, чем короче имена.
Возможно, вы можете использовать свой собственный эквивалент base64 с большим количеством символов, чем только 64, предоставленный этой кодировкой, но тогда вам нужно будет проверить, что ваша ОС считает допустимым именем файла, и вам все равно нужно убедиться клиент может получить к нему доступ должным образом (если это не только временное хранилище данных). Самый простой способ сделать это - создать строку с каждым символом, который вы хотите быть легитимным в нем, а затем преобразовать базу числа в любую длину строки (есть пояснения о базовом преобразовании в Google, если вы не знаете как это сделать). Это позволило бы обеспечить еще более высокую плотность информации и даже более короткие имена файлов.
Сгенерированный файл не имеет расширения и добавление расширения вручную нарушает гарантию уникальности. – Farhadi