문제

다음 PHP 함수의 반전 기능이 어떻게 있는지 말해 줄 수 있습니까?

<?php
function id2secure($old_number) {
    $alphabet_en = '1357902468acegikmoqsuwybdfhjlnprtvxz-_';
    $new_number = '';
    while ($old_number > 0) {
        $rest = $old_number%38;
        if ($rest >= 38) { return FALSE; }
        $new_number .= $alphabet_en[$rest];
        $old_number = floor($old_number/38);
    }
    $new_number = strrev($new_number);
    return $new_number;
}
echo id2secure(172293);
?>

미리 감사드립니다!

도움이 되었습니까?

해결책

이것은 안전합니다 :) 그것을 깨는 데 몇 분이 걸렸습니다. 여기 당신은 간다,

function secure2id($new_number) {
        $alphabet_en = '1357902468acegikmoqsuwybdfhjlnprtvxz';
        $old_number = 0;
        $new_number = strrev($new_number);
        $len=strlen($new_number);
        $n=0;
        $base=1;
        while($n<$len){
            $c=$new_number[$n];
            $index = strpos($alphabet_en, $c);
            if ($index === false)
                 break;
            $old_number += $base * $index;
            $base *= 38;
            $n++;
        }
        return $old_number;
}

다른 팁

이 코드를 테스트하지는 않았지만 작동 할 수 있습니다.

<?php function secure2id($sr)
{
  $s = strrev($sr);
  $alpha = '1357902468acegikmoqsuwybdfhjlnprtvxz';
  $alpha2num = array();
  $n = strlen($alpha);
  for($i = 0; $i < $n; $i++)
  {
    $alpha2num[$alpha[$i]] = $i;
  }
  $rez = 0;
  $n = strlen($s);
  $b = 1;
  for($i = 0; $i < $n; $i++)
  {
    $rez += $b * $alpha2num[$s[$i]];
    $b *= 38;
  }
  return $rez;
} ?>

`

베이스 38을베이스 10으로 변환하는 방법을 묻고 있습니까? 수치 알고리즘은 다음과 같습니다.

  1. n을 기본 10의 새 숫자로하자 n을 0으로 설정하십시오.
  2. X를 기본 38에서 원래 숫자로하자.
  3. n을 38로 곱합니다.
  4. D를 X의 가장 중요한 (가장 왼쪽) 숫자로하자.
  5. t를 기본 10에서 d의 값으로하자.
  6. N에 t를 추가하십시오.
  7. x에서 d를 제거합니다 (x x는 이제 1 자리가 짧습니다).
  8. X가 비어 있으면 GOTO 10.
  9. GOTO 3.
  10. 완전히 변환 된베이스 10 숫자입니다.

이제 수학을 이해 했으므로 이러한 단계를 PHP 기능으로 변환하는 것이 매우 간단해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top