万能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实现简单实用的验证码类,包括了PHP实现简单实用的验证码类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现简单实用的验证码类。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。
本文向大家介绍一个经典的PHP验证码类分享,包括了一个经典的PHP验证码类分享的使用技巧和注意事项,需要的朋友参考一下 我们通过PHP的GD库图像处理内容,设计一个验证码类Vcode。将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中。只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度、高度及验证码字母个数,就可以成功创建一个验证码类
本文向大家介绍php实现的Captcha验证码类实例,包括了php实现的Captcha验证码类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现的Captcha验证码类,在php程序设计中有着极其广泛的应用。分享给大家供大家参考。具体方法如下: 验证码类文件如下: demo示例程序如下: 相信本文所述对大家php程序设计的学习有一定的借鉴价值。
本文向大家介绍php实现的验证码文件类实例,包括了php实现的验证码文件类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现的验证码文件类。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。
本文向大家介绍PHP实现验证码校验功能,包括了PHP实现验证码校验功能的使用技巧和注意事项,需要的朋友参考一下 验证码的校验是利用PHP中的 SESSION功能来实现。 在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能。 接下来我们用到的就是验证码实现的代码。这里用英文数字的代码为例。 然后在验证码实现之前声明一个空变量,用来存放验证码。 用 POST 方式来接
本文向大家介绍php实现的数字验证码及数字运算验证码,包括了php实现的数字验证码及数字运算验证码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现的数字验证码及数字运算验证码。分享给大家供大家参考。具体如下: 1. 数字验证码: 2. 数字运算验证码: 希望本文所述对大家的php程序设计有所帮助。