Jump to content
  • 0

Помогите с капчей


bgraf
 Share

Question

Добрый день

Помогите пожалуйста с капчей

Вот так я сгенерировал случайное число

if($_SESSION['uid'] =='')

{

$_SESSION['uid'] = mt_rand(100000,999999);

}

Вот так я вызываю , по крайней мере должен так вызывать капчу

<img src="capcha.php?sid='.$_SESSION['uid'].'"/>

а что должно быть в самом capcha.php понять не могу

Люди добрые научите подскажите

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Вот реализация простенькой капчи:

captcha.php

session_start();

class Captcha{
//генерируем капчу
/////////////////////////////////
function generate(){
$_SESSION['captcha'] = $string = mt_rand(1000,9999);//случайное число
$font = //здесь надо указать путь к шрифту // Шрифт.
$im=imageCreate(50,22);//создаем картинку
imageColorAllocate($im, 255, 255, 255);//background
$color = imageColorAllocate($im, 0, 0, 0);//цвет текста
imageTtfText($im, 18, 0, 1, 20, $color, $font, $string);//выводим текст
Header("Content-type: image/png");// Сообщаем о том, что далее следует рисунок PNG.
imagePng($im);// Выводим рисунок
return true;
}

//проверяем капчу
/////////////////////////////////
function inspect($captcha){
if($captcha===$_SESSION['captcha']){unset($_SESSION['captcha']);return true;}
unset($_SESSION['captcha']);
return false;
}
}

Captcha::generate();

картинка вставляется так

<img src="/captcha.php" alt="КАПЧА" />

проверяется капча так:

Captcha::inspect("введеное пользователем число");

возвращает true если число верное false если не верное

Edited by youmay
Link to comment
Share on other sites

  • 0

Я делал вот так (может это не самое лучшее решение но спама нету)

<?php
$min=6; // минимальное количество символов
$max=8; // максимальное количество символов
for($i=0;$i<rand($min,$max);$i++){
// Загрузка и проверка символов
$num=rand(48,122);
if(($num > 97 && $num < 122)){//строчные буквы
$nomer.=chr($num);
} else if(($num > 65 && $num < 90)){//большие буквы
$nomer.=chr($num);
} else if(($num >48 && $num < 57)){//цифры
$nomer.=chr($num);
} else{
$i--;
}
}
$imge = imagecreate("85", "37");
$pic = rand("0","15");
$jpeg_file = 'img/'.$pic.'.jpg';
$imge = imagecreatefromjpeg($jpeg_file); /* Создаем изображение из JPEG-файла */
$text = imagecolorallocate($imge,0,0,0);/* устанавливаем цвет текста для нашего рисунка*/
imagestring($imge,5,10,10,$nomer,$text);/*рисуем текст с такими параметрами: $imge(наш рисунок),4 (размер шрифта (от 1 до 5)),4 (отступ на 4 пикселя слева),0 (отступ в пикселях сверху),$nomer (текст),$green (цвет текста)*/
header("Content-type: image/jpeg");/* посылаем заголовок серверу про то, что мы передаем ему рисунок формата jpeg*/
imagejpeg($imge); /*выводим рисунок*/
imagedestroy($imge);/* освобождаем память*/
?>

там можно корректировать какие символы будут в капче настраивать длинну капчи

а бэкграунды должны лежать в папочке img и пронумерованы 1-15 (хотя это можно легко менять

Link to comment
Share on other sites

  • 0
Я делал вот так (может это не самое лучшее решение но спама нету)

<?php
$min=6; // минимальное количество символов
$max=8; // максимальное количество символов
for($i=0;$i<rand($min,$max);$i++){
// Загрузка и проверка символов
$num=rand(48,122);
if(($num > 97 && $num < 122)){//строчные буквы
$nomer.=chr($num);
} else if(($num > 65 && $num < 90)){//большие буквы
$nomer.=chr($num);
} else if(($num >48 && $num < 57)){//цифры
$nomer.=chr($num);
} else{
$i--;
}
}
$imge = imagecreate("85", "37");
$pic = rand("0","15");
$jpeg_file = 'img/'.$pic.'.jpg';
$imge = imagecreatefromjpeg($jpeg_file); /* Создаем изображение из JPEG-файла */
$text = imagecolorallocate($imge,0,0,0);/* устанавливаем цвет текста для нашего рисунка*/
imagestring($imge,5,10,10,$nomer,$text);/*рисуем текст с такими параметрами: $imge(наш рисунок),4 (размер шрифта (от 1 до 5)),4 (отступ на 4 пикселя слева),0 (отступ в пикселях сверху),$nomer (текст),$green (цвет текста)*/
header("Content-type: image/jpeg");/* посылаем заголовок серверу про то, что мы передаем ему рисунок формата jpeg*/
imagejpeg($imge); /*выводим рисунок*/
imagedestroy($imge);/* освобождаем память*/
?>

там можно корректировать какие символы будут в капче настраивать длинну капчи

а бэкграунды должны лежать в папочке img и пронумерованы 1-15 (хотя это можно легко менять

спасибо огромное

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy