PHP 算式驗證碼

這裏很少說,直接上代碼!php

/**   * 改造的加減法驗證類   * 使用示例 VerifyCode::get('xxx', 20);   * 驗證示例 VerifyCode::check('1', 'xxx');  */  class VerifyCode  {      /**      * php驗證碼  算式驗證碼     */      public static function get($one,$two,$prefix = '', $font_size = 28)      {        //文件頭...          header("Content-type: image/png");        ob_end_clean();        //建立真彩色白紙          $width            = $font_size*5;        $height           = $font_size+1;        $im               = @imagecreatetruecolor($width, $height) or die("創建圖像失敗");        //獲取背景顏色          $background_color = imagecolorallocate($im, 255, 255, 255);          //填充背景顏色          imagefill($im, 0, 0, $background_color);          //獲取邊框顏色          $border_color     = imagecolorallocate($im, 200, 200, 200);          //畫矩形,邊框顏色200,200,200          imagerectangle($im,0,0,$width - 1, $height - 1,$border_color);        //逐行炫耀背景,全屏用1或0        for($i = 2;$i < $height - 2;$i++) {            //獲取隨機淡色            $line_color = imagecolorallocate($im, rand(200,255), rand(200,255), rand(200,255));            //畫線            //imageline($im, 2, $i, $width - 1, $i, $line_color);   //畫一條線  畫線條            imageellipse($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $line_color);   //畫橢圓        }        //設置印上去的文字        $firstNum  = $one;        $secondNum = $two;        /*         * 隨機獲取值來判斷是乘除仍是加減         */        if($one > $two){            $chu_num = $one/$two;        }        $rand_num = mt_rand(1,5);        if($rand_num != 1  && is_int($chu_num) && $two != 0){   //判斷結果是否爲整數            $actionStr = $firstNum > $secondNum ? '/' : '*';        }else{            $actionStr = $firstNum > $secondNum ? '-' : '+';        }        //獲取第1個隨機文字        $imstr[0]["s"] = $firstNum;        $imstr[0]["x"] = rand(2, 5);        $imstr[0]["y"] = rand(1, 4);        //獲取第2個隨機文字        $imstr[1]["s"] = $actionStr;        $imstr[1]["x"] = $imstr[0]["x"] + $font_size - 1 + rand(0, 1);        $imstr[1]["y"] = rand(1,5);        //獲取第3個隨機文字        $imstr[2]["s"] = $secondNum;        $imstr[2]["x"] = $imstr[1]["x"] + $font_size - 1 + rand(0, 1);        $imstr[2]["y"] = rand(1, 5);        //獲取第3個隨機文字        $imstr[3]["s"] = '=';        $imstr[3]["x"] = $imstr[2]["x"] + $font_size - 1 + rand(0, 1);        $imstr[3]["y"] = 3;        //獲取第3個隨機文字        $imstr[4]["s"] = '?';        $imstr[4]["x"] = $imstr[3]["x"] + $font_size - 1 + rand(0, 1);        $imstr[4]["y"] = 3;        //文字        $text = '';        //獲取隨機較深顏色        $text_color = imagecolorallocate($im, rand(50, 180), rand(50, 180), rand(50, 180));        //寫入隨機字串        for($i = 0; $i < 5; $i++) {            //$text_color = imagecolorallocate($im, rand(50, 180), rand(50, 180), rand(50, 180));//獲取隨機較深顏色            $text .= $imstr[$i]["s"];            //imagechar($im, $font_size, $imstr[$i]["x"], $imstr[$i]["y"], $imstr[$i]["s"], $text_color);//畫文字,設置文字大小        }        /*         * 爲圖片添加噪點,線條,雪花,增長干擾度         * */        for ($i=0;$i<6;$i++) {            $color = imagecolorallocate($im,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));            imageline($im,mt_rand(0,140),mt_rand(0,28),mt_rand(0,140),mt_rand(0,28),$color);        }        for ($i=0;$i<100;$i++) {            $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));            imagestring($im,mt_rand(1,5),mt_rand(0,140),mt_rand(0,28),'*',$color);        }        imagestring($im, 5, rand(5,15), rand(0,5), $text, $text_color);        if($rand_num != 1  && is_int($chu_num)){            $_SESSION[$prefix.'verifycode'] = $firstNum > $secondNum ? ($firstNum / $secondNum) : ($firstNum * $secondNum);        }else{            $_SESSION[$prefix.'verifycode'] = $firstNum > $secondNum ? ($firstNum - $secondNum) : ($firstNum + $secondNum);        }        //顯示圖片        imagepng($im);        //銷燬圖片        imagedestroy($im);    }    public static function check($code, $prefix = '')      {          if(trim($_SESSION[$prefix.'verifycode']) == trim($code)) {              return true;          } else {              return false;          }      }  }  
相關文章
相關標籤/搜索