zoukankan      html  css  js  c++  java
  • 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;
    }
    }
    }
  • 相关阅读:
    JAVA向上转型和向下转型
    LeetCode记录之9——Palindrome Number
    LeetCode记录之7——Reverse Integer
    JAVA数据结构--插入排序
    JAVA数据结构--选择排序
    JAVA数据结构--冒泡排序
    HTTP协议04-返回状态码
    HTTP协议03-http特点及请求方式
    HTTP协议02-请求和响应的报文构成
    HTTP笔记01-http相关的基础知识
  • 原文地址:https://www.cnblogs.com/jing1208/p/6293652.html
Copyright © 2011-2022 走看看