Youtube-подобные идентификаторы, которые соответственно изменяются с помощью идентификатора

Я думал о том, как создать small function которая генерирует ID похожий на YouTube и не вызывает конфликтов. Кодировка должна быть A-Za-z0-9-_ и позволяет сказать, что я хочу, чтобы она составляла 10 characters что бы равнялось 64 ^ 10 / Quadrillion1153 Quadrillion .

Очень важно быть small из-за того, что он является одной из основных функций веб-сайта и должен быть достаточно ясным, чтобы его можно было легко модифицировать. В течение нескольких секунд в случае возникновения чрезвычайной ситуации.

Это не должно быть secure в том смысле, что мы не имеем в виду, легко ли конвертировать обратно в ID как аутсайдер. Однако он не должен иметь такой характер, как:

aaaaaaaaaa aaaaaaaaab aaaaaaaaac

Я знаю, что вы теоретически могли бы сделать charset и прокручивать ее случайным образом, пока у вас не будет 10 случайных символов, но это может столкнуться (я понимаю, что этот шанс тонкий, и вы можете выполнить запрос, чтобы увидеть, был ли key создан ранее, но я хотел бы поддерживать минимальные зависимости и не полагаться на SQL ).

Я также могу представить набор charset из 100 characters как в 0-99 а затем добавить и / или добавить random символы, если length of 10 условий не выполняется. Например:

  • ВАЖНО : приведенный ниже сценарий предполагает, что A является первым символом в наборе, а _ является последним.

id: 0 = A+9 random characters

id: 1 = B+9 random characters

id: 99 = _+9 random characters

id: 990 = _A+8 random characters

id: 99999999999999999999 = __________

Я бы подумал, что это предотвратит collisions но у меня нет charset 100 а 64 .

Надеюсь, кто-то может подбросить некоторые идеи.

  • UPDATE1 : приведенный выше эскиз может действительно столкнуться в следующих (и более) обстоятельствах:
  • Если ID равен 99 это не означает, что следующий символ не может быть chance хотя и очень маловероятен; поэтому он может collide с 990 🙁

  • UPDATE2 : Я не думаю, что он все равно столкнется, если мы будем использовать static component после ID и перед random component который не является частью charset .

  • Обновленный эскиз (статический компонент будет равен $):

id: 0 = A$+8 random characters

id: 1 = B$+8 random characters

id: 99 = _$+8 random characters

id: 990 = _A$+7 random characters

id: 999999999999999999 = _________$

как и в вашем другом вопросе здесь. Кодирование / декодирование. Сторнирование проблемы. Все, что вы хотите, – это преобразовать свой идентификатор, который находится в базе 10, на другую базу, чем 10 …

вы можете просто base64 закодировать его и сделать …

если вы хотите, чтобы он выглядел как случайный, преобразуйте число до … например, просто xor его со статическим значением в 60 бит …