В настоящее время я пишу PHP-приложение, которое использует Authorize.net api. Этот api требует, чтобы уникальное значение идентификатора клиента составляло менее 20 символов. В настоящее время я храню этот уникальный идентификатор клиента в Mongo как объект MongoId (24 символа).
Есть ли способ конвертировать строку из 24 символов в 20, чтобы она соответствовала требованиям API?
Из того, что я вижу на вашей ссылочной странице, 24-символьные шестнадцатеричные. Если идентификатор клиента может быть буквенно-цифровым, вы можете использовать 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