用PHP反转自定义基本编码

时间:2014-06-13 19:13:48

标签: php base-conversion

我有一个程序使用自定义基本数组将整数编码为随机查找,唯一,最大5个字符的字符串。我想将该字符串解码为整数。不知道如何做到这一点。

代码:

function intToAlphaBaseN($n, $baseArray) {
 $l=count($baseArray);
 $s = '';
 for ($i = 1; $n >= 0 && $i < 6; $i++) {
  $s =  $baseArray[($n % pow($l, $i) / pow($l, $i - 1))].$s;
  $n -= pow($l, $i);
 }
 return $s;
}

$alpha=array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '2', '3', '4', '5', '6', '7', '8', '9');
$number = 1234;
echo("Number: " . $number . " Converted: " . intToAlphaBaseN($number, $alpha)); 

输出: 编号:1234已转换:afu

希望能够解码类似“afu”的内容。

2 个答案:

答案 0 :(得分:0)

你可能正在重新发明这个问题,除此之外,你应该向我们证明你在寻求帮助之前实际尝试实现它(显示一些代码)。

我建议您阅读 base_convert PHP文档,以及文档后的第一条评论。 http://www.php.net/manual/en/function.base-convert.php

否则这里是一个(未经测试的)基本解码的实现(在看到Jon的评论之后,我不确定你的函数是否实际进行了基本编码):

function alphaBaseNToInt($alpha, $baseArray) {
    $result = 0;
    $l = count($baseArray);

    for ($i = strlen($alpha) - 1; $i >= 0; --$i)
        $result = $result * $l + array_search($alpha[$i], $baseArray);

    return $result;
}

答案 1 :(得分:0)

不,你不能将字符串解码为数字,因为你不知道函数中$n的最后一个值。

例如,最后一个数组索引是0'a')和$i=strlen('afu');

0=$n % pow($l, $i) / pow($l, $i - 1)

0=$n % 39304 / 1156

$n=[0,1155]+39304*c;其中c=0,1,2,3...$n是周期中$n的最后一个值。

当您找到上一个$n值时,您可以通过在减少周期中对pow($ l,$ i)求和来找到完整的$number

$npow($l, 1) + pow($l, 2)之间的完整pow($l, 1) + pow($l, 2) + pow($l, 3)位置。