好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

支持中文字母数字、自定义字体php验证码程序

支持中文字母数字、自定义字体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验证码程序的详细内容...

  阅读:58次