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
Dec 23 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
PHP中的流(streams)浅析
Jul 02 PHP
PHP函数超时处理方法
Feb 14 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
thinkPHP5分页功能实现方法分析
Oct 25 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/07/03 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
详解Python设计模式之策略模式
2020/06/15 Python
巴西本土电商平台:Americanas
2020/06/21 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
高中生期末评语
2014/01/28 职场文书
四风存在的原因分析
2014/02/11 职场文书
安全演讲稿开场白
2014/08/25 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
教师个人培训总结
2015/02/11 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis