论坛首页 Java企业应用论坛

短网址算法实现

浏览 11373 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (12) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-23   最后修改:2010-01-23
短网址或微小的网址是用来表示长URL的URL。 例如,http://tinyurl.com/y9nyxza
将重定向到http://www.iteye.com/topic/577820


使用短网址的主要优点:

1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。


实现自己的短网址需要如下步骤:

1.定义您自己的网址映射算法。
2.有一个数据库来存储映射的网址。
3.从数据库的短网址的映射找到原始的URL

我不知道别人是如何创建URL映射算法,但在这里,我将告诉你们,我的简单而快速的短网址实现:

该系统使用6个短码字符来表示任何长度的网址。 有效的字符代码是ASCII 'A'到'Z'和'0'的'5',其中每个字符包含2 ^ 5(32)状态。  6短码字符可用于绘制32 ^ 6(1073741824)的网址

首先,你需要一个数据库表来存储和检索你映射的网址。 


CREATE TABLE mappedURL (的CREATE TABLE mappedURL(
shortCode char(6) not null,
lognURL  text not null,
PRIMARY KEY  shortCodeInd (shortCode),
);

其次,你需要定义一个算法将长的URL映射到短的URL。 以下是建议的算法:


loop1: while true loop1:
  calculate md5 of the URL
  loop2: from 1st 4 bytes to 4th 4 bytes of md5 result loop2:
    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
    if shorCode does not exist in database
      insert the short code and original URL into database
      break loop1:
    else
      retrieve the stored URL from database
      if original URL equals to URL stored in database
        break loop1:
      end if
    end if
  end loop2
  insert '-'
end loop1
return shortCode

Note: codeMap contains value of valid characters from 'a' to 'z' (index 0 to 25) and '0'-'5' (index 26 to 31).

第三,你需要创建一个网页,从数据库的短网址的映射找到原始的URL,并重定向之。

   发表时间:2010-01-23  
<?php
$num = 'zzzzzz';
echo pow(36, 6); // 2176782336
echo base_convert($num, 36, 10); // 2176782335
?>


Long.toString(2176782335L, 36); // zzzzzz


你甚至可以定义到62进制,0-9a-zA-Z。
够用了吧……
0 请登录后投票
   发表时间:2010-01-25  
直接地址重写不行吗?
0 请登录后投票
   发表时间:2010-01-25  
引用

1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。

1、便于记忆么?我倒不觉得,除非网址特别的长,再说了有多少人会专门记忆那么长的网址呢?
2、我觉得这个东西,也就是用于网址的压缩(数据压缩)有用处。
0 请登录后投票
   发表时间:2010-01-25  
lz_cleaner 写道
引用

1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。

1、便于记忆么?我倒不觉得,除非网址特别的长,再说了有多少人会专门记忆那么长的网址呢?
2、我觉得这个东西,也就是用于网址的压缩(数据压缩)有用处。

的确不是为了便于记忆

短地址的目的:像twitter之类的有字符限制,包括短信,
还有我看到过一本纸制的技术数,也写了短地址,方便读者把地址敲到地址栏上
0 请登录后投票
   发表时间:2010-01-25  
urlrewriter
0 请登录后投票
   发表时间:2010-01-25  
网上应该有开源版本的短地址实现,可以参考吧,随即映射偷懒一下可以直接使用MD5或者sha吧,数据库可以使用key-value型,性能和未来的可扩展型可能会好些。
0 请登录后投票
   发表时间:2010-01-25  
目前国内的新浪微博(类twitter)就是用的短网址,不过你在写微博的时候是按长的字符计算字数,发表之后才会换算成短的url,感觉没起到缩短的作用,就是别人看的时候好看一些。
感觉md5算出来的还是长吧,短网址一般固定域名后面就是用5个字符区别网址
1 请登录后投票
   发表时间:2010-01-25   最后修改:2010-01-27
freesky110 写道

使用短网址的主要优点:
1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。


便于记忆不赞同,只是短了。比起来一长串有规律的字符串,它更不容易记忆。
域名申请短点,它就更短了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics