Rumah >pembangunan bahagian belakang >tutorial php >PHP简略验证码类:字母+数字 字体随机扭曲

PHP简略验证码类:字母+数字 字体随机扭曲

WBOY
WBOYasal
2016-06-13 10:51:49830semak imbas

PHP简单验证码类:字母+数字 字体随机扭曲

      现在各式各样的验证码,个人认为验证码是让用户看的,所以简单就好。什么干扰码,倾斜,复杂的背景 都是对用户的一种折磨。

      看了一些比较大的体验比较好的网站验证码都较为简单,没有复杂的背景,没有干扰码,没有背景。

      有什么地方写的不好的欢迎大家批评,指点。

<?phpif (!defined('IS_INITPHP')) exit('Access Denied!');/********************************************************************************* * InitPHP 2.0 国产PHP开发框架  扩展类库-验证码*-------------------------------------------* 版权所有: CopyRight By initphp.com* 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己*-------------------------------------------* $Author:liuxinming* $Dtime:2012-10-09***********************************************************************************/class seccodeInit{	private $width;	private $height;	private $type=0;// 0 字母+数字验证码	private $time=3000;//验证码过期时间(s)	private $color=null;//验证码字体颜色	private $im;	private $length=4;//验证码长度	private $warping;//随机扭曲		/**	 * 获取随机数值	 * @return string	 */	private function get_random_val() {		$i=0;		while($i<$this->length)		{			mt_srand((double)microtime()*1000000);			$randnum=mt_rand(50,90);			if(!in_array($randnum,array(58,59,60,61,62,63,64,73,79)))			{				$authnum=$authnum.chr($randnum);				$i++;			}		}		session_start();		$time=time();		$checkcode=md5(md5($authnum.'initphpYzmsy'.$time));		$key=$time.','.$checkcode.','.authnum;		$_SESSION['initphp_code'] = $key;		return $authnum;	}		/**	 * 获取验证码图片	 * @param $width 宽	 * @param $height 高	 * @param $warping 字体随机扭曲开关 0=关,1=开	 * @return string	 */	public function getcode($width=140,$height=40,$warping=0){		$this->width=$width;		$this->height=$height;		$this->warping=$warping;		if($this->typeimage();		}	}	/**	 * 生成图片验证码	 * @return string	 */	public function image(){		$this->im=imagecreate($this->width, $this->height);//设置图片背景大小		imagecolorallocate($this->im, 243, 251, 254);// 设置背景  		$this->color=imagecolorallocate($this->im, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));// 验证码字体随机颜色		$ttfPath = dirname(__FILE__) . '/font/';//字体目录		$dirs = opendir($ttfPath);		$seccodettf = array();		while($entry = readdir($dirs)) {			if($entry != '.' && $entry != '..' && in_array(strtolower(addslashes(strtolower(substr(strrchr($entry, '.'), 1, 10)))), array('ttf', 'ttc'))) {								$seccodettf[] = $ttfPath.$entry;			}		}		$ttf = $seccodettf[array_rand($seccodettf)];//随机一种字体		$size = $this->type ? $this->width / 7 : $this->width / 6;//字体大小		imagettftext($this->im,$size, 0, 10, $size*1.2, $this->color, $ttf, $this->get_random_val());//设置验证码字符		if($this->warping){//随机扭曲			$this->setWarping();		}		if(function_exists("imagepng"))		{			header ("Content-type: image/png");			$code=imagepng($this->im);		}elseif (function_exists("imagejpeg"))		{			header ("Content-type: image/jpeg");			$code=imagejpeg($this->im);		}elseif (function_exists("imagegif")) 		{			header("Content-type: 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[0]>$time||$time-$secode[0]>$this->time)		{			return false;		}		//验证码密钥 双md5 后是否一致		if($secode[1]md5(md5($code.'initphpYzmsy'.$secode[0]))){			return false;		}		//检查验证码字符串是否一致		if($code||$code$secode[2])		{			return false;		}		return true;	}		/*随机扭曲*/	public function setWarping(){		$rgb=array();		$direct=rand(0,1);		$width = imagesx($this->im);		$height = imagesy($this->im);		$level=$width /20;		for($j = 0;$j im, $i , $j);				}			for($i = 0;$i im, $i + $r , $j , $rgb[$i]);				}		}	}}?>

效果:


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn