首頁  >  文章  >  php教程  >  PHP高自定义性安全验证码

PHP高自定义性安全验证码

PHP中文网
PHP中文网原創
2016-05-25 17:12:361093瀏覽

php代码

<?php
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(&#39;Content-Type: image/png&#39;);

    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, 0, 0, $img_w - 1, $img_h - 1, imagecolorallocate($image, mt_rand(235, 255), mt_rand(235, 255), mt_rand(235, 255)));
  
    //绘制杂点
    for($i = 0; $i < $pixel_color; $i++){ 
        $noise_color = imagecolorallocate( $image, mt_rand(150,225), mt_rand(150,225), mt_rand(150,225) );
        for($j = 0; $j < $pixel_num; $j++) {
            imagestring( $image,  $noise_font_size, mt_rand(-10, $img_w), mt_rand(-10, $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, &#39;utf-8&#39;));
        $margin += (imagefontwidth($font_size) + $padding);
    }

    imagepng($image);
    imagedestroy($image);
    exit;
}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:一个游戏的解答下一篇:php UBB 解析