Я хочу создать уникальный идентификатор, который будет использоваться в URL-адресах для идентификации конкретного ресурса. В принципе это то же самое, что и pastebin.com и т. Д.
Идентификатор и ресурс не очень секретны, но я хочу, чтобы это было так, чтобы вы просто не могли уменьшить идентификатор и затем получить ресурс другого пользователя. Я думаю о CHAR(8)
, который будет хорошо смотреться в URL и при этом быть достаточно большим, чтобы уменьшить вероятность угадывания. Но как мне это сгенерировать? Для INT вы можете использовать auto_increment
и primary key
для обеспечения уникальности.
Но если я сделаю следующее в порядке
- Создайте
CHAR(8)
в моем приложении
- Убедитесь, что этот идентификатор не существует.
- Если его не существует, сохраните, иначе перейдите к 1.
Я должен заключить 2. и 3. в атомарную транзакцию.
Но есть ли лучший способ? или я не должен заботиться о проверке (2.), потому что конфликт не происходит регулярно. Я использую MySql и .Net (C #), если это помогает. Можно ли каким-то образом «зашифровать» автоматически инкрементный int в качестве text-id и снова расшифровать его точно в 8 (или 10) символов.
Я прочитал Нужна меньшая альтернатива GUID для идентификатора БД, но все еще уникальная и случайная для URL , что было полезно, но использование GUID не поддерживается в MySql (насколько я знаю). Но приветствуется также комментарий о качестве метода LongToShortCode
в теме.
Примечание: ресурсы не могут быть изменены, только просмотрены.
С уважением,
Лассе