반전 기능 :베이스 38 변환
문제
다음 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으로 변환하는 방법을 묻고 있습니까? 수치 알고리즘은 다음과 같습니다.
- n을 기본 10의 새 숫자로하자 n을 0으로 설정하십시오.
- X를 기본 38에서 원래 숫자로하자.
- n을 38로 곱합니다.
- D를 X의 가장 중요한 (가장 왼쪽) 숫자로하자.
- t를 기본 10에서 d의 값으로하자.
- N에 t를 추가하십시오.
- x에서 d를 제거합니다 (x x는 이제 1 자리가 짧습니다).
- X가 비어 있으면 GOTO 10.
- GOTO 3.
- 완전히 변환 된베이스 10 숫자입니다.
이제 수학을 이해 했으므로 이러한 단계를 PHP 기능으로 변환하는 것이 매우 간단해야합니다.
제휴하지 않습니다 StackOverflow