分享一个php 验证码类及调用示例

php中文网
发布: 2016-07-25 08:56:39
原创
1148人浏览过
本文分享一个不错的php 验证码类,后面附有完整的调用示例,有需要的朋友,参考下吧。

1,php验证码类

<?php 
// usage: 
/* 
显示验证码:
<img  src="captcha.php?cap=login.png" alt="分享一个php 验证码类及调用示例 " >

检查验证码:
检查输入的验证码与 $_SESSION['login'] 中保存的值是否相等。

*/
error_reporting(E_ALL);
session_start();
(!isset($_GET['cap']))?die('Error !'):1;
$captcha_array=array('login.png','contact.png','comment.png');
(!in_array($_GET['cap'],$captcha_array))?die('Error !'):1;
$captcha_cod=new captcha(basename($_GET['cap'],'.png'))   ;

//验证码类
class captcha
{
private $session_name;
private $image_width;
private $image_height;
private $cod_length;
private $cod_mode;
private $font_path;
private $avtage_font_size;
private $sec_cod;
private $res_image;

function __construct($name,$width=200,$height=50,$length=5,$mod=2,$font='arial.ttf',$av_font_size=25)
 {
 $this->   session_name  =  $name  ;
 $this->   image_width  =  $width  ;
 $this->   image_height  =  $height  ;
 $this->   cod_length  =  $length  ;
 $this->   mode    =  $mod  ;
 $this->   font_path  =  $font  ;
 $this->   avrage_font_size   =  $av_font_size   ;
 
 $this->Gen_Cod();
 }
  
function Write_Text($text)
{
  $x_pos=10;
  for($pos=0;$pos<strlen($text);$pos++)  {
    imagettftext($this->res_image,rand($this->avrage_font_size -2,$this->avrage_font_size +2),
    rand(-40,+40),$x_pos,rand(35,$this->image_height - $this->avrage_font_size),
    imagecolorallocate($this->res_image,rand(0,150),rand(0,150),rand(0,150)),
    $this->font_path,$text[$pos]);
    $x_pos+=($this->image_width/$this->cod_length);
 }
}
  
function Draw_Line()
{
  //
  for($pos=0;$pos<$this->image_height;$pos+=8)
  imageline($this->res_image,0,$pos,$this->image_width,$pos,imagecolorallocate($this->res_image,rand(200,230),rand(200,230),rand(200,230)));
  
  //
  for($pos=0;$pos<$this->image_width;$pos+=8)
  imageline($this->res_image,$pos,0,$pos,$this->image_height,imagecolorallocate($this->res_image,rand(200,230),rand(200,230),rand(200,230)));
}  
function Gen_Cod()
{
  //generate rand cod : 
  //mode:1   => 0-9      ,  mode:2   => 0-9 , a-z
  ($this->mode==1) ? $this->sec_cod=substr((string)rand(1000000000,9999999999),0,$this->cod_length) :
  $this->sec_cod=substr(md5(rand(1000000000,9999999999)),0,$this->cod_length);
  //set session :
  $_SESSION[$this->session_name]   =   $this->sec_cod   ;
   
   //creat image :
   $this->res_image=imagecreatetruecolor(   $this->image_width   ,   $this->image_height   );
      
   //fill color:
   imagefilledrectangle($this->res_image,0,0,$this->image_width,$this->image_height,imagecolorallocate($this->res_image,255,255,255));
   
   //write text :
   $this->Write_Text($this->sec_cod);
   
   //draw line :
   $this->Draw_Line();
   
   //output :
   imagejpeg($this->res_image);
   header('content-type:image/jpeg');
   
   //destroy:
   imagedestroy($this->res_image);
 }
}
登录后复制

2,php验证码类的调用示例:

芦笋演示
芦笋演示

一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。

芦笋演示 34
查看详情 芦笋演示
<?php  
session_start(); 
if(isset($_POST['captchacod'])){ 
if($_SESSION['login']==$_POST['captchacod'])echo'Your Entered Cod Was Correct<br>'; 
else echo'Your Entered Cod Was Incorrect<br>'; 

} 
?> 
<img  src="captcha.php?cap=login.png"  alt="分享一个php 验证码类及调用示例 " > 
<form action="<?php echo $_SERVER['PHP_SELF']; //safe it later (xss)?>" method="post"> 
INPUT TEXT :<br> 
<input type="text" name="captchacod"><br> 
<input type="submit" value="check"><br> 
</form>
登录后复制


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号