0

我正在使用此代码进行简单的加密:

    function idEncrypt($string)
{
    $multiply = 2457;
    $original = array('1', '2','3', '4', '5', '6', '7', '8', '9', '0');
    $replace = array('6', '3', '9', '1', '2', '8', '5', '0', '4', '7');
    $idEncrypt = str_replace($original, $replace, $string);
    //$idEncrypt = $idEncrypt * $multiply;
    return $idEncrypt;      
}

它应该取一个数字,并用 $replace 数组中的正确数字替换它。我输入“234”,得到“441”作为答案,我应该得到“391”。
有什么建议么 ?

4

3 回答 3

2

问题在于str_replace,对于数组中的每个元素,它被一遍又一遍地应用。

对于“234”,首先将 2 替换为 3,然后将 3 替换为 9,然后将 9 替换为 4。

将 3 替换为 9,然后将 9 替换为 4。

最后,将 4 替换为 1,创建“441”。

于 2012-04-30T16:32:39.543 回答
1

重要的一点可以在str_replace函数的文档中找到:

更换订单陷阱

因为 str_replace() 从左到右替换,所以在进行多次替换时,它可能会替换先前插入的值。另请参阅本文档中的示例。

对于您简单的“加密”,您想使用 PHP 的strtr功能:

function transform($string) {
  $original = '1234567890';
  $replace = '6391285047';
  return str_replace($string, $original, $replace);
}

注意。请不要自己做“加密”功能。使用成熟的、经过良好测试的算法和库。

于 2012-04-30T16:33:11.393 回答
1

尝试strtr改用。您需要将代码更改为:

$original = "1234567890";
$replace = "6391285047";

这就是绕过str_replace.

于 2012-04-30T16:35:29.833 回答