Today, I created a UID Generator function for my online-clipboard application. Actually, I want a unique id for Redis / DB where i can store data like type of file(text, non-text), sever id, epoch time, some my random number, user_machine id.function generateShortSnowflakeId($type, $epoch, $serverNumber){
$timestamp = (microtime(true) - $epoch) * 1000;
$randomBits = mt_rand(0, 4095); // Generate 12 random bits
$id = (int)(($type << 44) | ((int)$timestamp << 12) | $serverNumber | $randomBits);
return custom_encoder($id);} //by the way this generateShortSnowflakeId created by Haiku on request😅 $type = 1;
$epoch = 1609459200;
$serverNumber = 1;generateShortSnowflakeId($type, $epoch, $serverNumber);
So, i was remeber Alex Yu's Book (System Design Interview) where he said something how to create a unique id in which he said a lot of different ideas but for my this is most suitable one right now.
The only issue it has earlier is that it's too long i want shorter id. So, added a base 62 encoder Custom Encoder.function custom_encoder($id){
$base62Chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$shortId = '';
while ($id > 0) {
$shortId = $base62Chars[$id % 62] . $shortId;
$id = (int)($id / 62);
}Now, I have to think Little bit customising Ratelimiter, adding few attribute in User Activity log to controll/limit no of read and write operations by users, storage of non-text data third party or same server and think about compression methods and parsing this data into my needs
return $shortId;
}