Url Shorten

Stable Version 1.0.0 (OutSystems 11)
Published on 25 Mar (4 weeks ago) by 
Stable Version 1.0.0 (OutSystems 11)
Published on 25 Mar (4 weeks ago) by 
Created on 25 Mar (4 weeks ago)

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".
Read More

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

Haskell

C#

CoffeeScript

Perl


Reviews (0)
Category
Demos & samples, Security & authentication
Support Options
This component is not supported by OutSystems. You may use the discussion forums to leave suggestions or obtain best-effort support from the community, including from Shahaji Nangare who created this component.
Dependencies
See all 2 dependencies
Requirements
Platform:
11.8.0.12006
Database:
All
Stack:
.NET
Component Consumers
No consumers yet.
Weekly Downloads