PHP利用GD库生成验证码

PHP利用GD库生成验证码



check_code();

function check_code($width = 100, $height = 50, $num = 4, $type = 'jpeg'){
     
    #生成画布
    $img = imagecreate($width,$height);
    #创建空字符串
    $string = '';
    #生成num个字符
    for ($i = 0; $i < $num; $i++){
     
        #生成随机数看生成数字还是大小写字母
        $rand = mt_rand(0,2);
        switch ($rand){
     
            case 0:
                #随机生成数字的ascii值
                $ascii = mt_rand(48, 57); # 0-9
                break;
            case 1:
                #随机生成大写字母的ascii值
                $ascii = mt_rand(65, 90); # A-Z
                break;
            case 2:
                #随机生成小写字母的ascii值
                $ascii = mt_rand(97, 122); # a-z
                break;
        }
        #将生成的num个字符拼接起来
        $string .= sprintf("%c",$ascii);
    }
    #随机生成浅色背景
    imagefilledrectangle($img,0,0,$width,$height,randBg($img));
    #随机生成深色点干扰用户
    for ($i = 0; $i < 50; $i++){
     
        imagesetpixel($img, mt_rand(0, $width),mt_rand(0, $height), randPix($img));
    }
    #讲字符打印在画布上
    for ($i = 0; $i < $num; $i++){
     
        $x = floor($width/$num) * $i + 2;
        $y = mt_rand(0, $height - 15);

        imagechar($img,5, $x, $y,$string[$i], randPix($img));
    }
    #类型
    $func = 'image'.$type;
    #返回的类型
    $header = 'Content-type:image/'.$type;

    if(function_exists($func)){
     
        header($header);
        $func($img);
    }else{
     
        echo '图片类型不支持';
    }
    #销毁画布
    imagedestroy($img);
    #返回
    return $string;
}
//浅色背景
function randBg($img){
     
    return imagecolorallocate($img,mt_rand(130, 255),mt_rand(130, 255), mt_rand(130, 255));
}
//深色的字或者点干扰元素
function randPix($img) {
     
    return imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
}

你可能感兴趣的:(PHP)