|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
TEST DE TURING ACCESSIBLE - CLASSE PHP5
Information sur la source
Description
A force de voire fleurir partout des captcha imagée et aussi à force d'avoir à utiliser lynx, je me suis mis en tête de réaliser un test de turing qui soit accessible. Pour ce faire, j'utilise la méthode des questions simples posée à l'utilisateur.
Source
- <?php
- /*******************************************************************************
- * Software: Turing Test class *
- * Version: 0.2 *
- * Date: 2007-01-20 *
- * Author: William POTTIER *
- * License: Freeware *
- * *
- * You may use, modify and redistribute this software as you wish. *
- *******************************************************************************/
-
- class Turing
- {
- // List of many word wich may be use.
- private $dictionnary = array(
- 'programmation',
- 'interface',
- 'variable',
- 'apprentissage'
- );
- // List of questions types
- private $questions = array(
- 'Indiquer le résultat de la somme de %x et %y',
- 'Indiquer le plus grand nombre entre %x et %y',
- 'Indiquer la lettre n°%u du mot "%mot_z"',
- 'Indiquer le plus petit nombre entre %x et %y'
- );
- // Results that corresponds with associated questions.
- private $results = array(
- 'addition(x,y)',
- '_max(x,y)',
- 'letterOfWord(u,mot_z)',
- '_min(x,y)'
- );
- private $nb, $u, $x, $y, $z,$mot_z;
-
- ////////////////////////////////////////
- // Constructor : just many simple test
- public function __construct()
- {
- // We check if Session is open
- if(session_id() == '')
- throw new Exception('Can\'t use Turing test because session is close.');
- }
-
- //////////////////////////////////////////
- // a function for callback (for $results)
- private function addition($a, $b)
- {
- return $a+$b;
- }
-
- //////////////////////////////////////////
- // a function for callback (for $results)
- private function letterOfWord($pos, $mot)
- {
- return $mot[$pos];
- }
-
- private function _max($a, $b)
- {
- return max(array($a, $b));
- }
-
- private function _min($a, $b)
- {
- return min(array($a, $b));
- }
-
- //////////////////////////////////////////////////////
- // We pick a question from our list and we return it
- public function GenerateQuestion($force_new = 0)
- {
- if($this->nb == '' || $force_new == 1)
- $this->nb = mt_rand(0, count($this->questions)-1);
-
- // We get the random number
- $this->x = mt_rand(1, 50);
- $this->y = mt_rand(1, 50);
- $this->z = mt_rand(0, count($this->dictionnary)-1);
- $this->mot_z = $this->dictionnary[$this->z];
- $this->u = mt_rand(0,strlen($this->mot_z)-1);
-
- // We get the result and we save it in $_SESSION
- $_SESSION['turing'] = $this->GetResult();
-
- $search = array('%x', '%y', '%mot_z', '%u');
- $replace = array($this->x, $this->y, $this->mot_z, $this->u+1);
- $question = str_replace($search, $replace, $this->questions[$this->nb]);
-
- return $question;
- }
-
- ////////////////////////////////////////////////////////
- // we return the result associated with the number $nb
- private function GetResult()
- {
- $result = $this->results[$this->nb];
- // We explode the string to get function name and param list
- $temp1 = explode('(', $result);
- // Good, wa have the callback
- $callback = $temp1[0];
- // Now the params
- $params = trim($temp1[1], ')');
- $param = explode(',', $params);
- $count_param = count($param);
- for($i = 0; $i < $count_param; $i++)
- {
- $param_callback[$i] = $this->$param[$i];
- }
-
- // We run the callback
- return call_user_method_array($callback, $this, $param_callback);
- }
- }
- ?>
<?php
/*******************************************************************************
* Software: Turing Test class *
* Version: 0.2 *
* Date: 2007-01-20 *
* Author: William POTTIER *
* License: Freeware *
* *
* You may use, modify and redistribute this software as you wish. *
*******************************************************************************/
class Turing
{
// List of many word wich may be use.
private $dictionnary = array(
'programmation',
'interface',
'variable',
'apprentissage'
);
// List of questions types
private $questions = array(
'Indiquer le résultat de la somme de %x et %y',
'Indiquer le plus grand nombre entre %x et %y',
'Indiquer la lettre n°%u du mot "%mot_z"',
'Indiquer le plus petit nombre entre %x et %y'
);
// Results that corresponds with associated questions.
private $results = array(
'addition(x,y)',
'_max(x,y)',
'letterOfWord(u,mot_z)',
'_min(x,y)'
);
private $nb, $u, $x, $y, $z,$mot_z;
////////////////////////////////////////
// Constructor : just many simple test
public function __construct()
{
// We check if Session is open
if(session_id() == '')
throw new Exception('Can\'t use Turing test because session is close.');
}
//////////////////////////////////////////
// a function for callback (for $results)
private function addition($a, $b)
{
return $a+$b;
}
//////////////////////////////////////////
// a function for callback (for $results)
private function letterOfWord($pos, $mot)
{
return $mot[$pos];
}
private function _max($a, $b)
{
return max(array($a, $b));
}
private function _min($a, $b)
{
return min(array($a, $b));
}
//////////////////////////////////////////////////////
// We pick a question from our list and we return it
public function GenerateQuestion($force_new = 0)
{
if($this->nb == '' || $force_new == 1)
$this->nb = mt_rand(0, count($this->questions)-1);
// We get the random number
$this->x = mt_rand(1, 50);
$this->y = mt_rand(1, 50);
$this->z = mt_rand(0, count($this->dictionnary)-1);
$this->mot_z = $this->dictionnary[$this->z];
$this->u = mt_rand(0,strlen($this->mot_z)-1);
// We get the result and we save it in $_SESSION
$_SESSION['turing'] = $this->GetResult();
$search = array('%x', '%y', '%mot_z', '%u');
$replace = array($this->x, $this->y, $this->mot_z, $this->u+1);
$question = str_replace($search, $replace, $this->questions[$this->nb]);
return $question;
}
////////////////////////////////////////////////////////
// we return the result associated with the number $nb
private function GetResult()
{
$result = $this->results[$this->nb];
// We explode the string to get function name and param list
$temp1 = explode('(', $result);
// Good, wa have the callback
$callback = $temp1[0];
// Now the params
$params = trim($temp1[1], ')');
$param = explode(',', $params);
$count_param = count($param);
for($i = 0; $i < $count_param; $i++)
{
$param_callback[$i] = $this->$param[$i];
}
// We run the callback
return call_user_method_array($callback, $this, $param_callback);
}
}
?>
Conclusion
Voilà si vous avez des remarques, commentaires et suggestions n'hésiter pas. Le petit exemple permet de montrer la mise en oeuvre d'un tel système et de la classe. Pour ceux que ça intéresse, la classe utilise un système de callback pour le calcul des résultat.
Historique
- 20 janvier 2007 19:30:43 :
- Correction et ajout d'un exemple pour certain.
- 20 janvier 2007 22:00:18 :
- réécriture complète pour une version exploitable.
- 20 janvier 2007 22:04:22 :
- ajout du screenshot
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Lien vers une page web [ par GIRAFE ENRHUMEE ]
Y-a-t-il un moyen pour que une des pages de mon site ne soit pas accessible par son url. Autrement dit, qu'elle ne soit accessible que par le biais d'
probleme affichage captcha [ par Jarod1980 ]
Jarod_Delaware
Redirection sur un fichier non accessible via le web [ par codefalse ]
Bonjour à tous.Voila, j'ai un soucis, j'aurai une solution, mais je me demandais s'il y avait plus performant ! :)Alors ce qu'il en estVoici ma struct
Vérifier Données [ par xeroxiss ]
Bonjour,Ma question va peut-être paraître stupide mais je nage un peu ^^ Ma question toute bête est la suivante : Existe-t-il une requête en php qui v
CAPTCHA [ par hlbmatos ]
J'ai installé cryptographp dans mon livre d'or mais quoi que je fasse, quand j'envoie un message vers mon livre d'or, il n'est pas vérifié par le cryp
Pb pour rafraichir un captcha [ par sebastien_et_typh ]
Bonsoir,je rencontre 2 problèmes : - Le premier : j'ai installer un captcha sur mon site lors de l'inscription (j'avais pris le code de ce captcha ici
comment afficher un captcha à la fin d'un formulaire ? [ par tiger159 ]
Bonjour,j'aimerais savoir comment intégrer un captchaà la suite de l'affichage d'un formulaire.(Il semble que ce soit dû à 'header' qui a déjàenvoyé s
Formulaire de contact compatibilité avec free.fr [ par adamtheboss ]
Bonjour,J'ai créé un site chez free.fr où j'ai integré un script contact captcha, j'ai aussi créé un dossier sessions vide à la racine du site. Le for
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|