php实现的短网址算法分享


Posted in PHP onJune 20, 2014

每个网址用6个字符代替,(6^32) 最多可以拥有1,073,741,824个短网址。
当然,你还可以记录更详细的信息,如访问记录,创建时间等。
如果真不够用了,还可以删掉很久不用的。

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;

}

测试代码:

$input = 'https://3water.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 = 'https://3water.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";

输出:

Input : https://3water.com/1

Output : h0xg4r

bdr3tw

osk2d3

4azfqa

 

Input : https://3water.com/2

Output : tm5kxb

ceoj2s

yw3dvl

nrmrxl
PHP 相关文章推荐
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
php生成短域名函数
Mar 23 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
基于swoole实现多人聊天室
Jun 14 PHP
tp5递归 无限级分类详解
Oct 18 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 #PHP
php写的AES加密解密类分享
Jun 20 #PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 #PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 #PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 #PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 #PHP
PHP扩展CURL的用法详解
Jun 20 #PHP
You might like
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
PHP5函数小全(分享)
2013/06/06 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
联想台湾官网:Lenovo TW
2018/05/09 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
GC是什么?为什么要有GC?
2013/12/08 面试题
学生实习自我鉴定
2013/10/11 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
2014年商场工作总结
2014/11/22 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
干部培训工作总结2015
2015/05/25 职场文书
机关工会工作总结2015
2015/05/26 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android