将PHP字符串从24个字符压缩(缩短)到20个字符

时间:2013-12-02 19:53:17

标签: php mongodb

我目前正在编写一个使用Authorize.net api的PHP应用程序。此API要求客户的唯一ID值小于20个字符。我目前将这个唯一的客户ID存储在Mongo中作为MongoId对象(24个字符)。

有没有办法将24个字符的字符串转换为20个,以便它能满足API要求?

1 个答案:

答案 0 :(得分:0)

从我在您引用的页面上看到的,24个字符是十六进制的。如果customer-id可能是字母数字,您可以使用base_convert来缩短数字。不幸的是,完整的数字是> 32位所以你需要将其部分转换为使其工作:

// Pad with 0's to make sure you have 24 chars
$padded = str_repeat('0', 24 - strlen($mongoId)) . $mongoId;
$leastSignificant = base_convert(substr($padded, 14, 10), 16, 32); // will be 8 chars most
$middleSignificant = base_convert(substr($padded, 4, 10), 16, 32); // will be 8 chars most
$highSignificant = base_convert(substr($padded, 0, 4), 16, 32); // will be 4 chars most

// Concatenate, and make sure everything is correctly padded
$result = str_repeat('0', 4 - strlen($highSignificant)) . $highSignificant .
          str_repeat('0', 8 - strlen($middleSignificant )) . $middleSignificant .
          str_repeat('0', 8 - strlen($leastSignificant )) . $leastSignificant;
echo strlen($result); // Will echo 20

// Reverse the algoritm to retrieve the mongoId for a given customerId