欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-13 10:55:01
...
PHP简单验证码类:字母+数字 字体随机扭曲

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

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

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

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]);
				}
		}
	}
}
?>

效果:

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


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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频