我正在使用此代码进行简单加密:
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”。
有什么建议吗?
答案 0 :(得分:2)
问题在于,对于数组中的每个元素,反复应用str_replace
。
对于'234',前2替换为3,然后3替换为9,然后9替换为4.
3替换为9,然后9替换为4。
最后,4被替换为1,创建'441'。
答案 1 :(得分:1)
重要的一点可以在str_replace
函数的文档中找到:
替换订单问题
因为str_replace()从左向右替换,所以在执行多次替换时,它可能会替换先前插入的值。另请参阅本文档中的示例。
对于简单“加密”,您希望使用PHP的strtr
函数:
function transform($string) {
$original = '1234567890';
$replace = '6391285047';
return str_replace($string, $original, $replace);
}
NB。请不要自己做“加密”功能。使用经过充分测试的成熟算法和库。
答案 2 :(得分:1)