短网址API设计
来源:互联网 发布:ubuntu ifconfig eth0 编辑:程序博客网 时间:2024/04/27 06:41
短网址服务做得最好的应该就是:bit.ly(包括支持数据统计等) 了。
短网址服务说白了就是URL映射,将较长的URL映射成短字符串。短址本质上是实现了一个映射函数 f(x)-> y 。对于每一个 y, 能够找到唯一的一个 x 使得 f(x) = y。即不能产生一短URL地址对应多个长URL。可能的数据库存储格式为:
ID,int, 自动增长;
LURL,varchar, // 长URL;
SURL, varchar, // 短URL。
现在我们考虑通过如何长URL得到唯一的短URL。
方案一:数据库自增长ID转换进制
使用自增长ID首先是不会产生重复,但是由于自增长ID由于是10进制,就会使URl变得很长,可以采用进制压缩的方式将URL变短。为了更好的提升URL的可读性,需要在制作URL的时候考虑到:
考虑到大小写的字母读音相同,所以暂定都使用大写字母。这样便于口头传播。
考虑到发音相近,可以将字母中的L,R,I,M,N,G,J都去除。(或者再加上B,P)
考虑到字形相同,可以将0和O都去除。便于识别。
于是可用字符为26+10-7-2=2。然后需要确定最小需要的位数:
27^3=19683
27^4=531441
27^5=14348907
27^6=387420489
从上面的数据可以看到,使用了六位就可足以对我们的URL进行加密。相关的算法:略
方案二:URL hash计算
对URL进行处理的时候很容易想到MD5,MD5长度固定、冲突概率小等特性都是优势,但是由于MD5长度为32个字符,所以用来做短网址可能不太合适,那么能不能以MD5为基础,将其字符进行缩短呢。以下为这个方案的具体实现:
将长网址用md5算法生成32位签名串,分为4段,,每段8个字符;
对这4段循环处理,取每段的8个字符, 将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;
将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
这样一个md5字符串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址。
算法内容:略
由于上述算法对Md5进行了处理和截取,所以算法的重复的几率大约是n/(32^6) 也就是n/1,073,741,824(n是数据库中记录的条数),所以不建议使用。
http://stackoverflow.com/questions/742013/how-to-code-a-url-shortener
http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/
- Google短网址的API (阅读:4025)
- 网址缩短服务 (阅读:1834)
- 短网址API设计
- 新浪短网址API接口
- Google短网址的API
- 新浪短网址API接口
- 使用短网址服务--百度的短网址API
- 短网址服务系统 设计
- google短网址服务API函数
- java调用百度短网址api
- 百度,信鸽推送,百度短网址API
- Java调用百度API生成短网址
- 调用百度api 生成短网址
- java调用百度短网址api
- 百度短网址API java HttpClient
- Design TinyURL 设计短网址系统
- 如何设计短网址系统(TinyURL)
- 调用百度短网址API接口进行短网址的转换(Java程序的实现)
- 短网址
- 短网址
- golang中fmt vs log
- android系统sharedUserId: SYSTEM_UID+PHONE_UID+BLUETOOH_UID+LOG_UID+NFC_UID
- 两个数的交换,三种方法实现
- LA5713 减小边权求MST
- 啊哈算法 之 快速排序
- 短网址API设计
- 【并行计算】Linus:为何对象引用计数必须是原子的
- wrong answer 很多情况下是因为题目没看清楚
- Protocol Buffers编码详解,例子,图解
- 邮件激活
- well balanced reporting.The complete real truth nonetheless
- 单点登录
- QT 子窗口监听主窗口信号
- web程序员面试