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 06 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
php微信开发之图片回复功能
Jun 14 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 PHP
Laravel的加密解密与哈希实例讲解
Mar 24 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执行速度全攻略(下)
2006/10/09 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
pageGroup.js实现分页功能
2019/07/27 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
requests和lxml实现爬虫的方法
2017/06/11 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
妈妈的账单教学反思
2014/02/06 职场文书
销售主管岗位职责
2014/02/08 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
民事纠纷协议书
2016/03/23 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL