本文章给大家介绍利用session存储与gd库一并生成验证码程序,同时会加入一些干扰元素,这样就可以简单的防机器注册了,下面我来给各位同学介绍介绍。
php验证码并生成图片程序,采用了session识别,稍微改进了一下目前网络上流传的php验证码,加入杂点,数字颜色随机显示,控制4位数字显示;话不多说了,程序如下,分享出来。
新建yz.php验证码生成文件:
注意:以下代码需要打开php的gd库,修改php.in文件的配置,把已经注释掉的行之前的分号取消即可:extension=php_gd2.dll。
代码如下 复制代码
width=$width;
$this->height=$height;
$this->codenum=$codenum;
$number=floor($width*$height/15);
if($number>240-$codenum)
{
$this->disturbcolornum=240-$codenum;
}else
{
$this->disturbcolornum=$number;
}
$this->checkcode=$this->createcheckcode();
}
function getcheckcode()
{
return $this->checkcode;
}
private function createimage(){
$this->image=imagecreatetruecolor($this->width,$this->height);
$backcolor=imagecolorallocate($this->image,rand(225,255),rand(225,255),rand(255,255));
imagefill($this->image,0,0,$backcolor);
$border=imagecolorallocate($this->image,0,0,0);
imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
}
private function setdisturbcolor(){
for($i=0;$idisturbcolornum;$i++){
$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
}
for($i=0;$i {
$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
imagearc($this->image,rand(-10,$this->width),rand(-10,$this->height),rand(30,300),rand(20,300),55,44,$color);
}
}
private function outputtext($fontface=){
for($i=0;$icodenum;$i++)
{
$fontcolor=imagecolorallocate($this->image,rand(0,128),rand(0,128),rand(0,128));
if($fontface==)
{
$fontsize=rand(3,5);
$x=floor($this->width/$this->codenum)*$i+5;
$y=rand(0,$this->height-15);
imagechar($this->image,$fontsize,$x,$y,$this->checkcode{$i},$fontcolor);
}
else
{
$fontsize=rand(12,16);
$x=floor(($this->width-8)/$this->codenum)*$i+8;
$y=rand($fontsize,$this->height-8);
imagettftext($this->image,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontface,$this->checkcode{$i});
}
}
}
private function createcheckcode(){
$code=23456789abcdefghijkmnpqrstuvwrst;
$str=;
for($i=0;$icodenum;$i++)
{
$char=$code{rand(0,strlen($code)-1)};
$str.=$char;
}
return $str;
}
private function outputimage()
{
if(imagetypes()&img_gif)
{
header(content-type:image/gif);
imagepng($this->image);
}else if(imagetypes()&img_jpg)
{
header(content-type:image/jpeg);
imagepng($this->image);
}else if(imagetypes()&img_png)
{
header(content-type:image/png);
imagepng($this->image);
}else if(imagetypes()&img_wbmp){
header(content-type:image/vnd.wap.wbmp);
imagepng($this->image);
}else
{
die(php不支持图片验证码);
}
}
//通过该方法向浏览器输出图像
function showimage($fontface=)
{
//创建图像背景
$this->createimage();
//设置干扰元素
$this->setdisturbcolor();
//向图像中随机画出文本
$this->outputtext($fontface);
//输出图像
$this->outputimage();
}
function __destruct()
{
imagedestroy($this->image);
}
}
function checklogin(){
if(empty($_post['name']))
die( '用户名不能为空');
if(empty($_post['password']))
die(密码不能为空);
if($_session['code']!=$_post['vertify'])
die(验证码输入不正确.$_session['code']);
$username=$_post['name'];
$password=md5($_post['password']);
//检查是否存在
conndb($username,$password);
}
function conndb($name=,$ps=){
$conn=mysql_connect('localhost','root','123456');
if(!$conn) die(数据库连接失败.mysql_error());
mysql_select_db('5kan',$conn) or die('选择数据库失败'.mysql_error());
mysql_set_charset('utf8',$conn);
$sql=select id from k_user where username='{$name}' and password='{$ps}';
$result=mysql_query($sql) or die(sql语句错误.mysql_error());
if(mysql_num_rows($result)>0) die(登录成功);
else die(用户名或者密码错误);
mysql_close($conn);
}
session_start();
if(!isset($_post['randnum']))
{
$code=new validationcode(120,20,4);
$code->showimage(comicbd.ttf); //显示在页面
$_session['code']=$code->getcheckcode();//保存在服务器中
}
else
{
checklogin();
}
?>
到具体调用的地方,用这样的形式:就可以了;验证的时候验证session:$_session['vcode']的值就可以了。还可以对以上代码稍微改进,改成两个数字相加求和的形式
http://www.bkjia.com/phpjc/629629.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/629629.htmltecharticle本文章给大家介绍利用session存储与gd库一并生成验证码程序,同时会加入一些干扰元素,这样就可以简单的防机器注册了,下面我来给各位...