Skip to content
Advertisement

Base10 to base64 url shortening

I’m coding an url shortener function for a project in which I’m learning php, here is the code (btw I suppose that global here is not a good thing to do :P):

JavaScript

The code is taken from this Wikipedia article and adapted to php. My problem is that when I pass a multiple of 64 to the function I get a wrong (for my purpose) result, for instance 128 returns b which is not correct, it should have been aaa, but that’s too long for a 3-digit number.

Also I’m starting to think that there’s something wrong in this code, if I pass 1’000’000’000’000 as $id I get nItOq… I feel it’s wrong because a url shortening service like bit.ly returns a 6 number id if I use it, and I don’t think that this algorithm is better than theirs.

So, two questions:

  • do you spot any bug in the above code?
  • how to manage 64-multiple ids? Do I have to just ignore them and pass to the next one?

Advertisement

Answer

Just a couple of little tweaks needed, the main two were to make the the alphabet zero indexed rather than one-indexed, and to subtract the remainder from the id before dividing

JavaScript

and here’s a further modified version which… well I just like

JavaScript

EDIT: sorted concatenation to be the same as the OPs

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement