PHP 非常复杂的数字验证码

发布时间:2011年11月01日      浏览次数:824 次
<?php
Header("Content-type: image/PNG");
$imgWidth = 60; //验证码的宽度
$imgHeight = 22; //验证码的高度
$img = imagecreate($imgWidth,$imgHeight);//设置图片的宽与高
$bgColor = ImageColorAllocate($img,255,255,255); //背景色
$white = imagecolorallocate($img,255,255,255); //白色
$orange = imagecolorallocate($img,234,185,95);
$red = imagecolorallocate($img,200,0,0); //红色
$blue = imagecolorallocate($img,0,0,150);//蓝色
$black = imagecolorallocate($img,0,0,0);//黑色

imagearc($img, 10, 8, 40, 20, 15, 10, $black);
imagearc($img, 10, 7, 80, 30, 35, 5, $black);
imageline($img, 0, 10, 100, 10, $blue); //蓝线:左、上、右、下
imageline($img, 0, 0, 100, 40, $red); //红线:左、上、右、下
imageline($img, 0, 20, 100, -20, $orange); //黄线:左、上、右、下
$noise_num = 200; //杂点密度
$line_num = 5; //线的数量
imagecolorallocate($img,0xff,0xff,0xff);

$noise_color=imagecolorallocate($img,0x00,0x00,0x00);//点颜色
$font_color=imagecolorallocate($img,0x00,0x00,0x00); //字颜色
$line_color=imagecolorallocate($img,0x00,0x00,0x00); //线颜色

//加入干扰点
for($i=0;$i<$noise_num;$i++){
      imagesetpixel($img,mt_rand(0,$imgWidth),mt_rand(0,$imgHeight),$noise_color);
}
//加入干扰线
for($i=0;$i<$line_num;$i++){
      imageline($img,mt_rand(0,$imgWidth),mt_rand(0,$imgHeight),mt_rand(0,$imgWidth),mt_rand(0,$imgHeight),$line_color);
}

//使用数字
$fontfile = "arialbd.ttf"; //如果使用中文验证码,则必须使用包含中文的字体文件
$fontsiz = 16; //如果使用中文验证码,则必须使用包含中文的字体文件
$str = Rnd_num(4); //如果使用中文,则注释本行,

ImageTTFText($img, $fontsiz, -50, 3, 10, $font_color, $fontfile, $str[0]);
ImageTTFText($img, $fontsiz, -30, 17, 15, $font_color, $fontfile, $str[1]);
ImageTTFText($img, $fontsiz, 10, 35, 18, $font_color, $fontfile, $str[2]);
ImageTTFText($img, $fontsiz, -20, 44, 16, $font_color, $fontfile, $str[3]);

//      ImageTTFText($img, 14, 0, 5, 20, $font_color, $fontfile, $str);//对象,字体大小,角度(0 度为从左向右读的文本),左边距,上边距,颜色,字体,字符串

//输出图片
ImagePNG($img);
ImageDestroy($img);

///////////////////////////////////////////////////////////////////////////////
//【函数】随机生成数字
function Rnd_num($length){
      $output='';
      for ($a = 0; $a < $length; $a++) {
            $output .= chr(mt_rand(48, 57));//随机生成0-9的数字
      }
      return $output;
}

?>
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!