Short URL implement

來源:互聯網
上載者:User

Few months ago, I introduced a simple algorithmthat allow users to implement their own short URL into their system. Today,I have some spare time so I decided
to write the short URL algorithm'simplementation in PHP.

At first, we define a function called shorturl() thatreceives a URL as the input and returns anarray that contains 4 hashed values (each 6 characters).

function shorturl($input) {
   ...
  // return array of results
}

 

Below is the original pseudocode:

...
  loop2: from 1st 4 bytes to 4th 4 bytes of md5 result
    cast the 4 bytes to an integer
    loop3: for shortCodeChar[0] to shortCodeChar[5]
      use 1st 5 bits of the integer to find the value in codeMap
      remove 5 bits from the integer
    end loop3
    save shortCodeChar as shortCode
    ...
    // Database checking for duplication
  end loop2
...

The following code is written according to thealgorithm above excluding the database checking part for duplication:

function shorturl($input) {  $base32 = array (    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',    'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',    'q', 'r', 's', 't', 'u', 'v', 'w', 'x',    'y', 'z', '0', '1', '2', '3', '4', '5'    );   $hex = md5($input);  $hexLen = strlen($hex);  $subHexLen = $hexLen / 8;  $output = array();   for ($i = 0; $i < $subHexLen; $i++) {    $subHex = substr ($hex, $i * 8, 8);    $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));    $out = '';     for ($j = 0; $j < 6; $j++) {      $val = 0x0000001F & $int;      $out .= $base32[$val];      $int = $int >> 5;    }     $output[] = $out;  }   return $output;}

Sample code to test/use theabove function:

$input = 'http://www.snippetit.com/1';$output = shorturl($input); echo "Input  : $input\n";echo "Output : {$output[0]}\n";echo "         {$output[1]}\n";echo "         {$output[2]}\n";echo "         {$output[3]}\n";echo "\n"; $input = 'http://www.snippetit.com/2';$output = shorturl($input); echo "Input  : $input\n";echo "Output : {$output[0]}\n";echo "         {$output[1]}\n";echo "         {$output[2]}\n";echo "         {$output[3]}\n";echo "\n";

Output:

Input  : http://www.snippetit.com/1Output : h0xg4r         bdr3tw         osk2d3         4azfqa Input  : http://www.snippetit.com/2Output : tm5kxb         ceoj2s         yw3dvl         nrmrxl

The function return an array of 4 elements, youcan use any one of them. The others can be used as alternative unique code for the input when youfound a duplicated code in your database (same code but different input -although it
is unlikely to happen but it will happen). Chances to get aduplicated code is about n/(32^6) or n/1,073,741,824 where n is the number of records in your database.

As you can see, the output results are quiterandom although you only have one character different in the input string. Theoutput is always consistent, for the same input you will always get the sameoutput.

To make the output more unpredictable by theothers, you can scramble the values in the $base32 array or/and add inyour ownprivate keyor/and XOR the value of $val with a value from range0 to 31.

For example toscramble the values in the $base32 array, you canchange the positionof the values or/and replace the value with another (make sure the replacedvalue is URL safe character).

For example to add in private key, you can add in additional stringwhen calling the md5() function, e.g.:

$hex = md5('my-secret-key'.$input.'my-another-secret-key');

For example to XOR the value of $val with valueof 18:

$out .= $base32[$val ^ 18];

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.