
Призрачный
   
Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов
Репутация: 10 Всего: 71
|
я предложу свой вариант, вдруг пригодится сам файл (я сделал отображение формы и проверку кода в одном файле чтоб нагляднее) Код | <?php session_start();
$code = (isset($_REQUEST['code'])) ? $_REQUEST['code'] : ''; if ($code == $_SESSION['securityCode']) { ?> <h1>УРА!!! Вы ввели правильный код</h1> <?php } else { ?> <div id="divform"> <form method="post"> <img src="code.php" /> <br>Введите проверочный код: <input id="code" size="4" type="text" name="code"> <br><input type="submit" id="formfb" value="Отправить"/> </form> </div> <?php }
|
ну и сам код картинки.. Мне он нравится из-за возможности простой настройки под любые нужды Код | <?php //Возможные форматы: GIF, JPEG, PNG $C_IMAGE_TYPE = 'PNG'; //Ширина изображения $C_WIDTH = 100; //Высота изображения $C_HEIGHT = 60; //Количество символов, которые нужно набрать $C_NUM_GENSIGN = 5; //Путь к шрифтам $path_fonts = 'fonts/'; // размер шришта (чем больше значение, тем меньше шрифт) $C_FONT_SIZE = 6; // количество мусора (чем больше значение, тем меньше количество) $C_NUM_SIGN = 20; // Набор символов $LETTERS = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f');
$EXT = strtoupper($_GET['ext']); if ($EXT == 'GIF' || $EXT == 'JPEG' || $EXT == 'PNG') $C_IMAGE_TYPE = $EXT; if (is_numeric($_GET['width']) && $_GET['width'] > 100 && $_GET['width'] < 500) $C_WIDTH = $_GET['width']; if (is_numeric($_GET['height']) && $_GET['height'] > 100 && $_GET['height'] < 500) $C_HEIGHT = $_GET['height']; if (is_numeric($_GET['qty']) && $_GET['qty'] > 2 && $_GET['qty'] < 10) $C_NUM_GENSIGN = $_GET['qty'];
$C_FONT_SIZE = intval($C_HEIGHT / (($C_HEIGHT / $C_WIDTH) * $C_FONT_SIZE)); $C_NUM_SIGN = intval(($C_WIDTH * $C_HEIGHT) / ($C_NUM_SIGN * 10));
$CODE = array(); $FIGURES = array('50', '70', '90', '110', '130', '150', '170', '190', '210');
$src = imagecreatetruecolor($C_WIDTH, $C_HEIGHT);
$fon = imagecolorallocate($src, 255, 255, 255); imagefill($src, 0, 0, $fon);
$FONTS = array(); $dir = opendir($path_fonts); while ($fontName = readdir($dir)) { if ($fontName != "." && $fontName != "..") { if (strtolower(strrchr($fontName, '.')) == '.ttf') $FONTS[] = $path_fonts . $fontName; } } closedir($dir);
if (sizeof($FONTS) > 0) { for ($i = 0; $i < $C_NUM_SIGN; $i++) { $h = 1; $color = imagecolorallocatealpha($src, rand(0, 255), rand(0, 255), rand(0, 255), 105); $font = $FONTS[rand(0, sizeof($FONTS) - 1)]; $letter = $LETTERS[rand(0, sizeof($LETTERS) - 1)]; $size = rand($C_FONT_SIZE - 2, $C_FONT_SIZE + 2); $angle = rand(0, 60); if ($h == rand(1, 2)) $angle = rand(360, 300); imagettftext($src, $size, $angle, rand($C_WIDTH * 0.1, $C_WIDTH - $C_WIDTH * 0.1), rand($C_HEIGHT * 0.2, $C_HEIGHT), $color, $font, $letter); }
for ($i = 0; $i < $C_NUM_GENSIGN; $i++) { $h = 1; $color = imagecolorallocatealpha($src, $FIGURES[rand(0, sizeof($FIGURES) - 1)], $FIGURES[rand(0, sizeof($FIGURES) - 1)], $FIGURES[rand(0, sizeof($FIGURES) - 1)], rand(10, 30)); $font = $FONTS[rand(0, sizeof($FONTS) - 1)]; $letter = $LETTERS[rand(0, sizeof($LETTERS) - 1)]; $size = rand($C_FONT_SIZE * 2.1 - 1, $C_FONT_SIZE * 2.1 + 1); $x = (empty($x)) ? $C_WIDTH * 0.08 : $x + ($C_WIDTH * 0.8) / $C_NUM_GENSIGN + rand(0, $C_WIDTH * 0.01); $y = ($h == rand(1, 2)) ? (($C_HEIGHT * 1.15 * 3) / 4) + rand(0, $C_HEIGHT * 0.02) : (($C_HEIGHT * 1.15 * 3) / 4) - rand(0, $C_HEIGHT * 0.02); $angle = rand(5, 20); $CODE[] = $letter; if ($h == rand(0, 10)) $letter = strtoupper($letter); if ($h == rand(1, 2)) $angle = rand(355, 340); imagettftext($src, $size, $angle, $x, $y, $color, $font, $letter); }
} else { for ($x = 0; $x < $C_WIDTH; $x++) { for ($i = 0; $i < ($C_HEIGHT * $C_WIDTH) / 1000; $i++) { $color = imagecolorallocatealpha($src, $FIGURES[rand(0, sizeof($FIGURES) - 1)], $FIGURES[rand(0, sizeof($FIGURES) - 1)], $FIGURES[rand(0, sizeof($FIGURES) - 1)], rand(10, 30)); imagesetpixel($src, rand(0, $C_WIDTH), rand(0, $C_HEIGHT), $color); } } unset($x, $y); for ($i = 0; $i < $C_NUM_GENSIGN; $i++) { $h = 1; $color = imagecolorallocatealpha($src, $FIGURES[rand(0, sizeof($FIGURES) - 1)], $FIGURES[rand(0, sizeof($FIGURES) - 1)], $FIGURES[rand(0, sizeof($FIGURES) - 1)], rand(10, 30)); $letter = $LETTERS[rand(0, sizeof($LETTERS) - 1)]; $x = (empty($x)) ? $C_WIDTH * 0.08 : $x + ($C_WIDTH * 0.8) / $C_NUM_GENSIGN + rand(0, $C_WIDTH * 0.01); $y = ($h == rand(1, 2)) ? (($C_HEIGHT * 1) / 4) + rand(0, $C_HEIGHT * 0.1) : (($C_HEIGHT * 1) / 4) - rand(0, $C_HEIGHT * 0.1); $CODE[] = $letter; if ($h == rand(0, 10)) $letter = strtoupper($letter); imagestring($src, 5, $x, $y, $letter, $color); } } session_start(); $_SESSION['securityCode'] = implode('', $CODE);
if ($C_IMAGE_TYPE == 'PNG') { header("Content-type: image/png"); imagepng($src); } elseif ($C_IMAGE_TYPE == 'JPEG') { header("Content-type: image/jpeg"); imagejpeg($src); } else { header("Content-type: image/gif"); imagegif($src); } imagedestroy($src);
|
Там есть папочка куда нужно кинуть свои шрифты
--------------------
Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем!
|