Я думал о том, как создать small function
которая генерирует ID
похожий на YouTube
и не вызывает конфликтов. Кодировка должна быть A-Za-z0-9-_
и позволяет сказать, что я хочу, чтобы она составляла 10 characters
что бы равнялось 64 ^ 10 / Quadrillion
– 1153 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
.
Надеюсь, кто-то может подбросить некоторые идеи.
Если 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 бит …