ilya20

نیاز به دستور کپچا بدون افزونه

4 پست در این موضوع قرار دارد

سلام و درود خدمت عزیزان 

در صورت امکان کد کپچا برای وردپرس بدون نیاز به افزونه برامون بذارید. (کپچای عدد با حروف باشه چه بهتر)

 

0

به اشتراک گذاری این پست


لینک به پست

این کلاس کپچا هست که خودم نوشتم و استفاده میکنم

<?php

/**
 * @author lord_viper
 * @copyright 2013
 */

class bn_captcha
{
    private $font_size    = 5;
    private $fontfilename = '';
    private $bg_color     = array(255,255,255);
    private $text_color   = array(0,0,0);
    private $line         = 0;
    private $noise        = 0;
    private $elipse       = 0;
    private $elfill       = false;
    private $text         = '';
    private $img;
    protected static $instance;

    function __construct()
    {
        if (session_status() == PHP_SESSION_NONE)
        //if (!isset($_SESSION))
        session_start();
    }

    public static function instance()
    {
        if(!isset(self::$instance))
        self::$instance = new self();

        return self::$instance;
    }
    
    private function RandomString($length = 10, $type = 'char',$repeat=2)
    {
        $Special = '!@#$%^&*()-_ []{}<>~+=,.;:/?|';
        $number  = '0123456789';
        $chars   = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        switch($type)
        {
            case 'all' :$str = $Special.$number.$chars;break;
            case 'char':$str = $chars;break;
            case 'num' :$str = $number;break;
            default    :$str = $chars.$number;
        }
        return substr(str_shuffle(str_repeat($str,$repeat)),0,$length);
    }
    
    public function line($count)
    {
        $this->line = $count;
        return $this;
    }
    
    public function noise($count)
    {
        $this->noise = $count;
        return $this;
    }
    
    public function font($fontname,$fontsize)
    {
        $this->fontfilename = $fontname;
        $this->font_size    = $fontsize;
        return $this;
    }
    
    public function ellipse($count,$fill=false)
    {
        $this->elipse = $count;
        $this->elfill = $fill;
        return $this;
    }
    
    public function text($text='')
    {
        $this->text = $text;
        return $this;
    }
    
    public function show($text_count=5,$text_type='all',$bgcolor='#000',$txtcolor='#FFFFFF',$echo=true)
    {
        if(empty($this->text)){
            $this->text    = self::RandomString($text_count,$text_type);
            $_SESSION['__captcha'] = strtolower($this->text);
            $this->text    = wordwrap($this->text,1,' ',true) ;
        }
        $size = self::get_img_size();
        $this->img = imagecreatetruecolor($size['width'],$size['height']);
        self::draw_ellipse($size);
        self::draw_line($size);
        imagefill($this->img,0,0,hexdec($bgcolor));
        if(empty($this->fontfilename))
            imagestring($this->img,5,10,rand(5,15),$this->text,hexdec($txtcolor));
        else
            imagettftext($this->img,$this->font_size,0,10,rand($size['height']-15,$size['height']-5),hexdec($txtcolor),$this->fontfilename,$this->text);
        self::draw_noise($size);
        ob_start();    
        ImagePng($this->img);
        $img = base64_encode(ob_get_clean());
        if($echo)
        echo "<img src='data:image/jpeg;base64,$img' />";
        else
        return "<img src='data:image/jpeg;base64,$img' />";
    }
    
    public function check_captcha($post)
    {
        return ($post==$_SESSION['__captcha']?true:false);
    }
//______________________________________________________________________________________________________________________________    
    private function get_img_size()
    {
        $ret = array();
        if(empty($this->fontfilename)){
            $w    = imagefontwidth($this->font_size);
            $h    = imagefontheight($this->font_size);
            $ret['width'] = ($w * strlen($this->text)) + 20;
            $ret['height'] = $h + 20;
        }else{
            $siz = imagettfbbox($this->font_size,0,$this->fontfilename,$this->text);
            $ret['width'] = $siz[4]+20;
            $ret['height'] = abs($siz[7])+20;                      
        }
        return $ret;
    }
    
    private function draw_line($size)
    {
        if($this->line>0){
            $width  = $size['width'];
            $height = $size['height'];
            $minwidth = intval($size['width'] / 4);
            for ($i = 0; $i <= $this->line; $i++){
                imageline($this->img, rand(1, $minwidth), rand(1, $height), rand($width - $minwidth,$width),
                rand(1, $height), rand(1,16000000));
            }
        }
    }
    
    private function draw_noise($size)
    {
        if($this->noise>0){
            $width  = $size['width'];
            $height = $size['height'];
            for ($i = 0; $i <= $this->noise; $i++){
                imagesetpixel($this->img, rand(1, $width), rand(1, $height), rand(1,16000000));
            }
        }
    }
    
    private function draw_ellipse($size)
    {
        if($this->elipse>0){
            $width  = $size['width'];
            $height = $size['height'];
            for ($i = 0; $i < $this->elipse; $i++){
                $cx = (int)rand(15, $width - 5);
                $cy = (int)rand(15, $height - 5);
                $h  = rand(1, 30);
                $w  = rand(1, 30);
                if ($this->elfill)
                    imagefilledellipse($this->img, $cx, $cy, $w, $h,rand(1,16000000));
                else
                    imageellipse($this->img, $cx, $cy, $w, $h,rand(1,16000000));
            }             
        }       
    }
}
?>

برای استفاده به صورت زیر عمل کنید

 

$cap = new bn_captcha;

//check kardan captcha
//$_POST['captcha'] مقدار input کد امنیتی هست name=captcha
if($cap->check_captcha($_POST['captcha']))
echo 'captcha is true';
else
echo 'captcha is false';

//ایجاد کپچا فقط عدد 6 کاراکتر
echo $cap->show(6,'num');
//ایجاد کپچا عدد - حروف - سیمبل 6 کاراکتر
echo $cap->show(6,'all');
// ایجاد کپچت فقط حروف 6 کاراکتر پس زمینه مشکی رنگ حروف سفی
echo $cap->show(6,'char','#000','#FFF');

 

3

به اشتراک گذاری این پست


لینک به پست

ممنونم از شما 

 

دستور بالایی برای function هست دستور پایی برای single? 

 

یکم روشن کنید 

سپاس

0

به اشتراک گذاری این پست


لینک به پست

استاد عزیز میتونید جزئیات استفاده از کد رو بفرمایید

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری