  # Url Shorten

Stable version 1.0.1 (Compatible with OutSystems 11)
Published on 15 Jun by
0.0
(0 ratings) # Url Shorten

Details
This will help you URL shorten service where you can write a long URL into an input field and the service shortens the URL to "http://www.example.org/abcdef".

I have a database table with three columns:

1. id, integer, auto-increment
2. long, string, the long URL the user entered
3. short, string, the shortened URL (or just the six characters)

Demo Url : Theoretical background

You need a Bijective Function f. This is necessary so that you can find a inverse function g('abc') = 123 for your f(123) = 'abc' function. This means:

There must be no x1, x2 (with x1 ? x2) that will make f(x1) = f(x2),

and for every y you must be able to find an x so that f(x) = y.

How to convert the ID to a shortened URL

Think of an alphabet we want to use. In your case, that's [a-zA-Z0-9]. It contains 62 letters.

Take an auto-generated, unique numerical key (the auto-incremented id of a MySQL table for example).

For this example, I will use 12510 (125 with a base of 10).

Now you have to convert 12510 to X62 (base 62).

12510 = 2×621 + 1×620 = [2,1]

This requires the use of integer division and modulo. A pseudo-code example:

digits = []

while num > 0

remainder = modulo(num, 62)

digits.push(remainder)

num = divide(num, 62)

digits = digits.reverse

Now map the indices 2 and 1 to your alphabet. This is how your mapping (with an array for example) could look like:

0  ? a

1  ? b

...

25 ? z

...

52 ? 0

61 ? 9

With 2 ? c and 1 ? b, you will receive cb62 as the shortened URL.

http://shor.ty/cb

How to resolve a shortened URL to the initial ID

The reverse is even easier. You just do a reverse lookup in your alphabet.

e9a62 will be resolved to "4th, 61st, and 0th letter in the alphabet".

e9a62 = [4,61,0] = 4×622 + 61×621 + 0×620 = 1915810

Now find your database-record with WHERE id = 19158 and do the redirect.

Example implementations (provided by commenters)

C++

Python

Ruby