Sargej_Saint
Создатель
- Регистрация
- 5 Ноя 2008
- Сообщения
- 43
- Реакции
- 6
Вот еще один вариант капчи, требующий простого сложения чисел...
PHP:
<?php
$absrand=34;
if(isset($_POST['usernum']) and isset($_POST['result'])){
sleep(1);
$userkey=$_POST['usernum']+$absrand;
$userkey=md5("$userkey");
if ($userkey!=$_POST['result']) {
echo "<center>Введённый вами код <font color=red>НЕ ВЕРЕН</font>!</center>";
exit;
} else {
echo "<center>Введённый вами код <font color=green>ВЕРЕН</font>!</center>";
}
} else {
$chisla=array();
$chisla[0]=array("","один","два","три","четыре","пять","шесть","семь","восемь","девять");
$chisla["d"]=array("десять","одиннадцать", "двенадцать", "тринадцать","четырнадцать", "пятнадцать", "шестнадцать","семнадцать", "восемнадцать", "девятнадцать");//числа от 10 до 19
$chisla[1]=array("","","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят", "девяносто");//десятки
$chisla[2]=array("","сто", "двести","триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот","девятьсот");//сотни
$chisla["t"]=0;
function c_to_s($a,$b,$c=0)
{
global $chisla;
switch ($a)
{
case 4:$a=1;$chisla["t"]+=$b;
break;
case 5:$a=2;$chisla["t"]+=$b;
break;
}
return $chisla[$a][$b]." ";
}
function cifra($a) {
$a_m=array();
for(;$a!=0;$a=floor($a/10))
$a_m[] = ($a%10);
$a_m=array_reverse($a_m,true);
$d=true;
$chislo='';
foreach ($a_m as $k=>$v)
if($d)
if($v==1&&$k==1||$v==1&&$k==4)
$d=false;
else
$chislo.=c_to_s($k,$v);
elseif(!$d)
{
$chislo.=c_to_s("d",$v,$k);
$d=true;
}
return $chislo;
}
$ra=rand(10,99);
$ratxt=cifra($ra);
$rb=rand(1,9);
$rbtxt=cifra($rb);
$r=$ra+$rb;
$r=$r+$absrand;
$r=md5("$r");
echo '
<form method="POST">
Сколько будет <strong>'.$ratxt.'+ '.$rbtxt.'</strong>?<br><br>Ответ запишите цифрами: <input type="text" size="4" name="usernum" value="">
<input type="hidden" name="result" value="'.$r.'">
<input type="submit" value="Отправить">
</form>
';
}
?>