gpt4 book ai didi

php - 如何将(大)整数映射到(小尺寸(带有 PHP 的字母数字字符串?(Cantor?)

转载 作者:行者123 更新时间:2023-12-03 20:37:26 24 4
gpt4 key购买 nike

我不知道如何在 PHP 中以最佳方式执行以下操作:在数据库中,我有具有唯一 ID 的消息,例如 19041985。现在,我想在短 URL 服务中引用这些消息,但不使用生成的哈希值,而是简单地“计算”原始 ID。

换句话说,例如:http://short.url/sYsn7 应该让我计算访问者想要请求的消息 ID。

为了让它更明显,我在 PHP 中编写了以下代码来生成这些“字母数字 ID 版本”,当然,反过来我可以计算原始消息 ID。

问题是:这是执行此操作的最佳方式吗?我几乎不这么认为,但想不出其他任何东西。

$alphanumString = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
for($i=0;$i < strlen($alphanumString);$i++)
{
$alphanumArray[$i] = substr($alphanumString,$i,1);
}



$id = 19041985;

$out = '';
for($i=0;$i < strlen($id);$i++) {

if(isset($alphanumString["".substr($id,$i,2).""]) && strlen($alphanumString["".substr($id,$i,2).""]) > 0) {
$out.=$alphanumString["".substr($id,$i,2).""];
} else {
$out.=$alphanumString["".substr($id,$i,1).""];
$out.=$alphanumString["".substr($id,($i+1),1).""];
}
$i++;
}

print $out;

最佳答案

echo trim(base64_encode(pack("L", 19041987)), "=");
print_r(unpack("L", base64_decode("w44iAQ")));
  • Pack 将数字改为四个字节,非常短但不可读。
  • Base64_encode 将四个字节更改为一些更易于人类阅读的字符。
  • 它附加了一些不需要的=字符。

如果你执行 base64_encode(19041987),你会得到字符串“19041987”的编码,它并不短。

关于php - 如何将(大)整数映射到(小尺寸(带有 PHP 的字母数字字符串?(Cantor?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997041/

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