июля 30, 2010 | by Макс | Надеюсь, все знают что такое каптча. Очень давно написал несколько каптч, теперь выложу сюда, чтобы не потерять их. Код ниже объединяет сразу 3 каптчи, которые выводятся рандомно. session_start(); $chars = array(1,2,3,4,5,6,7,8,9,’A',’B',’C',’D',’E',’F',’G',’H',’I',’J',’K',’L',’M',’N',’P',’R',’S',’T',’U',’V',’W',’X',’Y',’Z'); $CreateImage = imageCreate(150, 50); $color = imageColorAllocate($CreateImage, 255, 255, 255); imagefill($CreateImage, 0, 0, $color); $TrueChars = array_rand($chars, 5); $_SESSION['TrueChars'] = ”; $rand = rand(0, 2); if($rand == 0) { for($y = 0; $y $color1 = rand(0, 200); $color2 = rand(0, 200); $color3 = rand(0, 200); $color = imageColorAllocate($CreateImage, 0, 0, 0); imageLine($CreateImage, 0, $y, imageSX($CreateImage), $y+rand(-1, 1), $color); } for($x = 0; $x $color1 = rand(0, 200); $color2 = rand(0, 200); $color3 = rand(0, 200); $color = imageColorAllocate($CreateImage, 0, 0, 0); imageLine($CreateImage, $x, 0, $x+rand(-1, 1), imageSY($CreateImage), $color); } $CharX = 0; foreach($TrueChars as $TrueChar) { $_SESSION['TrueChars'] .= $chars[$TrueChar]; $CharX = $CharX+rand(20, 25); $CharY = rand(21, 40); $ChSize = rand(17, 21); $ChSk = rand(-20, 20); $color = imageColorAllocate($CreateImage, 255, 255, 255); imageTtfText($CreateImage, $ChSize, $ChSk, $CharX, $CharY, $color, ‘DREAMOFM. TTF’, $chars[$TrueChar]); } } elseif($rand == 1) { $CharX = 0; foreach($TrueChars as $TrueChar) { $_SESSION['TrueChars'] .= $chars[$TrueChar]; $CharX = $CharX+rand(20, 25); $CharY = rand(21, 35); $CharX2 = $CharX+rand(0, 6); $CharY2 = $CharY+rand(-3, 3); $ChSize = rand(15, 21); $ChSk = rand(-25, 25); $color1 = rand(0, 100); $color2 = rand(0, 100); $color3 = rand(0, 100); $color2_1 = rand(-100, 100); $color2_2 = rand(-100, 100); $color2_3 = rand(-100, 100); $color = imageColorAllocate($CreateImage, $color1, $color2, $color3); $color2 = imageColorAllocate($CreateImage, ($color1+$color2_1), ($color2+$color2_2), ($color3+$color2_3)); imageTtfText($CreateImage, $ChSize, $ChSk, $CharX, $CharY, $color, ‘DREAMOFM. TTF’, $chars[$TrueChar]); imageTtfText($CreateImage, $ChSize, $ChSk, $CharX2, $CharY2, $color2, ‘DREAMOFM. TTF’, $chars[$TrueChar]); } } else { for($i = 0; $i $lineX1 = rand(0, 100); $lineY1 = rand(0, 50); $lineX2 = $lineX1+rand(20, 50); $lineY2 = $lineY1-rand(0, 50); $color1 = rand(150, 255); $color2 = rand(150, 255); $color3 = rand(150, 255); $color = imageColorAllocate($CreateImage, $color1, $color2, $color3); imageFilledRectangle($CreateImage, $lineX1, $lineY1, $lineX2, $lineY2, $color); } $CharX = 0; foreach($TrueChars as $TrueChar) { $_SESSION['TrueChars'] .= $chars[$TrueChar]; $CharX = $CharX+rand(20, 25); $CharY = rand(21, 35); $ChSize = rand(15, 21); $ChSk = rand(-25, 25); $color1 = rand(0, 100); $color2 = rand(0, 100); $color3 = rand(0, 100); $color = imageColorAllocate($CreateImage, $color1, $color2, $color3); imageTtfText($CreateImage, $ChSize, $ChSk, $CharX, $CharY, $color, ‘DREAMOFM. TTF’, $chars[$TrueChar]); } for($i = 0; $i $lineX1 = rand(0, 100); $lineY1 = rand(0, 50); $lineX2 = rand(100, 150); $lineY2 = rand(0, 50); $color = imageColorAllocate($CreateImage, 255, 255, 255); imageLine($CreateImage, $lineX1, $lineY1, $lineX2, $lineX2, $color); $lineX1 = rand(100, 150); $lineY1 = rand(0, 50); $lineX2 = rand(0, 100); $lineY2 = rand(0, 50); $color = imageColorAllocate($CreateImage, rand(0, 255), rand(0, 255), rand(0, 255)); imageLine($CreateImage, $lineX1, $lineY1, $lineX2, $lineX2, $color); } for($i = 0; $i $lineX1 = rand(100, 150); $lineY1 = rand(0, 50); $lineX2 = rand(0, 100); $lineY2 = rand(0, 50); $color = imageColorAllocate($CreateImage, 255, 255, 255); imageLine($CreateImage, $lineX1, $lineY1, $lineX2, $lineX2, $color); imageFilledRectangle($CreateImage, $lineX1+5, $lineY1-5, $lineX1+5-1, $lineY1-5-1, $color); } } Header(“Content-Type: image/Jpeg”); imageJpeg($CreateImage); imageDestroy($CreateImage); ?> Ложим данный код в любой файл с расширением. php, запускаем его через . Правильное значение сохраняется в сессии $_SESSION[’TrueChars’]. PS: чуть не забыл загрузить используемый шрифт dreamofm: dreamofm. ttf h++p://php. name/php/kaptchi/ Теги: php
Понравилась статья? Получай обновления и будь всегда в курсе событий!