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框架的性能
Jan 10 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
php生成html文件方法总结
Dec 01 PHP
php猴子选大王问题解决方法
May 12 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
php中各种定义变量的方法小结
Oct 18 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP实现图片压缩
Sep 09 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
php变量与字符串的增删改查操作示例
May 07 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中逗号与点号的区别
2013/08/05 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
分析javascript原型及原型链
2018/03/18 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python的几种开发工具介绍
2007/03/07 Python
python 图片验证码代码
2008/12/07 Python
python dict remove数组删除(del,pop)
2013/03/24 Python
python单元测试unittest实例详解
2015/05/11 Python
Python pandas常用函数详解
2018/02/07 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
班级年度安全计划书
2014/05/01 职场文书
安全生产宣传标语
2014/06/06 职场文书
工作收入证明模板
2015/06/12 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
pandas取dataframe特定行列的实现方法
2021/05/24 Python
基于tensorflow权重文件的解读
2021/05/26 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android
详解JAVA的控制语句
2021/11/11 Java/Android