Я думал о том, как сделать small function
который генерирует YouTube
-лайк ID
и не вызывает столкновений. Кодировка должна быть 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
это не значит, что следующий персонаж не может быть A
от chance
хотя очень маловероятно; Это мог следовательно collide
с 990
🙁
UPDATE2: Я не думаю, что это все равно столкнется, если мы используем static component
после ID
и до random component
это не является частью charset
,
Обновлен Sketch (статический компонент будет $):
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 и сделать …
если вы хотите, чтобы оно выглядело как случайное, преобразуйте число раньше … например, просто зафиксируйте его статическим 60-битным значением …
Других решений пока нет …