2014-10-07 3 views
-3

Я хочу зашифровать символ из 5 цифр, например. 12345 до 3 символов, возможно ли это?Как закодировать 5-значный номер до строки с тремя символами

+0

Что ............? – Ohgodwhy

+0

Я думаю, вы имеете в виду кодировку. Шифрование осуществляется с помощью ключей. –

+0

У меня есть 5-значное случайное число, например. 12345, мое требование - зашифровать его и показать только 3 символа вместо 5 цифр. Возможно ли это с помощью php, если нет, то мы можем использовать пользовательский encyption без символов ASCII. –

ответ

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 == '') 
    { 
     $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 != '') 
     $base10=convBase($numberInput, $fromBaseInput, ''); 
    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; 
} 
+0

Привет @sectus, спасибо за помощь, ваше решение решает мою половину проблемы. У меня есть еще один запрос, теперь, как снова конвертировать '9ig' в '12345', значит, мне также нужно расшифровать, спасибо заранее. –

+0

@sanjaykumar, просто замените аргументы. – sectus

+0

@sanjaykumar, новый функция добавлен. – sectus

Смежные вопросы