Eu estou usando este código para fazer criptografia simples:
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;
}
é suposto obter um número e substituí-lo pelo número correto de $ replace array. Eu estou inserindo "234" e tenho "441" para uma resposta, onde eu deveria ter "391".
alguma sugestão ?
Respostas:
2 para resposta № 1O problema é que str_replace
está sendo aplicado repetidamente, para cada elemento na matriz.
Para "234", o primeiro 2 está sendo substituído por 3 e, em seguida, 3 está sendo substituído por 9 e, em seguida, 9 está sendo substituído por 4.
O 3 está sendo substituído por 9 e, em seguida, o 9 é substituído por 4.
Finalmente, o 4 está sendo substituído por 1, criando "441".
1 para resposta № 2
O bit importante é encontrado nos documentos do str_replace
função:
Choca de ordem de substituição
Como str_replace () substitui da esquerda para a direita, ele pode substituir um valor inserido anteriormente ao fazer várias substituições. Veja também os exemplos neste documento.
Para o seu simples "criptografia", você quer usar o PHP "s strtr
função:
function transform($string) {
$original = "1234567890";
$replace = "6391285047";
return str_replace($string, $original, $replace);
}
nb. Por favor, não cozinhe suas próprias funções de "criptografia" Use algoritmos e bibliotecas estabelecidos e bem testados.
1 para resposta № 3
Tente usar strtr
em vez de. Você precisará alterar seu código para ter:
$original = "1234567890";
$replace = "6391285047";
E isso é se dar bem com a pegadinha de str_replace
.