Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em Logica para acertar uma senha...


Luiz Antonio

Pergunta

ola pessoal, tudo bem?

Preciso de uma ajuda...

Estou criando uma area de promoções em um site...e tem um tipo de jogo e quem acertar uma senha leva o brinde...

Quando o usuario digitar a senha de 4 digitos, se ele não acertar a senha, a programação deve dizer quantos numeros ele acertou...não precisa ser da ordem certa...mas apenas o numero...tipo você acertou 3 numeros da senha ...

Qual a melhor forma de fazer esta programação? Pensei em pegar o numero digitado pelo usuario e com a funçao substr, comparar numero por numero... e com a função strpos verificar se existe o numero na senha ... se tiver soma em um contador... mas o meu problema é se tiver numeros iguais na senha vai dar o numero errado do contador. Por exemplo a senha é 5452, e o cara digitou 5196 ... o usuario na verdade acertou apenas um cinco...mas no contador vai estar 2... segue o codigo:

$senha = 5452; // Senha no banco de dados
                       $senhadigitada = $_POST['senhadigitada']; // Senha digitada pelo usuario         
                                $verifica1 = strpos($senha, substr($senhadigitada, 0, 1));
                if($verifica1){
                    $contador= $contador + 1;
                }
                
                $verifica2 = strpos($senha, substr($senhadigitada, 1, 1));
                if($verifica2){
                    $contador= $contador + 1;
                }

                $verifica3 = strpos($senha, substr($senhadigitada, 2, 1));
                if($verifica3){
                    $contador= $contador + 1;
                }

                $verifica4 = strpos($senha, substr($senhadigitada, 3, 2));
                if($verifica4){
                    $contador= $contador + 1;
                }

alguém sabe uma forma mais correta de fazer esta programação?

Obrigado pessoal....

Editado por Luiz Antonio
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Hi.

Que tal quebrar a string em um array e ir comparando os índices?

Fiz uma funçãozinha de exemplo pra ti.

function comp($a, $b) {
    if(strlen($a) != strlen($b)) return 0;
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i = 0; $i < count($a); $i++)
        if($a[$i] == $b[$i])
            $c += 1;
    return $c;
}

$senha = 5452;
$in = 5196;

var_dump(comp($senha, $in));

Se não for isso, me avisa que eu não entendi direito. =P

Se precisar de explicação, também é só falar.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0
Hi.

Que tal quebrar a string em um array e ir comparando os índices?

Fiz uma funçãozinha de exemplo pra ti.

function comp($a, $b) {
    if(strlen($a) != strlen($b)) return 0;
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i = 0; $i < count($a); $i++)
        if($a[$i] == $b[$i])
            $c += 1;
    return $c;
}

$senha = 5452;
$in = 5196;

var_dump(comp($senha, $in));

Ola amigo, muito obrigado pela ajuda...mas ainda não esta funcionando corretamente...pois não é para comparar apenas pela posição...tenho que passar de todas as posições... tipo assim... a senha é 1234, digitei 4321 ... acertei portanto os 4 numeros...porem as posições que não estão corretas... mas tenho que exibir o numero 4 como resposta...que o usuario acertou todos os numeros...entendeu? Ele não acertou a senha correta...mas é uma pista que ele acertou todos os numeros e agora precisa acertar a posição dos numeros... Essa é a dificuldade ...

Se não for isso, me avisa que eu não entendi direito. =P

Se precisar de explicação, também é só falar.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Hmm, acho que saquei.

Vê aí agora:

function comp($a, $b) {
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i=0;$i<count($a);$i++){
        for($j=0;$j<count($b);$j++)
            if($a[$i] == $b[$j])
                $c += 1;
    }
    return $c;
}

$senha = 1234;
$in = 4321;

echo 'Você acertou: ', comp($senha, $in), "\n";

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0
Hmm, acho que saquei.

Vê aí agora:

function comp($a, $b) {
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i=0;$i<count($a);$i++){
        for($j=0;$j<count($b);$j++)
            if($a[$i] == $b[$j])
                $c += 1;
    }
    return $c;
}

$senha = 1234;
$in = 4321;

echo 'Você acertou: ', comp($senha, $in), "\n";

[]'s

valeu Fvox tá quase certo, porem quando o usuario digita numeros repetidos da problema... por exemplo:

$senha = 1234;

$in = 4444;

O sistema diz que você acertou 4 numeros...mas na verdade acertou apenas 1 ... ai que esta o problema entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0

Nada que um break no loop não resolva... =p

function comp($a, $b) {
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i=0;$i<count($a);$i++)
        for($j=0;$j<count($b);$j++)
            if($a[$i] == $b[$j]){
                $c += 1;
                break;
            }
    return $c;
}

$senha = 1234;
$in = 4444;

echo 'Você acertou: ', comp($senha, $in), "\n";

[]'s

Editado por Fvox
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...