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 分页函数multi() discuz
Jun 21 PHP
php报表之jpgraph柱状图实例代码
Aug 22 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP正则验证Email的方法
Jun 15 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
PHP 计算两个特别大的整数实例代码
May 07 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/06/18 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python之reload流程实例代码解析
2018/01/29 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
科研先进个人典型材料
2014/01/31 职场文书
顶撞老师检讨书
2014/02/07 职场文书
总经理岗位职责描述
2014/02/08 职场文书
简单租房协议书范本
2014/08/20 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
售房协议书范本2014
2014/10/23 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
解决vue中provide inject的响应式监听
2022/04/19 Vue.js
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python