Captcha calcul / caractère à la xième position d'une chaîne.

Description

Suite au problème qu'il y a avec les captcha à image ( problème visuel ), j'ai fais 2 autres types de captcha.

Captcha n°1 :
Il génère une chaîne de x caractères aléatoire( minuscule, majuscule ), et un nombre aléatoire y.
La personne doit écrire le caractère qui se trouve à la position y de la chaîne x ( les minuscules sont différenciés des majuscules lors de la comparaison )

Captcha n°2 :
Un calcul aléatoire est généré (+,-,*,/) si c'est une division, le calcul doit être arrondi à l'entier par défaut ( un exemple s'affiche donc )

Source / Exemple :


<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<title>Captcha</title>
</head>

<body>

<?php

srand();

echo "<u>Captcha 1</u><br /><br />";
$caracteres = array('A','Z','E','R','T','Y','U','I','O','P','Q','S','D','F','G','H','J','K','L','M','W','X','C','V','B','N','a','z','e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n');
$mini = rand(5,10);
$maxi = rand(10,20);
$longueurdelachaine = rand($mini,$maxi);
for($i = 1; $i <= $longueurdelachaine; $i++)
{
	$chaine .= $caracteres[rand(0,51)]; //on concatène à chaque fois la variable $chaine
}

$position = rand(5,$longueurdelachaine);
$indice = $position -1;

$_SESSION['resultatcaptcha1'] = substr($chaine, $indice, 1); //on extrait UN caractère à la position $indice

echo "Voici la chaîne de caractère : <b>$chaine</b><br />";
echo "Quel est le caractère à la position <b>$position</b> ?<br /><br />";
?>

<form method="post" action="verificationcaptcha1.php">
	Votre réponse : <input type="text" name="reponsecaptcha1" value="" />
	<input type="submit" value="Valider" />
</form>

<?php

echo "<br /><u>Captcha 2</u><br /><br /><br />";
$signes = array('-','+','*','/');
$nombre1 = rand(100,200);
$nombre2 = rand(1,100);
$lesigne = $signes[rand(0,3)];

$calcul = "$nombre1$lesigne$nombre2"; //pour afficher le calcul sans le calculer

echo "Combien font : <b>$calcul</b><br />";

if($lesigne == '/')
{
	$resultat = $nombre1/$nombre2;
	echo "Arrondissez à l'entier défaut.<br />";
	echo "<u>Exemple</u><br /> Pour (0 <= x <= 4), 12.x donnera 12<br />Pour (5 <= x <= 9), 12.x donnera 13<br /><br />";
}
else
	if($lesigne == '*')
		$resultat = $nombre1*$nombre2;
	else
		if($lesigne == '+')
			$resultat = $nombre1+$nombre2;
		else
			$resultat = $nombre1-$nombre2;

$_SESSION['resultatcaptcha2'] = round($resultat); //arrondi à l'entier par défaut.
?>

<form method="post" action="verificationcaptcha2.php">
	Votre réponse : <input type="text" name="reponsecaptcha2" value="" />
	<input type="submit" value="Valider" />
</form>

</body>

</html>

Conclusion :


Je n'ai pas réussi à faire afficher la réponse du calcul en mettant directement la variable du signe ($lesigne) dans la chaîne de calcul ($resultat).
C'est pourquoi j'ai fais des conditions... Si quelqu'un à la solution pour éviter de faire ses conditions, ça serait sympa qu'il m'en fasse part ^^

Voilà, j'attends vos remarques.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (WanaDien)