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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
提高php编程效率技巧
Aug 13 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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
短波的认识
2021/03/01 无线电
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
python读写LMDB文件的方法
2018/07/02 Python
django创建超级用户过程解析
2019/09/18 Python
python实现连连看游戏
2020/02/14 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
python中如何使用虚拟环境
2020/10/14 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
美国知名生活购物网站:Goop
2017/11/03 全球购物
节约用水的口号
2014/06/20 职场文书
三八妇女节寄语
2015/02/27 职场文书
催款函范文
2015/06/24 职场文书
销售会议开幕词
2016/03/04 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python