Accueil > > > TEST DE TURING ACCESSIBLE - CLASSE PHP5
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
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
Buzii Captcha et fiabilité ! [ par kikifrance ]
Salut chez vous ! J'aimerais votre avis sur la fiabilité d'un Captcha tel que celui-ci: [url=http://www.buzii.com/buzii_captcha.php]http://www.buzii
[BAR]Crack Captcha [ par kohntark ]
Salut, Je me permet de poster ici car, même si il concerne avant tout le développement Web, le sujet fait en priorité appel à d'autres langages "plus
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|