熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP簡單驗證碼類:字母+數字 字體隨機扭曲

2013-11-15 12:21:26  來源: PHP編程 

  看了一些比較大的體驗比較好的網站驗證碼都較為簡單沒有復雜的背景沒有干擾碼沒有背景

  有什麼地方寫的不好的歡迎大家批評指點

  [php]

  if (!defined(IS_INITPHP)) exit(Access Denied!);

  /*********************************************************************************

  * InitPHP 國產PHP開發框架 擴展類庫驗證碼

  *

  *

  * $Author:liuxinming

  * $Dtime:

  ***********************************************************************************/

  class seccodeInit{

  private $width;

  private $height;

  private $type=;// 字母+數字驗證碼

  private $time=;//驗證碼過期時間(s)

  private $color=null;//驗證碼字體顏色

  private $im;

  private $length=;//驗證碼長度

  private $warping;//隨機扭曲

  /**

  * 獲取隨機數值

  * @return string

  */

  private function get_random_val() {

  $i=;

  while($i<$this>length)

  {

  mt_srand((double)microtime()*);

  $randnum=mt_rand();

  if(!in_array($randnumarray()))

  {

  $authnum=$authnumchr($randnum);

  $i++;

  }

  }

  session_start();

  $time=time();

  $checkcode=md(md($authnuminitphpYzmsy$time));

  $key=$time$checkcodeauthnum;

  $_SESSION[initphp_code] = $key;

  return $authnum;

  }

  /**

  * 獲取驗證碼圖片

  * @param $width 寬

  * @param $height 高

  * @param $warping 字體隨機扭曲開關 =關=開

  * @return string

  */

  public function getcode($width=$height=$warping=){

  $this>width=$width;

  $this>height=$height;

  $this>warping=$warping;

  if($this>type<&& function_exists(imagecreate) && function_exists(imagecolorset) && function_exists(imagecopyresized) && function_exists(imagecolorallocate) && function_exists(imagechar) && function_exists(imagecolorsforindex) &&

  function_exists(imageline) && function_exists(imagecreatefromstring) && (function_exists(imagegif) || function_exists(imagepng) || function_exists(imagejpeg))){

  $this>image();

  }

  }

  /**

  * 生成圖片驗證碼

  * @return string

  */

  public function image(){

  $this>im=imagecreate($this>width $this>height);//設置圖片背景大小

  imagecolorallocate($this>im );// 設置背景

  $this>color=imagecolorallocate($this>im mt_rand() mt_rand() mt_rand());// 驗證碼字體隨機顏色

  $ttfPath = dirname(__FILE__) /font/;//字體目錄

  $dirs = opendir($ttfPath);

  $seccodettf = array();

  while($entry = readdir($dirs)) {

  if($entry != && $entry != && in_array(strtolower(addslashes(strtolower(substr(strrchr($entry ) )))) array(ttf ttc))) {

  $seccodettf[] = $ttfPath$entry;

  }

  }

  $ttf = $seccodettf[array_rand($seccodettf)];//隨機一種字體

  $size = $this>type ? $this>width / : $this>width / ;//字體大小

  imagettftext($this>im$size $size* $this>color $ttf $this>get_random_val());//設置驗證碼字符

  if($this>warping){//隨機扭曲

  $this>setWarping();

  }

  if(function_exists(imagepng))

  {

  header (Contenttype: image/png);

  $code=imagepng($this>im);

  }elseif (function_exists(imagejpeg))

  {

  header (Contenttype: image/jpeg);

  $code=imagejpeg($this>im);

  }elseif (function_exists(imagegif))

  {

  header(Contenttype: image/gif);

  $code=imagegif($this>im);

  }

  imagedestroy($this>im);

  return $code;

  }

  /**

  * 檢查驗證碼

  * @param $code

  * @return bool

  */

  public function checkCode($code) {

  session_start();

  $secode=explode( $_SESSION[initphp_code]);

  $time=time();

  //檢查時間是否過期

  if($secode[]>$time||$time$secode[]>$this>time)

  {

  return false;

  }

  //驗證碼密鑰 雙md 後是否一致

  if($secode[]<>md(md($codeinitphpYzmsy$secode[]))){

  return false;

  }

  //檢查驗證碼字符串是否一致

  if($code||$code<>$secode[])

  {

  return false;

  }

  return true;

  }

  /*隨機扭曲*/

  public function setWarping(){

  $rgb=array();

  $direct=rand();

  $width = imagesx($this>im);

  $height = imagesy($this>im);

  $level=$width /;

  for($j = ;$j < $height;$j++) {

  for($i = ;$i < $width;$i++) {

  $rgb[$i] = imagecolorat($this>im $i $j);

  }

  for($i = ;$i < $width;$i++) {

  $r = sin($j / $height * * M_PI M_PI * ) * ($direct ? $level : $level);

  imagesetpixel($this>im $i + $r $j $rgb[$i]);

  }

  }

  }

  }

  ?>

  效果


From:http://tw.wingwit.com/Article/program/PHP/201311/20786.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.