PHP 高自定义性安全验证码的简单示例

前端之家收集整理的这篇文章主要介绍了PHP 高自定义性安全验证码的简单示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧。
经测试代码如下:

<?PHP
/**
 * 安全验证码
 *
 * @param 
 * @author 编程之家 jb51.cc jb51.cc
 **/
public function captcha(){
    $font_dir   = $_SERVER ["DOCUMENT_ROOT"] . "your_ttf_file.ttf"; // 字体库
    $img_w      = 58;   // 设置图片宽
    $img_h      = 20;   // 设置图片高
    $font_size  = 11;   // 字体大小
    $angle_l    = -10;  // 左偏角
    $angle_r    = 10;   // 右偏角
    $code_str   = "ABCDEFGHJKLMNPQRSTUVWXYZ36";
    $word_len   = 4;    // 验证码位数
    $padding    = 5;    // 每两个文字之间间隔
    $margin     = 2;    // 左侧边距
    $base_line  = 15;   // 文字基线位置
    $base_line_offset = 2;  // 基准线偏移量
    $pixel_num  = 3;    // 杂点数目基数
    $pixel_color= 8;    // 杂点只有 $pixel_color 种颜色  总的杂点数为$pixel_num*$pixel_color
    $noise_font_size = 1; // 杂点字体大小
 $session_key= "my_captcha"; //自定义session键名
    header("Cache-Control: no-cache,must-revalidate");
    header("Expires: Mon,26 Jul 1997 05:00:00 GMT");
    header("Pragma: no-cache");
    header("Cache-control: private");
    header('Content-Type: image/png');
    session_start();
    $word = "";
    $code_str_len = strlen($code_str) - 1;
    for ($i = 0; $i < $word_len; $i++) {
        $word.= $code_str[rand(0,$code_str_len)];
    }
    $_SESSION [$session_key] = strtolower($word);
    $image = imagecreatetruecolor($img_w,$img_h);
    imagefilledrectangle($image,$img_w - 1,$img_h - 1,imagecolorallocate($image,mt_rand(235,255),255)));
  
    //绘制杂点
    for($i = 0; $i < $pixel_color; $i++){ 
        $noise_color = imagecolorallocate( $image,mt_rand(150,225),225) );
        for($j = 0; $j < $pixel_num; $j++) {
            imagestring( $image,$noise_font_size,mt_rand(-10,$img_w),$img_h),$code_str[mt_rand(0,$code_str_len)],$noise_color );
        }
    }
    
    //绘制文字
    for ($i = 0; $i < $word_len; ++$i) {           
        $color = imagecolorallocate($image,mt_rand(0,100),mt_rand(20,120),mt_rand(50,150));
        imagettftext($image,$font_size,mt_rand($angle_l,$angle_r),$margin,mt_rand($base_line-$base_line_offset,$base_line+$base_line_offset),$color,$font_dir,mb_substr($word,$i,1,'utf-8'));
        $margin += (imagefontwidth($font_size) + $padding);
    }
    imagepng($image);
    imagedestroy($image);
    exit;
}


/***   来自编程之家 jb51.cc(jb51.cc)   ***/
原文链接:https://www.f2er.com/php/529113.html

猜你在找的PHP相关文章