I want to generate a unique id which will be used in URLs to identify a specific resource. In principle it is the same as pastebin.com etc. does.
The id and resource is not very secret but I want it to be so you just can't decrement a id and then get another users resource. I´m thinking of a CHAR(8)
which will look nice in a URL and still be large enough to reduce the chance of guesses. But how do I generate this? For an INT, you can use auto_increment
and primary key
to insure the uniqueness.
But if I do the following in order
- Generate a
CHAR(8)
in my application - Insure that this ID doesn't exists.
- If it not exists, store, else goto 1.
I have to wrap 2. and 3. in a atomic transaction.
But is there a better way? or shouldn't I care about the the check (2.) because a clash doesn't occur regularly. I use MySql and .Net (C#) if that helps. Is it possible to somehow 'encrypt' a auto-incremented int as the text-id and decrypt it again in precisely 8 (or 10) characters.
I have read Need a smaller alternative to GUID for DB ID but still unique and random for URL which was useful, but the use of GUID is not supported in MySql (as far as I know). But a comment on the quality of the LongToShortCode
method in the thread would also be appreciated.
Note: the resources can't be changed, only viewed.
Best regards, Lasse