2014-10-07 2 views
-3

예 : 5 자리 문자를 암호화하고 싶습니다. 12345 ~ 3 자까지 가능합니까?5 자리 숫자를 3 자 문자열로 인코딩하는 방법

+0

무엇이 ............? – Ohgodwhy

+0

나는 encode를 의미한다고 생각한다. 암호화는 키를 사용합니다. –

+0

예를 들어 5 자리의 난수가 있습니다. 12345, 내 요구 사항은 그것을 암호화하고 5 자리 대신 3자를 표시하는 것입니다. PHP로 가능합니까? 그렇다면 ASCII 문자없이 사용자 정의 encyption을 사용할 수 있습니까? –

답변

3

base_convert으로 할 수 있습니다.

echo base_convert('12345', 10, 36); // 9ix 

다시

echo base_convert('9ix', 36, 10); // 12345 

그러나이 방법은 제한 번호를 가지고 : 당신이 제한없이 5 자리 숫자를 변환하는 데 도움 기능을 얻을 수있는 의견에서 46,655

.

$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

관련 문제