1. 程式人生 > >php實現驗證碼類

php實現驗證碼類

<?php class  Code{ // 1. 定義各個成員 有寬、高、畫布、字數、型別、畫型別 private  $width //寬度 private  $height //高度 private  $num //驗證碼字數 private  $imgType //生成圖片型別 private
  $Type //字串型別 1,2,3 三個選項 1 純數字 2 純小寫字母 3 大小寫數字混合 private  $hb //畫布 public  $codestr // 驗證碼字串 public  function  __construct( $height =20, $num =4,
$imgType = "jpeg" , $Type =1){ $this ->width =  $num *20; $this ->height =  $height ; $this ->num =  $num ; $this ->imgType =  $imgType $this
->Type =  $Type $this ->codestr =  $this ->codestr(); $this ->zuhe(); } // 2. 定義隨機獲取字串函式 private  function  codestr(){ switch ( $this ->Type){ case  1:  // 型別為1 獲取1-9隨機數 $str  = implode( "" , array_rand (range(0,9), $this ->num)); break ; case  2:  // 型別為2 獲取a-z隨機小寫字母 $str  = implode( "" , array_rand ( array_flip (range(a,z)), $this ->num)); break ; case  3:  // 型別為3 獲取數字,小寫字母,大寫字母 混合 for ( $i =0; $i < $this ->num; $i ++){ $m  = rand(0,2); switch ( $m ){ case  0: $o  = rand(48,57); break ; case  1: $o  = rand(65,90); break ; case  2: $o  = rand(97,122); break } $str  .= sprintf( "%c" , $o ); } break }   return  $str }   // 3. 初始化畫布影象資源 private  function  Hb(){ $this ->hb = imagecreatetruecolor( $this ->width, $this ->height);  } // 4. 生成背景顏色 private  function  Bg(){ return  imagecolorallocate( $this ->hb,rand(130,250),rand(130,250),rand(130,250));  } // 5. 生成字型顏色 private  function  Font(){ return  imagecolorallocate( $this ->hb,rand(0,100),rand(0,100),rand(0,100));  } // 6. 填充背景顏色 private  function  BgColor(){ imagefilledrectangle( $this ->hb,0,0, $this ->width, $this ->height, $this ->Bg());  } // 7. 干擾點 private  function  ganrao(){ $sum = floor (( $this ->width)*( $this ->height)/3); for ( $i =0; $i < $sum ; $i ++){ imagesetpixel( $this ->hb,rand(0, $this ->width),rand(0, $this ->height), $this ->Bg());  } } // 8. 隨機直線 弧線 private  function  huxian(){ for ( $i =0; $i < $this ->num; $i ++){ imageArc( $this ->hb,rand(0, $this ->width),rand(0, $this ->height),rand(0, $this ->width),rand(0, $this ->height),rand(0,360),rand(0,360), $this ->Bg());  } // 9. 寫字 private  function  xiezi(){ for ( $i =0; $i < $this ->num; $i ++){ $x = ceil ( $this ->width/ $this ->num)* $i $y =rand(1, $this ->height-15); imagechar( $this ->hb,5, $x +4, $y , $this ->codestr[ $i ], $this ->Font()); } // 10. 輸出 private  function  OutImg(){ $shuchu = "image" . $this ->imgType;  $header = "Content-type:image/" . $this ->imgType; if (function_exists( $shuchu )){ header( $header ); $shuchu ( $this ->hb);  } else { exit ( "GD庫沒有此類影象" );  } } // 11. 拼裝 private  function  zuhe(){ $this ->Hb(); $this ->BgColor(); $this ->ganrao(); $this ->huxian(); $this ->xiezi(); $this ->OutImg();  } public  function  getCodeStr(){ return  $this ->codestr;  } }   $a  new  Code(); $a  ->getCodeStr(); ?>