PHP验证码类

php验证码类

如果不适用指定的字体,那么就用imagestring()函数,如果需要遇到指定的字体,就要用到imagettftext()函数。字体的位置在C盘下Windows/Fonts.

VerificationCode.class.php

<?php
	class VerificationCode{
		private $charset="abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789";	//随机因子
		private $code;	//验证码
		private $codelen=4;	//验证码长度
		private $width=110;	//宽度
		private $height=30;	//高度
		private $img;	//图像资源句柄
		private $font;	//制定字体
		private $fontSize=25;	//字体大小
		private $fontColor;	//字体颜色
		public function __construct(){
			$this->font="CALIBRIZ.TTF";
		}
		//生成验证码
		private function createCode(){
			$len=strlen($this->charset)-1;
			for ($i = 0; $i < $this->codelen; $i++) {
				$this->code .= $this->charset[mt_rand(0,$len)];
			}
		}
		//生成背景
		private function createBg(){
			$this->img=imagecreatetruecolor($this->width,$this->height);
			$color = imagecolorallocate($this->img,mt_rand(157,255),mt_rand(157,255),mt_rand(157,255));
			imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
		}
		//生成文字
		private function createFont(){
			$x=$this->width/$this->codelen;
			for ($i = 0; $i < $this->codelen; $i++) {
				$this->fontColor=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
				imagettftext($this->img,$this->fontSize,mt_rand(-30,30),$i*$x+mt_rand(1,5),$this->height/1.4,$this->fontColor,$this->font,$this->code[$i]);
				//imagestring($this->img,5,$i*$x+mt_rand(1,5),5,$this->code[$i],$this->fontColor);
			}
		}
		//生成线条、雪花
		private function createDisturb(){
			for ($i = 0; $i < 6; $i++) {
				$color=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
				imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->width),mt_rand(0,$this->width),mt_rand(0,$this->width),$color);
			}
			for ($i = 0; $i < 100; $i++) {
				$color=imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
				imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
			}
		}
		//输出
		private function outPut(){
			header("Content-Type:image/png");
			imagepng($this->img);
			imagedestroy($this->img);
		}
		public function showCode(){
			$this->createBg();
			$this->createCode();
			$this->createDisturb();
			$this->createFont();
			$this->outPut();
		}
		//获取验证码
		public function getCode(){
			return strtolower($this->code);
		}
	}
?>

 

code.php

<?php
	session_start();
	require_once 'VerificationCode.class.php';
	$code=new VerificationCode();
	$_SESSION['code']=$code->getCode();
	$code->showCode();
?>

验证码:<input type="text" name="code" /><img src="code.php" οnclick="javascript:this.src='code.php?time='+Math.random();" />


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值