Home  >  Article  >  Backend Development  >  PHP verification code generation--memo

PHP verification code generation--memo

巴扎黑
巴扎黑Original
2016-11-29 09:38:181207browse

<?php 
session_start();//保存生成值,以与用户输入比较
//-------------------------------------------------------------------------
$img_w       = 80;// 设置图片宽
$img_h       = 20;// 设置图片高
$pixel_num   = 200;//点越多干扰越大
$is_set_line = true;// 启用干扰线
$pixel_mode  = 2;// 干扰点模式,1,同色;2,杂色
//-------------------------------------------------------------------------
// 随机数产生器
function make_seed()
{
    list($usec, $sec) = explode(&#39; &#39;, microtime());
    return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());//4.2.0以下版本适用
$authnum = mt_rand(100, 99999);
// 加入session
$_SESSION[&#39;verifycode&#39;]=$authnum;
//echo $authnum;
//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreatetruecolor($img_w, $img_h);
$bg_color = ImageColorAllocate($im, mt_rand(250,255),mt_rand(250,255),mt_rand(250,255));
// 绘制背景
imagefill($im,0,0,$bg_color);
$total_width = 0;
$word_info = array();
// 循环,获取文字信息
$word_length = strlen($authnum);
for($ii=0; $ii<$word_length; $ii++)
{
    $word_space = mt_rand(1,5);
    $font = rand(3,5);
    mt_rand(1,9)%2 == 0?$top = 1:$top = 3;
    $word_info[$ii][&#39;char&#39;]   = substr($authnum,$ii,1);
    $word_info[$ii][&#39;font&#39;]   = $font;
    $word_info[$ii][&#39;offset&#39;] = $top;
    if($ii == 0)
    {
        $word_info[$ii][&#39;width&#39;] = 0;
    }
    $word_info[$ii][&#39;width&#39;]  = imageFontWidth($font)+$word_space;
    $word_info[$ii][&#39;height&#39;] = imageFontHeight($font);
    $word_info[$ii][&#39;color&#39;]  = imageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));
    // 文字总宽度
    $total_width += $word_info[$ii][&#39;width&#39;];
    // 取第一个字体的高度
    if($ii == 0)
    {
        $total_height = imagefontHeight($font);
    }
}
// 计算偏移
$offset_x = floor(($img_w - $total_width)/2);
$offset_y = floor(($img_h - $total_height)/2);
// 填充验证码
$wid = 0;
$i = 0;
foreach($word_info as $key=>$val)
{
    if($i>0)
    {
        $wid += $val[&#39;width&#39;];
    }
    imagestring($im, $val[&#39;font&#39;], $offset_x + $wid, $val[&#39;offset&#39;] + $offset_y, $val[&#39;char&#39;], $val[&#39;color&#39;]);
    $i++;
}
switch($pixel_mode)
{
    case 1:
        $pixel_color  = ImageColorAllocate($im,
                                        mt_rand(50,255),
                                        mt_rand(50,255),
                                        mt_rand(50,255));
        // 干扰象素
        for($i=0;$i<$pixel_num;$i++)
        {
            imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);
        }
        break;
    case &#39;2&#39;:
        // 干扰象素
for ($i=0;$i<=128;$i++)
{
$pixel_color = imagecolorallocate ($im, rand(0,255), rand(0,255), rand(0,255));
imagesetpixel($im,mt_rand(2,128),mt_rand(2,38),$pixel_color);
}
        break;
    default:
        $pixel_color  = ImageColorAllocate($im,
                                        mt_rand(50,255),
                                        mt_rand(50,255),
                                        mt_rand(50,255));
        // 干扰象素
        for($i=0;$i<$pixel_num;$i++)
        {
            imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);
        }
        break;
}
ImagePNG($im);
?>

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn