Я хочу зашифровать 5-значный символ, например, 12345
до 3 символов, это возможно?
Вы могли бы сделать это с base_convert.
echo base_convert('12345', 10, 36); // 9ix
и назад
echo base_convert('9ix', 36, 10); // 12345
Но этот подход имеет ограничение номер: 46655
Из комментариев вы можете получить функцию, которая поможет вам конвертировать 5-значное число без ограничений.
$alphbet_47 = implode(array_merge(range(0, 9), range('a', 'z'), range('A', 'K')));
$alphbet_10 = implode(range('0', '9'));echo convBase('12345', $alphbet_10, $alphbet_47) . PHP_EOL; // 4kN
// KKK the biggest number of 47 base system. 10 base representation of its is more than any 5 digit number
echo convBase('KKK', $alphbet_47, $alphbet_10) . PHP_EOL; // 103822
function convBase($numberInput, $fromBaseInput, $toBaseInput)
{
if ($fromBaseInput==$toBaseInput) return $numberInput;
$fromBase = str_split($fromBaseInput,1);
$toBase = str_split($toBaseInput,1);
$number = str_split($numberInput,1);
$fromLen=strlen($fromBaseInput);
$toLen=strlen($toBaseInput);
$numberLen=strlen($numberInput);
$retval='';
if ($toBaseInput == '0123456789')
{
$retval=0;
for ($i = 1;$i <= $numberLen; $i++)
$retval = bcadd($retval, bcmul(array_search($number[$i-1], $fromBase),bcpow($fromLen,$numberLen-$i)));
return $retval;
}
if ($fromBaseInput != '0123456789')
$base10=convBase($numberInput, $fromBaseInput, '0123456789');
else
$base10 = $numberInput;
if ($base10<strlen($toBaseInput))
return $toBase[$base10];
while($base10 != '0')
{
$retval = $toBase[bcmod($base10,$toLen)].$retval;
$base10 = bcdiv($base10,$toLen,0);
}
return $retval;
}
Других решений пока нет …