Test de turing accessible - classe php5

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 / Exemple :


<?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.

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.