captcha.php
1 <?php 2 3 /** 4 * @PHP验证码类 5 * 使用方法: 6 * $image=new Captcha(); 7 * $image->config('宽度','高度','字符个数','验证码session索引'); 8 * $image->create();//这样就会向浏览器输出一张图片 9 * //所有参数都可以省略, 10 * 默认是:宽80 高20 字符数4 验证码session索引captcha_code 11 * 第四个参数即把验证码存到$_SESSION['captcha_code'] 12 * 最简单使用示例: 13 * $image=new Captcha(); 14 * $image->create();//这样就会向浏览器输出一张图片 15 */ 16 class Captcha 17 { 18 private $width=80,$height=20,$codenum=4; 19 public $checkcode; //产生的验证码 20 private $checkimage; //验证码图片 21 private $disturbColor = ''; //干扰像素 22 private $session_flag='captcha_code';//存到session中的索引 23 //尝试开始session 24 function __construct(){ 25 @session_start(); 26 } 27 /* 28 * 参数:(宽度,高度,字符个数) 29 */ 30 function config($width='80',$height='20',$codenum='4',$session_flag='captcha_code') 31 { 32 $this->width=$width; 33 $this->height=$height; 34 $this->codenum=$codenum; 35 $this->session_flag=$session_flag; 36 } 37 function create() 38 { 39 //输出头 40 $this->outFileHeader(); 41 //产生验证码 42 $this->createCode(); 43 //产生图片 44 $this->createImage(); 45 //设置干扰像素 46 $this->setDisturbColor(); 47 //往图片上写验证码 48 $this->writeCheckCodeToImage(); 49 imagepng($this->checkimage); 50 imagedestroy($this->checkimage); 51 $_SESSION[$this->session_flag]=$this->checkcode; 52 } 53 /* 54 * @brief 输出头 55 */ 56 private function outFileHeader() 57 { 58 header ("Content-type: image/png"); 59 } 60 /** 61 * 产生验证码 62 */ 63 private function createCode() 64 { 65 $this->checkcode = strtoupper(substr(md5(rand()),0,$this->codenum)); 66 } 67 /** 68 * 产生验证码图片 69 */ 70 private function createImage() 71 { 72 $this->checkimage = @imagecreate($this->width,$this->height); 73 $back = imagecolorallocate($this->checkimage,255,255,255); 74 $border = imagecolorallocate($this->checkimage,0,0,0); 75 imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底 76 imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border); // 黑色边框 77 } 78 /** 79 * 设置图片的干扰像素 80 */ 81 private function setDisturbColor() 82 { 83 for ($i=0;$i<=200;$i++) 84 { 85 $this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255)); 86 imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor); 87 } 88 } 89 /** 90 * 在验证码图片上逐个画上验证码 91 */ 92 private function writeCheckCodeToImage() 93 { 94 for ($i=0;$i<$this->codenum;$i++) 95 { 96 $bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255)); 97 $x = floor($this->width/$this->codenum)*$i; 98 $y = rand(0,$this->height-15); 99 imagechar ($this->checkimage, rand(5,8), $x+5, $y, $this->checkcode[$i], $bg_color); 100 } 101 } 102 function __destruct() 103 { 104 unset($this->width,$this->height,$this->codenum,$this->session_flag); 105 } 106 } 107 ?>
引入类 yanzhengma.php
<?php require_once('captcha.php'); $image = new Captcha(); $image ->create();
1 <?php 2 ob_start(); 3 session_start(); 4 if(!empty($_POST)){ 5 $answer = $_POST['answer']; 6 $captcha = $_SESSION['captcha_code']; 7 if($answer !== $captcha){ 8 echo "<script>alert('验证码错误');history.go(-1);</script>"; 9 die; 10 } 11 12 13 14 ?> 15 16 17 <form name="login1" method="post" action=" " onsubmit="return checklogin1();"> 18 <ul class="loginRegist" style="margin-top: 85px;"> 19 <li> 20 <span class="titleOne" style=""> 21 <label for="username">账户</label> 22 </span> 23 <span style=" 200px;position: relative;" class="titleInput"> 24 <input id="username" name="username" class="regUserName" type="text" value="" placeholder="" /> 25 </span> 26 27 </li> 28 <li> 29 <span class="titleOne" style=""> 30 <label for="password">密码</label> 31 </span> 32 <span class="titleInput" style="position: relative;"> 33 <input id="password" name="password" type="password" placeholder="" maxlength="32" /> 34 </span> 35 36 </li> 37 38 <li> 39 <span class="titleOne"><label for="username">问题验证</label></span> 40 <span style=" 370px;display: inline-block;text-align: left;"> 41 <span class="titleInput"><input name="answer" id="answer" class="codeInput" type="text"/></span> 42 <!-- <a class="msgCodeBindBtnA" style="color: rgb(153, 153, 153);font-size: 13px;">23+51=?</a> --> 43 <img src="diaocaptcha.php" alt="验证码" onclick="this.src='diaocaptcha.php?='+Math.random()" /> 44 </span> 45 </li> 46 </ul> 47 <div class="registCue"> 48 <input class="regeditButton disagree" type="submit" value="登 陆"> 49 </div> 50 </form>