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实现分页的一个示例
Oct 09 PHP
php一些公用函数的集合
Mar 27 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
symfony表单与页面实现技巧
Jan 26 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
Jun 10 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 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+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
通过C++学习Python
2015/01/20 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
python中dict使用方法详解
2019/07/17 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
自我鉴定写作要点
2014/01/17 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
护士毕业实习感言
2014/03/05 职场文书
财产公证书格式
2014/04/10 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
优秀英文求职信范文
2015/03/19 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
首都博物馆观后感
2015/06/05 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
Python OpenGL基本配置方式
2022/05/20 Python