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 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
PHP中date与gmdate的区别及默认时区设置
May 12 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
php封装的单文件(图片)上传类完整实例
Oct 18 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
php的优点总结 php有哪些优点
Jul 19 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
多数据表共用一个页的新闻发布
2006/10/09 PHP
利用PHP实现短域名互转
2013/07/05 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
js实现拖拽功能
2017/03/01 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
Python日志模块logging简介
2015/04/13 Python
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
python批量修改文件编码格式的方法
2018/05/31 Python
学生信息管理系统python版
2018/10/17 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python Pillow Image Invert
2019/01/22 Python
用python实现刷点击率的示例代码
2019/02/21 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
移交协议书
2014/08/19 职场文书
离婚起诉书怎么写
2015/05/19 职场文书