设为首页 - 加入收藏
广告 1000x90
您的当前位置:主页 > 网络营销 > 正文

php短链接算法,源码分享

来源:引流技巧 编辑:爱短链 时间:2025-08-12

短链接的好处:1、需要内容;2、用户友好;3、易于管理。


如何实现,大概分三步:

1、定义一个可以将长URL映射成短字符串的URL映射算法;

2、使用存储(数据库?NoSQL?)来存储完成的映射;

3、实现自己的 URL 映射算法;


总的来说,第三步是让我们头疼的问题,如何将一个长的 URL 字符串映射成一个较短的字符串。我总结了三种方式:


常见的实现

我想你之前学过十进制和二进制的转换,或者十进制和十六进制的转换,所以为了更短,我们可以用62位十六进制,转码一个数字ID,转成短字符串.


这种方式的缺点是无法保证所有的链接都是固定长度的比特短链接分析归纳总结:php短链接分析,php短链接算法收集分析,在高并发的情况下,如何保证快速分发是个问题。


具体实现方式:

/**

* 使用十六进制对数字ID的短链接进行编码,缺点是不能保证每个短链接都是固定长度的

* @param 整数 $integer

* @param 字符串 $base

*/

私有函数 getShortenedURLFromID ($integer, $base = ALLOWED_CHARS)

{

$length = strlen($base);

while($integer > $length - 1)

{

$out = $base[fmod($integer, $length)] 。 $out;

$integer = floor($integer / $length);

}

返回 $base[$integer] 。 $out;

}

/**

* 解码十六进制编码的短链接

*

* @作者王世强

* @param 字符串 $string

* @param 字符串 $base

*/

私有函数getIDFromShortenedURL($string, $base = ALLOWED_CHARS)

{

$length = strlen($base);

$size = strlen($string) - 1;

$string = str_split($string);

$out = strpos($base, array_pop($string));


php短链接


foreach($string as $i => $char)

{

$out += strpos($base, $char) * pow($length, $size - $i);

}

返回 $out;

}


算法说明:使用6个字符来表示短链接,我们在ASCII字符中使用'a'-'z','0'-'5',一共32个字符为一组。每个字符有32个状态,6个字符可以表示32^6(1073741824),那么这6个字符的获取方法如下:


md5传入的长URL得到一个32位的字符串,变化很大,是16的32次方,基本保证唯一性。将 32 位分成四部分PHP短链接,每部分有 8 个字符。这时候概率就变成了16的8次方,也就是4294967296,这个数碰撞的概率比较小。关键是后续处理。我们把这个8位字符看成一个16进制整数,即1*('0x'.$val),然后取0-30位,每组5个,计算出他的整数值,然后映射到我们中准备好的32个字符,终于可以得到一个6位的短链接地址了。


PHP短链接实现如下:

函数缩短($long_url)

{

$base32 = "abcdefghijklmnopqrstuvwxyz012345";

$hex = md5($long_url);

$hexLen = strlen($hex);

$subHexLen = $hexLen / 8;

$output = 数组();

for($i = 0;$i < $subHexLen;$i++)

{

$subHex = substr($hex, $i * 8, 8);

$subHex = 0x3FFFFFFF & ( 1 * ('0x' . $subHex ) );

$out = '';

for($j = 0;$j < 6;$j++)

{

$val = 0x0000001F & $int;

$out .= $base32[$val];

$int = $int >> 5;

}

$output[] = $out;

}

返回$输出;

}


双力实现

下面的函数使用纯随机的方式生成短链接,虽然我们可以通过查询操作保证短链接不被重用,但是……这样真的靠谱吗~~

函数随机($length, $pool = '') {

$random = '';

if (empty($pool)) { $pool = 'abcdefghkmnpqrstuvwxyz'; $池 .=

'23456789'; }

srand ((double)microtime()*1000000);

for($i = 0; $i < $length; $i++) { $random .=

substr($pool,(rand()%(strlen ($pool))), 1); }

返回 $random;

}

技术标签:短链接、短网址、地图、哈希


以上就是关于《php短链接算法,源码分享》的全部内容了,感兴趣的话可以点击右侧直接使用哦!》》在线短链接生成

相关推荐:

栏目分类

微商引流技巧网 www.yinliujiqiao.com 联系QQ:1716014443 邮箱:1716014443@qq.com

Copyright © 2019-2024 强大传媒 吉ICP备19000289号-9 网站地图 rss地图

Top