Обратный алгоритм

Я использовал этот алгоритм для сжатия моего MongoID до 20 символов отсюда: Сжать (сократить) строку PHP от 24 символов до 20.
Но у меня возникли проблемы, чтобы изменить его и вернуть мои 24 символа.

Может кто-нибудь дать мне несколько рекомендаций.

Код, который я использовал:

$padded = str_repeat('0', 20 - strlen($purchase_id)) . $purchase_id;
$leastSignificant = base_convert(substr($padded, 14, 10), 32, 16); // will be 8 chars most

$middleSignificant = base_convert(substr($padded, 4, 10), 32, 16); // will be 8 chars most

$highSignificant = base_convert(substr($padded, 0, 4), 32, 16); // 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;

Я получаю ошибку: Warning: str_repeat(): Second argument has to be greater than or equal to 0

Я получил наименьшее и высокое значение, правильное для моего исходного MongoID. Но не средний, значительный. И я получаю 25 символов вместо 24.

0

Решение

Понял!

// Pad with 0's to make sure you have 20 chars
$padded = str_repeat('0', 20 - strlen($purchase_id)) . $purchase_id;

$leastSignificant = base_convert(substr($padded, 12, 8), 32, 16); // will be 10 chars most
var_dumped($leastSignificant,false);

$middleSignificant = base_convert(substr($padded, 4, 8), 32, 16); // will be 10 chars most
var_dumped($middleSignificant,false);

$highSignificant = base_convert(substr($padded, 0, 4), 32, 16); // will be 4 chars most
var_dumped($highSignificant,false);

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

Другие решения

Других решений пока нет …