1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
<?php
function _captchaLettres()
{
$str = 'abcdefghijklmnopqrstuvwxyz';// on crée la chaine
$str .= strtoupper($str);
$length = mt_rand(5,12);
$str = substr(str_shuffle($str),0,$length);
$pos = mt_rand(2,$length-1); // on choisi la position
if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
session_start();
$_SESSION['captchaResult'] = $str[$pos-1];
return 'Dans <b>'.$str.'</b> quelle lettre se trouve entre <b>'.$str[$pos-2].'</b> et <b>'.$str[$pos].'</b>';
}
function _captchaCalculChiffres()
{
$operators = array('-','+','*');
$operator = $operators[array_rand($operators)];// on récupère l'opérateur de calcul
$nb1 = rand(1, 10);
$nb2 = ($operator === '-') ? mt_rand(1, $nb1) : mt_rand(1, 10); // on évite les résultats négatif en cas de soustraction
$calcul = $nb1.' '.$operator.' '.$nb2;
if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
session_start();
eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
return 'Combien font <b>'.$nb1.' '.($operator === '*' ? 'x' : $operator).' '.$nb2.'</b>';
}
function _captchaCalculLettres()
{
$operators = array('-' => 'moins', '+' => 'plus', '*' => 'fois');
$operator = array_rand($operators);
$op = $operators[$operator]; // on récupère l'opérateur de calcul
$num = array(
'zero', 'un', 'deux', 'trois',
'quatre', 'cinq', 'six', 'sept',
'huit', 'neuf', 'dix'
);
$nb1 = array_rand($num);
$nb2 = array_rand($num);
if($operator === '-' && $nb1 < $nb2)
while($nb1 < ($nb2 = array_rand($num))); // on évite les résultats négatif en cas de soustraction
if(!isset($_SESSION)) // on met le résultat en session puis on renvois la question
session_start();
eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
return 'Combien font <b>'.$num[$nb1].' '.$op.' '.$num[$nb2].'</b>';
}
function _captchaAlphaNum()
{
$str = md5(time()); // création de la chaine
$length = mt_rand(5,12);
$str = substr($str,0,$length);
$pos = mt_rand(1,$length); // on choisi la position
if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
session_start();
$_SESSION['captchaResult'] = $str[$pos-1];
if($pos === 1)
$pos = 'le premier';
elseif($pos === 2)
$pos = 'le second';
elseif($pos === $length)
$pos = 'le dernier';
elseif($pos === ($length-1))
$pos = 'l\'avant dernier';
else
$pos = 'le '.$pos.'ème';
return 'Quel est '.$pos.' caractère dans <b>'.$str.'</b>';
}
function getCaptcha()
{
$functions = array(
'_captchaLettres', '_captchaCalculChiffres',
'_captchaCalculLettres', '_captchaAlphaNum'
);
$captcha = $functions[array_rand($functions)];
return $captcha();
}
function checkCaptcha( $postVarName = 'captchaResult', $caseInsensitive = false)
{
if(!isset($_SESSION))
session_start();
if(!isset($_POST[$postVarName],$_SESSION['captchaResult']))
return false;
if($caseInsensitive === true && !is_numeric($_SESSION['captchaResult']))
{
$_POST[$postVarName] = strtolower($_POST[$postVarName]);
$_SESSION['captchaResult'] = strtolower($_SESSION['captchaResult']);
}
return ($_POST[$postVarName] === $_SESSION['captchaResult']);
}
?> |
Partager