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 相关文章推荐
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
微信支付开发维权通知实例
Jul 12 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP实现微信申请退款功能
Oct 01 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
thinkphp5使用无限极分类
Feb 18 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 PHP
php数值计算num类简单操作示例
May 15 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
隐藏你的.php文件的实现方法
2007/03/19 PHP
PHP.vs.JAVA
2016/04/29 PHP
浅谈JavaScript之事件绑定
2013/07/08 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
js面向对象编程总结
2017/02/16 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python3实现读取chrome浏览器cookie
2016/06/19 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python调用百度REST API实现语音识别
2018/08/30 Python
python dict 相同key 合并value的实例
2019/01/21 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
eBay奥地利站:eBay.at
2019/07/24 全球购物
见习期自我鉴定
2014/01/31 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
教师年度考核评语
2014/04/28 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
党性修养心得体会2016
2016/01/21 职场文书
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python