Hi,
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 http://stackoverflow.com/questions/529647/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