I want to develop something similar to jsfiddle in where the user can input some data and then “save” it and get a unique random looking url that loads that data.
I don’t want to make the saves sequential because I don’t want anyone to grab all of my entries, as some can be private. However on the server I would like to save it in sequential order.
Is there a function or technique that converts a number into a hash that has 4 charactors without any collisions until (62 * 62 * 62 * 62 === 14776336) entries?
For example the first entry on the server will be named 1 on the server but iUew3 to the user, the next entry will be 2 on the server but ueGR to the user…
EDIT: I’m not sure if it’s obvious but this hash-like function needs to be reversible because when the user requests ueGR the server needs to know to server it file 2
It’s possible to do this, but I would suggest using 64 characters, as that will make it a lot easier. 4 6bit characters = 24bits.
Use a combination of these:
LFSR is highly recommended as it will do a good scrambling. The rest are optional. All of these manipulations are reversible and guarantee that each output is going to be unique.
When you calculated the “shuffled” number simply pack it to a binary string and encode it with
base64_encode.For decoding simply do the inverse of these operations.
Sample (2^24 long unique sequence):
Output:
Note: for URL replace
+and/with-and_.Note: although this works, for a simple scenario like yours it’s probably easier to create a random filename, till it doesn’t exist. nobody cares about the number of the entry.