Tuesday, May 17, 2011

Как сделать свою капчу в PHP

Инструкция

сложности. Немудрено

Что вам пригодится

  • Место, где вам пригодится замеченное.

1 шаг

Сначала определимся, что пользователь обязан будет вводить при проверке на швертбота).
В нашем прецеденте пускай это будут цифры.

2 шаг

Эти цифры мы будем приобретать гипофункцией rand.
Вот образец
for ($k = 1; $k {
$text. = rand(1, 9);
}
Этот ряд создает переменную $text и прикарманивает ей значение из 5 цифр (от 1 до 9.) Число цифр вы можете избрать свое, поменяв значение $k в условии ряда for.

3 шаг

Сейчас займемся графикой.
$img = imagecreatetruecolor(110, 30); //Создаём изображение шириной 110 px, высотой 30px.
$white = imagecolorallocate($img, 255, 255, 255); // Присваиваем переменной $white белый цвет
$red = imagecolorallocate($img, 255, 0, 0);// Присваиваем переменной $red красный цвет
$black = imagecolorallocate($img, 0, 0, 0);// Присваиваем переменной $black чёрный цвет
imagesetthickness($img, 2); // Устанавливаем ширину линий
imagefill($img, 0, 0, $white); //Заливаем изображение белым цветом

4 шаг

Сейчас переходим к процессу представления цифр.
Да первым делом убавим читабельность капчи совершив пару линий на картинке

imageline($img, 20, 0, 80, 13, $black); //Линия чёрного цвета
imageellipse ($img, 0, 0, 70, 40, $black); //Эллипс чёрного цвета

Рисуем цифры
Т. к кол во цифр на рисунке будет 5 то запускаем ряд со счетчиком.

for ($i = 1; $i {
$r = $i*15; //Нужно, чтобы соблюдалась ширина между цифрами и они не лепились друг на друга.
if ($i % 2 == 0) // Условие, для выбора высоты цифры.
{
$sok=1. 3;// Если $i делиться на 2 без остатка, то высота цифры увеличивается в 1. 3 раза.
}
else
{
$sok= 1. 5; // Иначе высота увеличивается в 1. 5 раза.
}
if ($text{$i-1} == “1”)//Если цифра равна 1, то рисуем её
{
imageline($img, 7+$r, 5*$sok, 7+$r, 15*$sok, $black);
imageline($img, 7+$r, 5*$sok, 5+$r, 9*$sok, $black);
}
if ($text{$i-1} == “2”) {//Цифра 2
imageline($img, 5+$r, 6*$sok, 7+$r, 3*$sok, $green);
imageline($img, 7+$r, 3*$sok, 10+$r, 6*$sok, $green);
imageline($img, 10+$r, 6*$sok, 6+$r, 14*$sok, $green);
imageline($img, 6+$r, 14*$sok, 10+$r, 14*$sok, $green);
}
if ($text{$i-1} == “3”) {//Цифра 3
imageline($img, 5+$r, 5*$sok, 10+$r, 5*$sok, $green);
imageline($img, 10+$r, 5*$sok, 10+$r, 10*$sok, $green);
imageline($img, 10+$r, 10*$sok, 5+$r, 10*$sok, $green);
imageline($img, 10+$r, 10*$sok, 10+$r, 15*$sok, $green);
imageline($img, 10+$r, 15*$sok, 5+$r, 15*$sok, $green);
}
if ($text{$i-1} == “4”) {//Цифра 4
imageline($img, 5+$r, 4*$sok, 5+$r, 10*$sok, $green);
imageline($img, 5+$r, 10*$sok, 10+$r, 10*$sok, $green);
imageline($img, 10+$r, 10*$sok, 10+$r, 4*$sok, $green);
imageline($img, 10+$r, 10*$sok, 10+$r, 15*$sok, $green);
}
if ($text{$i-1} == “5”) {//Цифра 5
imageline($img, 5+$r, 4*$sok, 11+$r, 4*$sok, $green);
imageline($img, 5+$r, 4*$sok, 5+$r, 10*$sok, $green);
imageline($img, 5+$r, 10*$sok, 11+$r, 10*$sok, $green);
imageline($img, 11+$r, 11*$sok, 11+$r, 15*$sok, $green);
imageline($img, 11+$r, 15*$sok, 5+$r, 15*$sok, $green);
}
if ($text{$i-1} == “6”) {//Цифра 6
imageline($img, 10+$r, 4*$sok, 5+$r, 4*$sok, $green);
imageline($img, 5+$r, 4*$sok, 5+$r, 15*$sok, $green);
imageline($img, 5+$r, 15*$sok, 10+$r, 15*$sok, $green);
imageline($img, 10+$r, 15*$sok, 10+$r, 10*$sok, $green);
imageline($img, 10+$r, 10*$sok, 5+$r, 10*$sok, $green);
}
if ($text{$i-1} == “7”) {//Цифра 7
imageline($img, 5+$r, 5*$sok, 11+$r, 5*$sok, $green);
imageline($img, 11+$r, 5*$sok, 7+$r, 15*$sok, $green);
}
if ($text{$i-1} == “8”) {//Цифра 8
imageline($img, 5+$r, 5*$sok, 10+$r, 5*$sok, $green);
imageline($img, 5+$r, 5*$sok, 5+$r, 10*$sok, $green);
imageline($img, 5+$r, 10*$sok, 10+$r, 10*$sok, $green);
imageline($img, 10+$r,10*$sok, 10+$r, 5*$sok, $green);
imageline($img, 5+$r, 10*$sok, 5+$r, 15*$sok, $green);
imageline($img, 10+$r,10*$sok, 10+$r, 15*$sok, $green);
imageline($img, 5+$r, 15*$sok, 10+$r, 15*$sok, $green);
}
if ($text{$i-1} == “9”) {//Цифра 9
imageline($img, 5+$r, 5*$sok, 10+$r, 5*$sok, $green);
imageline($img, 5+$r, 5*$sok, 5+$r, 10*$sok, $green);
imageline($img, 5+$r, 10*$sok, 10+$r, 10*$sok, $green);
imageline($img, 10+$r, 10*$sok, 10+$r, 5*$sok, $green);
imageline($img, 10+$r, 10*$sok, 10+$r, 15*$sok, $green);
imageline($img, 10+$r, 15*$sok, 5+$r, 15*$sok, $green);
}
}
header(“Cache-control: private”);
header(“Content-type: image/png”);
imagepng($img);//Выводим изображение
imagedestroy($img);//Освобождаем память

5 шаг

И так разве вы запустите ваш php файл с сим шифром, то вы заметите видеоизображение.
Как сейчас положить это видеоизображение?
Ужасно легко
//captha. php – ваш файл с созданием картинки
Вот образец капчи
http://your-dreams. ru/reg. php
Вот оказавшийся код
http://your-dreams. ru/kode. txt

Яндекс. Директ

No comments:

Post a Comment