支持中文字母数字、自定义字体php验证码程序
验证码常用于登陆页面、留言页面、注册页面,验证码的原理很简单:利用GD库创建一个图片,图片当然要加上必要的干扰码,然后在服务器端存入SESSION,等用户提交的时候判断session是否相同.
支持中文字母数字、自定义字体php验证码程序代码如下:
<?php /* * Captcha Class base on PHP GD Lib * @author Design * @version 1.0 * @copyright js8.in 2010 * @demo * include('captchaClass.php'); * $captchaDemo=new Captcha(); * $captchaDemo->createImage(); */ class Captcha{ //@定义验证码图片高度 private $height ; //@定义验证码图片宽度 private $width ; //@定义验证码字符个数 private $textNum ; //@定义验证码字符内容 private $textContent ; //@定义字符颜色 private $fontColor ; //@定义随机出的文字颜色 private $randFontColor ; //@定义字体大小 private $fontSize ; //@定义字体 private $fontFamily ; //@定义背景颜色 private $bgColor ; //@定义随机出的背景颜色 private $randBgColor ; //@定义字符语言 private $textLang ; //@定义干扰点数量 private $noisePoint ; //@定义干扰线数量 private $noiseLine ; //@定义是否扭曲 private $distortion ; //@定义扭曲图片源 private $distortionImage ; //@定义是否有边框 private $showBorder ; //@定义验证码图片源 private $image ; //@Constructor 构造函数 public function Captcha(){ $this ->textNum=4; $this ->fontSize=16; $this ->fontFamily= 'c:\windows\fontsSIMYOU.ttf' ; //设置中文字体,可以改成linux的目录 $this ->textLang= 'en' ; $this ->noisePoint=30; $this ->noiseLine=3; $this ->distortion=false; $this ->showBorder=false; } //@设置图片宽度 public function setWidth( $w ){ $this ->width= $w ; } //@设置图片高度 public function setHeight( $h ){ $this ->height= $h ; } //@设置字符个数 public function setTextNumber( $textN ){ $this ->textNum= $textN ; } //@设置字符颜色 public function setFontColor( $fc ){ $this ->fontColor=sscanf( $fc , '#%2x%2x%2x' ); } //@设置字号 public function setFontSize( $n ){ $this ->fontSize= $n ; } //@设置字体 public function setFontFamily( $ffUrl ){ $this ->fontFamily= $ffUrl ; } //@设置字符语言 public function setTextLang( $lang ){ $this ->textLang= $lang ; } //@设置图片背景 public function setBgColor( $bc ){ $this ->bgColor=sscanf( $bc , '#%2x%2x%2x' ); } //@设置干扰点数量 public function setNoisePoint( $n ){ $this ->noisePoint= $n ; } //@设置干扰线数量 public function setNoiseLine( $n ){ $this ->noiseLine= $n ; } //@设置是否扭曲 public function setDistortion( $b ){ $this ->distortion= $b ; } //@设置是否显示边框 public function setShowBorder( $border ){ $this ->showBorder= $border ; } //@初始化验证码图片 public function initImage(){ if ( empty empty ( $this ->width)){ $this ->width= floor ( $this ->fontSize*1.3)* $this ->textNum+10;} if ( empty empty ( $this ->height)){ $this ->height= $this ->fontSize*2;} $this ->image=imagecreatetruecolor( $this ->width, $this ->height); if ( empty empty ( $this ->bgColor)){ $this ->randBgColor=imagecolorallocate( $this ->image,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255)); } else { $this ->randBgColor=imagecolorallocate( $this ->image, $this ->bgColor[0], $this ->bgColor[1], $this ->bgColor[2]); } imagefill( $this ->image,0,0, $this ->randBgColor); } //@产生随机字符 public function randText( $type ){ $string = '' ; switch ( $type ){ case 'en' : $str = 'ABCDEFGHJKLMNPQRSTUVWXY3456789' ; for ( $i =0; $i < $this ->textNum; $i ++){ $string = $string . ',' . $str [mt_rand(0,29)]; } break ; case 'cn' : for ( $i =0; $i < $this ->textNum; $i ++) { $string = $string . ',' . chr (rand(0xB0,0xCC)). chr (rand(0xA1,0xBB)); } $string =iconv( 'GB2312' , 'UTF-8' , $string ); //转换编码到utf8 break ; } return substr ( $string ,1); } //@输出文字到验证码 public function createText(){ $textArray = explode ( ',' , $this ->randText( $this ->textLang)); $this ->textContent=join( '' , $textArray ); if ( empty empty ( $this ->fontColor)){ $this ->randFontColor=imagecolorallocate( $this ->image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100)); } else { $this ->randFontColor=imagecolorallocate( $this ->image, $this ->fontColor[0], $this ->fontColor[1], $this ->fontColor[2]); } for ( $i =0; $i < $this ->textNum; $i ++){ $angle =mt_rand(-1,1)*mt_rand(1,20); imagettftext( $this ->image, $this ->fontSize, $angle ,5+ $i * floor ( $this ->fontSize*1.3), floor ( $this ->height*0.75), $this ->randFontColor, $this ->fontFamily, $textArray [ $i ]); } } //@生成干扰点 public function createNoisePoint(){ for ( $i =0; $i < $this ->noisePoint; $i ++){ $pointColor =imagecolorallocate( $this ->image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagesetpixel( $this ->image,mt_rand(0, $this ->width),mt_rand(0, $this ->height), $pointColor ); } } //@产生干扰线 public function createNoiseLine(){ for ( $i =0; $i < $this ->noiseLine; $i ++) { $lineColor =imagecolorallocate( $this ->image,mt_rand(0,255),mt_rand(0,255),20); imageline( $this ->image,0,mt_rand(0, $this ->width), $this ->width,mt_rand(0, $this ->height), $lineColor ); } } //@扭曲文字 public function distortionText(){ $this ->distortionImage=imagecreatetruecolor( $this ->width, $this ->height); imagefill( $this ->distortionImage,0,0, $this ->randBgColor); for ( $x =0; $x < $this ->width; $x ++){ for ( $y =0; $y < $this ->height; $y ++){ $rgbColor =imagecolorat( $this ->image, $x , $y ); imagesetpixel( $this ->distortionImage,(int)( $x +sin( $y / $this ->height*2*M_PI-M_PI*0.5)*3), $y , $rgbColor ); } } $this ->image= $this ->distortionImage; } //@生成验证码图片 public function createImage(){ $this ->initImage(); //创建基本图片 $this ->createText(); //输出验证码字符 if ( $this ->distortion){ $this ->distortionText();} //扭曲文字 $this ->createNoisePoint(); //产生干扰点 $this ->createNoiseLine(); //产生干扰线 if ( $this ->showBorder){imagerectangle( $this ->image,0,0, $this ->width-1, $this ->height-1, $this ->randFontColor);} //添加边框 imagepng( $this ->image); imagedestroy( $this ->image); if ( $this ->distortion){imagedestroy( $this -> $distortionImage );} return $this ->textContent; } //开源代码phpfensi测试数据 } ?> //使用方法: <?php //session_start(); header( "Content-type:image/png" ); include ( 'captcha5_class.php' ); $captcha5 = new Captcha(); //@设置验证码宽度 //$captcha5->setWidth(200); //@设置验证码高度 //$captcha5->setHeight(50); //@设置字符个数 $captcha5 ->setTextNumber(5); //@设置字符颜色 //$captcha5->setFontColor('#ff9900'); //@设置字号大小 //$captcha5->setFontSize(25); //@设置字体 $captcha5 ->setFontFamily( 'c:\windows\fonts\STXINGKA.TTF' ); //@设置语言 $captcha5 ->setTextLang( 'cn' ); //@设置背景颜色 //$captcha5->setBgColor('#000000'); //@设置干扰点数量 //$captcha5->setNoisePoint(600); //@设置干扰线数量 //$captcha5->setNoiseLine(10); //@设置是否扭曲 //$captcha5->setDistortion(true); //@设置是否显示边框 $captcha5 ->setShowBorder(true); //输出验证码 $code = $captcha5 ->createImage(); //$_SESSION['captchaCode']['content']=$code; //$_SESSION['captchaCode']['time']=microtime(); ?>查看更多关于支持中文字母数字、自定义字体php验证码程序的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29540