php教程

超轻量级php框架startmvc

一个实用的php验证码类

更新时间:2020-03-21 23:22:56 作者:startmvc
万能php验证码类,供大家参考,具体内容如下code.php是验证码类,类的名称最好和文件名的

万能php验证码类,供大家参考,具体内容如下

code.php是验证码类,类的名称最好和文件名的名称一样,这样有利于我们的查看。

code.php


<?php
header('Content-type:text/html;charset=utf8');
class Code{
 // 验证码个数$number
 protected $number;
 // 验证码类型$codeType
 protected $codeType;
 // 验证码图像宽度$width
 protected $width;
 // 验证码$height
 protected $height;
 // 验证码字符串$code
 protected $code;
 // 图像资源$image
 protected $image;
 
 public function __construct($number=4,$codeType=0,$height=50,$width=100){
 //初始化自己的成员属性
 $this->number=$number;
 $this->codeType=$codeType;
 $this->width = $width;
 $this->height= $height;
 
 //生成验证码函数
 $this->code = $this ->createCode();
 
 }
 public function __get($name){
 if ($name == 'code'){
 return $this->code;
 }
 return false;
 }
 /*获取验证码*/
 public function getCode() {
 return $this->code;
 }
 /*图像资源销毁*/
 public function __destruct(){
 imagedestroy($this->image);
 }
 protected function createCode(){
 //通过你的验证码类型生成验证码
 switch ($this->codeType){
 case 0: //纯数字
 $code = $this->getNumberCode();
 break;
 case 1: //纯字母的
 $code = $this->getCharCode();
 break;
 case 2: //数字和字母混合
 $code = $this->getNumCharCode();
 break;
 default:
 die('不支持此类验证码类型');
 }
 return $code;
 }
 protected function getNumberCode(){
 $str = join('', range(0, 9));
 return substr(str_shuffle($str),0, $this->number);
 }
 protected function getCharCode(){
 $str = join('', range('a', 'z'));
 $str = $str.strtoupper($str);
 return substr(str_shuffle($str),0,$this->number);
 }
 protected function getNumCharCode(){
 $numstr = join('',range(0, 9));
 $str =join('', range('a', 'z'));
 $str =$numstr.$str.strtoupper($str);
 return substr(str_shuffle($str), 0,$this->number);
 }
 protected function createImage(){
 $this->image = imagecreatetruecolor($this->width, 
 $this->height);
 }
 protected function fillBack(){
 imagefill($this->image, 0, 0, $this->lightColor());
 }
 /*浅色*/
 protected function lightColor(){
 return imagecolorallocate($this->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255));
 }
 /*深色*/
 protected function darkColor(){
 return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
 }
 protected function drawChar(){
 $width = ceil($this->width / $this->number);
 for ($i=0; $i< $this->number;$i++){
 $x = mt_rand($i*$width+5, ($i+1)*$width-10);
 $y = mt_rand(0, $this->height -15);
 imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
 }
 }
 protected function drawLine(){
 for ($i=0;$i<5;$i++) {
 imageline($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());
 }
 }
 protected function drawDisturb(){
 for ($i=0;$i<150;$i++){
 $x=mt_rand(0, $this->width);
 $y=mt_rand(0, $this->height);
 imagesetpixel($this->image, $x, $y, $this->lightColor());
 }
 }
 protected function show(){
 header('Content-Type:image/png');
 imagepng($this->image);
 }
 public function outImage(){
// 创建画布
 $this->createImage();
// 填充背景色
 $this->fillBack();
// 将验证码字符串花到画布上
 $this->drawChar();
// 添加干扰元素
 $this->drawDisturb();
// 添加线条
 $this->drawLine();
// 输出并显示
 $this->show();
 }
}

test.php是new一个新的验证码,并把它保存到session中,为我们验证码的验证起到保存和存储的作用。

test.php


<?php
//开启session
session_start();
require_once 'code.php';

$code= new Code(4,1,50,100);
$_SESSION['code']= $code->getCode();
$code->outImage();

login.php就是最后的验证。

login.php


<?php 
 //开启Session 
 session_start(); 
 //判断是否提交 
 if(isset($_POST['dosubmit'])){ 
 //获取session中的验证码并转为小写 
 $sessionCode=strtolower($_SESSION['code']); 
 //获取输入的验证码 
 $code=strtolower($_POST['code']); 
 //判断是否相等 
 if($sessionCode==$code){ 
 echo "<script type='text/javascript'>alert('验证码正确!');</script>"; 
 }else{ 
 echo "<script type='text/javascript'>alert('验证码错误!');</script>"; 
 } 
 } 
 ?> 
 <!DOCTYPE html> 
 <html> 
 <head> 
 <title></title> 
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> 
 <style type="text/css"> 
 *{margin:0px;padding:0px;} 
 ul{ 
 width:400px; 
 list-style:none; 
 margin:50px auto; 
 } 
 
 li{ 
 padding:12px; 
 position:relative; 
 } 
 
 label{ 
 width:80px; 
 display:inline-block; 
 float:left; 
 line-height:30px; 
 } 
 
 input[type='text'],input[type='password']{ 
 height:30px; 
 } 
 
 img{ 
 margin-left:10px; 
 } 
 
 input[type="submit"]{ 
 margin-left:80px; 
 padding:5px 10px; 
 } 
 </style> 
 </head> 
 <body> 
 <form action="login.php" method="post"> 
 <ul> 
 <li> 
 <label>用户名:</label> 
 <input type="text" name="username"/> 
 </li> 
 <li> 
 <label>密码:</label> 
 <input type="password" name="password"/> 
 </li> 
 <li> 
 <label>验证码:</label> 
 <input type="text" name="code" size="4" style="float:left"/> 
 <img src="test.php" onclick="this.src='test.php?Math.random()'"/> 
 </li> 
 <li> 
 <input type="submit" value="登录" name="dosubmit"/> 
 </li> 
 </ul> 
 </form> 
 </body> 
 </html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

php 验证码类