Heim  >  Artikel  >  Backend-Entwicklung  >  Generierung des PHP-Bestätigungscodes – Memo

Generierung des PHP-Bestätigungscodes – Memo

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

<?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);
?>

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn