gpt4 book ai didi

php - 在 PHP 中为 URL 缩短服务生成代码的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-10-31 22:08:03 24 4
gpt4 key购买 nike

我必须使用这种方式为 URL 缩短服务生成代码

  $code = substr(md5(uniqid(rand(), 1)), 3, 5);

但这总是生成固定长度的代码(在本例中为 5)。

万一数据库中有大量的URL受不了这里的五个符号怎么办?

抱歉英语不好。

最佳答案

您将不得不存储 URL,所以只需要一个表:

  • 网址:id, url

其中id为自增序列,url列为索引。这样每个 URL 都是唯一的。最简单的方法是简单地使用 ID,但您可以使用更短的 ID。

我的建议是将 ID 与基数 62(10 位数字、26 个大写字母、26 个小写字母 = 62)或可能为 64(添加 _ 和 -)相互转换。

我的意思是 1234 实际上是:

1 x 103 + 2 x 102 + 3 x 101 + 4 x 100

并且有一个相当简单的算法可以将数字转换为以 10 为底的形式。所以一个 base 62 的“数字”是:

1234(以 10 为底)= 19 x 621 + 56 x 620 = Jq

如果我的数学是正确的。

以下函数应该可以满足您的需要。

$digits = range(0, 9) + range('A', 'Z') + range('a', 'z')

function from10($base10) {
global $digits;
$ret = '';
$nd = count($digits);
$n = $nd;
while ($base10 > 0) {
$r = $base10 % $n;
$ret .= $digits[$r];
$n = (int)($base10 / $n);
$n *= $nd;
}
return $ret;
}

function to10($baseN) {
global $digits;
$nd = count($digits);
$ret = 0;
$n = $nd;
for ($i=0; $i<strlen($baseN); $i++) {
$ret += $n * $baseN[$i];
$n *= $nd;
}
return $ret;
}

from10() 将 1234 转换为“qJ”(希望如此),to10() 将“qJ”转换为 1234,除非我的数学不对。

数字实际上是以相反的顺序存储的(相当于“一百二十三”写成“321”)因为这样更容易处理而且数字不需要以任何特定顺序排列.

关于php - 在 PHP 中为 URL 缩短服务生成代码的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com