PHP图形验证码生成代码与包括Ajax验证实例应用(1/2)

 更新时间:2016年11月25日 16:58  点击:2013
以前写的验证码程序都是提供了源代码,但是没真的实的图形验证码生成到验证实例,这次我们一个完整的php 验证实例产生了。

有3个文件:
authcode.php-----验证码的生成php文件
authcode.html-----前台显示页面
dealauthcode.php-----ajax提交到的后台处理判断验证码是否正确的处理页面
*/
?>

前台调用验证码代码

 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.111cn.net/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>验证码ajax验证</title>
<style type="text/css教程">
        *{ font-size:12px;}
        a{ text-decoration:none;}
        a:hover{ text-decoration:underline; color:red;}
</style>
<script language="网页特效" src="http://code.jquery.com/jquery-1.4.2.min.网页特效"></script>
<script language="网页特效">
        $(document).ready(function(){
                /*----------------看不清楚,换张图片-----------*/
                $("#chang_authcode_btn").click(function(){
                        var authcode_url = "authcode.php?t="+math.random(0,1);
                        $("#authcode_img").attr('src',authcode_url);
                });               
                /*----------------检测验证码-----------*/       
                $("#authcode").bind({
                        'focusin':function(){
                                /**
                                 *得到焦点
                                 *我将img图片移除,若只改变src为'
                                 *'的话,在ie下会呈现出一个无图片的小图片,
                                 *所以我这里选择直接把img元素移除
                                 */
                                $(this).next('label').children('img').remove();
                                $(this).next('label').children('span').text('');
                        },               
                        'focusout':function(){
                                /**
                                 *失去焦点
                                 *这里要做的事情主要有下列几个:
                                 *(1)先用网页特效验证用户输入的验证是不是4位合法的字符,正则匹配
                                 *(2)如果正则匹配失败(不是合法的4位字符),在更新次验证码图片(也就是再触发一次"看不清楚"的a标签的点击事件)
                                 */
                                 var input_authcode = $(this).val();
                                 var authcode_regex = new regexp('^[a-z0-9]{4}','i');
                                 if(!authcode_regex.test(input_authcode)){//不是合法的4位字符串,显示错误信息给用户
                                        $(this).next('label').prepend("<img src='input_error.gif'/>");//加上错误图标
                                        $(this).next('label').children('span').text('输入的验证码格式错误!');//加上错误提示信息
                                        $("#chang_authcode_btn").trigger('click');//再次刷新图片
                                 }else{//ajax服务器验证,就是把用户的输入的验证码提交到服务器上的某个验证页面来处理!
                                         $.get('dealauthcode.php',{authcode:input_authcode},function(check_result){
                                                if(check_result=='mis_match'){//服务器验证没通过
                                                        $("#authcode").next('label').prepend("<img src='input_error.gif'/>");//加上错误图标
                                                        $("#authcode").next('label').children('span').text('验证码输入错误!');//加上错误提示信息
                                                        $("#chang_authcode_btn").trigger('click');//再次刷新图片
                                                }else{//服务器验证通过了
                                                        $("#authcode").next('label').prepend("<img src='input_ok.gif'/>");//加上正确图标
                                                        $("#authcode").next('label').children('span').text('验证码输入正确!');//加上正确提示信息       
                                                }                                                                                
                                         });
                                 }
                        }
                });               
        });
</script>
</head>
<body>
<div >
        <div><img id="authcode_img" src="authcode.php" /> <a id="chang_authcode_btn" style="cursor:pointer">看不清楚?换一张!</a></div>
        <div>验证码:<input id="authcode" type="text" size="20" /><label><span class="error_msg"></span></label></div>
</div>
</body>
</html>

dealauthcode.php-----ajax提交到的后台处理判断验证码是否正确的处理页面

 代码如下 复制代码
<?php
        session_start();
       $authcode = $_get['authcode'];
//这里的$_session['authcode']是在验证码authcode页面产生的
if(strtoupper($authcode)!= $_session['authcode']){   
echo 'mis_match';       
        }
?> 这是一款利用php自带的功能把指定的大图生成我们指定大小的缩略图代码哦,使用方便简单,只要把设置下面四个参数就可以生成自己想的大小的缩略图哦。
 代码如下 复制代码

function bigtosmallimg($file,$path,$w=120,$h=90)
{
 $img=$path.$file;
 $imgarr=getimagesize($img);
 $sw=$imgarr[0];//原图宽
 $sh=$imgarr[1];//原图高
 $stype=$imgarr[2];
 //按比例缩放
 if($sw/$sh>$w/$h){
  $mw=$w;
  $mh=(int)$sh*($w/$sw);
 }
 else{
  $mw=(int)$sw*($h/$sh);
  $mh=$h;
 }

 switch($stype){//根据上传好的图形文件类型新建一个用来生成缩略图的源文件。
   case 1:
    $srcf = imagecreatefromgif($img);
    break;
   case 2:
    $srcf = imagecreatefromjpeg($img);
    break;
   case 3:
    $srcf = imagecreatefrompng($img);
    break;
   default:
    showmsg('程序调用错误。');
    break;
 }

 $desf =imagecreatetruecolor($mw,$mh);

 imagecopyresampled($desf,$srcf,0,0,0,0,$mw,$mh,$sw,$sh);
 $sm_name=$path."s_".$file;
 switch($stype){
  case 1:
   imagegif($desf,$sm_name);
   break;
  case 2:
   imagejpeg($desf,$sm_name);
   break;
  case 3:
   imagepng($desf,$sm_name);
   break;
  default:
   showmsg('无法生成www.111cn.net' . $stype . '的缩略图。');
   break;
 }
 imagedestroy($desf);
 imagedestroy($srcf);

}

//此缩略图调用方法

 代码如下 复制代码

bigtosmallimg($file,$path,$w=120,$h=90);
/*

$file = 图片的路径
$path = 生成后保存的路径
$w =图片宽度
$h =图片高度
*/

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<?php

class upfileclass {

 var $upfile, $upfile_name, $upfile_size;
 # $upfile 临时文件名 $_files['tmp_name'] ,$upfile_name 文件名 $_files['name'] ,$upfile_size 文件大小$_files['size'];

 var $new_upfile_name;   # 上传后的文件名称 ;
 var $fleth, $fileextent; # 文件扩展名(类型) ;
 var $f1, $f2, $f3;   # 文件保存路径(多级) upfiles/2008-01/08/;
 var $filename;    # 文件(带路径) ;
 var $filepath; #相对路径用来删除文件;
 var $maxsize, $file_type; # 允许上传文件的大小 允许上传文件的类型 ;

 var $buildfile,$newfile,$file_width,$file_height,$rate;

 function upfileclass($upfile,$upfile_name,$upfile_size){
   $this->upfile = $upfile;
   $this->upfile_name = $upfile_name;
   $this->upfile_size = $upfile_size;
   $this->new_upfile_name = $this->createnewfilename($this->upfile_name);
   $this->f1 = "upfiles";
   $this->f2 = $this->f1."/".date('y')."-".date('m');
   $this->f3 = $this->f2."/".date('d');
   $this->filename = $this->f3 . "/" . $this->new_upfile_name;
   $this->maxsize = 500*1024;    # 文件大小 500kb
   $this->file_type = "gif/jpg/jpeg/png/bmp"; # 允许上传的文件类型
 }

 # 创建新文件名 (原文件名)
 function createnewfilename($file_name){
    $this->fleth = explode(".",$file_name);
    $this->fileextent = $this->fleth[(int)count($this->fleth)-1]; # 获取文件后缀;
    $tmps教程tr = date('ymd').rand(0,time()) . "." .$this->fileextent;    # 创建新文件名;
    return $tmpstr;
 }

 # 检测文件类型是否正确
 function chk_fileextent(){
    $iwtrue = 0;
    $fle = explode("/",$this->file_type);
    for($i=0; $i < count($fle); $i++){
     if($this->fileextent == $fle[$i]){
     $iwtrue = (int) $iwtrue + 1;
     }
    }
    if( $iwtrue == 0 ){
  $this->msg("文件不符合 ".$this->file_type." 格式!");
    }
 }

 # 提示错误信息并终止操作
 function msg($error){
    echo "<script language="网页特效"> ";
    echo " alert('".$error."'); ";
    echo " window.history.back(); ";
    echo "</script> ";
    die();
 }

 # 保存文件
 function savefile(){
    $this->chk_fileextent();
    $this->chk_filesize();
    $this->createfolder( "../".$this->f1 );
    $this->createfolder( "../".$this->f2 );
    $this->createfolder( "../".$this->f3 );
    return $this->chk_savefile();
 }

 # 检测上传结果是否成功
 function chk_savefile(){
    $copymsg = copy($this->upfile,"../".$this->filename);
    if( $copymsg ){
   return $this->filename;
    }
    else{
   $this->msg("文件上传失败! 请重新上传! ");
    }
 }

 # 创建文件夹
 function createfolder($foldername){
    if( !is_dir($foldername) ){
   mkdir($foldername,0777);
    }
 }

 # 检测文件大小
 function chk_filesize(){
    if( $this->upfile_size > $this->maxsize ){
  $this->msg("目标文件不能大于". $this->maxsize/1024 ." kb");
    }
 }

 # 删除文件($filepath 文件相对路径)
 function deletefile($filepath){
    if( !is_file($filepath) ){
   return false;
    }
    else{
   $ending = @unlink($filepath);
   return $ending;
    }
 }

 /*
    函数:生成缩略图
  makebuild("/www.111cn.net/a.jpg","news/b.jpg","100");
    参数:
    echo $buildfile;   原图 带路径
    echo $newfile;    生成的缩略图 带路径
    echo $file_width;   缩略图宽度值
    echo $file_height;   缩略图高度值 (默认为宽度的比例值)
    echo $rate;     缩略图象品质;
 */
 function makebuild($buildfile,$newfile,$file_width,$file_height=0,$rate=100) {
    if(!is_file($buildfile)){
   $this->msg("文件 ".$buildfile." 不是一个有效的图形文件! 系统无法生成该文件的缩略图!");
   return false;
    }
    $data = getimagesize($buildfile);
    switch($data[2]){
  case 1:
   $im = @imagecreatefromgif($buildfile);
   break;
  case 2:
   $im = @imagecreatefromjpeg($buildfile);
   break;
  case 3:
   $im = @imagecreatefrompng($buildfile);
   break;
    }
    if(!$im){
   return false;
    }
    else{
   $srcw = imagesx($im);  # 取得原图宽度;
   $srch = imagesy($im); # 取得原图高度;
   $dstx = 0;
   $dsty = 0;
   
  if($file_height==0){
   $file_height = $file_width/$srcw*$srch;
  }
   
  if ($srcw*$file_height>$srch*$file_width){
   $ffile_height = round($srch*$file_width/$srcw);
   $dsty = floor(($file_height-$ffile_height)/2);
   $ffile_width = $file_width;
  }
  else {
   $ffile_width = round($srcw*$file_height/$srch);
   $dstx = floor(($file_width-$ffile_width)/2);
   $ffile_height = $file_height;
  }
  $ni = imagecreatetruecolor($file_width,$file_height);
  $dstx = ($dstx<0)?0:$dstx;
  $dsty = ($dstx<0)?0:$dsty;
  $dstx = ($dstx>($file_width/2))?floor($file_width/2):$dstx;
  $dsty = ($dsty>($file_height/2))?floor($file_height/s):$dsty;
  imagecopyresized($ni,$im,$dstx,$dsty,0,0,$ffile_width,$ffile_height,$srcw,$srch);
   
  imagejpeg($ni,$newfile,$rate); # 生成缩略图;
  imagedestroy($im);     # imagedestroy(resource) 释放image关联的内存
    }
 }

}
?>

</body>
</html>

本款程序可以获取图片大小,格式等信息,同时还可以对图片进行缩略图处理与给图片加水印功能哦。
 代码如下 复制代码

class image{
        public $filename;
        private $info;
        private $im;
  

//构造
        public function __construct($filename){
                $this->filename = $filename;
                $this->info    = @getimagesize($filename);
    if($this->info[2]>3){echo "只支持gif、jpeg、png 格式。";exit;}
  
        }
       
// 载入
        public function imgload(){
   switch($this->info[2]){
    case 1:
    $this->im=@imagecreatefromgif($this->filename);
    break; 
    case 2:
    $this->im=@imagecreatefromjpeg($this->filename);
    break; 
    case 3:
    $this->im=@imagecreatefrompng($this->filename);
    break; 
   }
        }

// 保存
        public function imagesave($img,$savename,$inf){
   switch($inf){
    case 1:
    imagegif($img,$savename);;
    break; 
    case 2:
    imagejpeg($img,$savename);;
    break; 
    case 3:
    imagepng($img,$savename);;
    break; 
   }
        }  

  
//滤镜
 public function filter($arg=1,$savename=''){
  $this->imgload();
  
  if($savename=='')$savename='f_'.$this->filename;
     $ok=false;
     switch($arg){
   case 1:
   imagefilter($this->im,img_filter_negate);//反色
   $ok=true;
   break;
   case 2:
   imagefilter($this->im,img_filter_grayscale); //黑白
   $ok=true;
   break;
   case 3:
   imagefilter($this->im,img_filter_emboss);//浮雕
   $ok=true;
   break;
   case 4:
   imagefilter($this->im,img_filter_gaussian_blur); //高斯模糊
   $ok=true;
   break;
   case 5:
   imagefilter($this->im,img_filter_brightness,50); //亮度50
   $ok=true;
   break;
   case 6:
   imagefilter($this->im,img_filter_contrast,-50); //对比度-50
   $ok=true;
   break;  
  }
  if($ok){  
   $this->imagesave($this->im,$savename,$this->info[2]);  //写文件
   imagedestroy($this->im);
   return 1;
  }else{
   imagedestroy($this->im);
   return 0;}
 }
 

 

成条形码就是必须生成图片了,在php生成图片我们就必须用到gd库来实现了,所以你得找到你的将php.ini文件找到extension=php_gd2.dll 去掉前面的;。你就可能使用些实例了。

*/

 代码如下 复制代码

class cd_barra
{
    var $file;
    var $into;
   
    var $cd_barras = array(0=>"00110",1=>"10001",2=>"01001",3=>"11000",4=>"00101",
                           5=>"10100",6=>"01100",7=>"00011",8=>"10010",9=>"01010"
                           );
    function cd_barra($value,$files,$into=1) {
      $lower = 1 ; $hight = 55;         
      $this->into = $into;
      for($count1=9;$count1>=0;$count1--){
        for($count2=9;$count2>=0;$count2--){  
          $count = ($count1 * 10) + $count2 ;
          $text = "" ;
          for($i=1;$i<6;$i++){
            $text .=  substr($this->cd_barras[$count1],($i-1),1) . substr($this->cd_barras[$count2],($i-1),1);
          }
          $this->cd_barras[$count] = $text;
       }
      }
   
          //$img         = imagecreate($lower*95+300,$hight+30);
          $img         = imagecreate(145,55);
   
    //$img         = imagecreate(395,73);  
          $cl_black = imagecolorallocate($img, 0, 0, 0);
          $cl_white = imagecolorallocate($img, 255, 255, 255);
   
              
          
          imagefilledrectangle($img, 0, 0, $lower*95+1000, $hight+30, $cl_white);
          
   
          imagefilledrectangle($img, 1,1,1,53,$cl_black);
          imagefilledrectangle($img, 2,1,2,53,$cl_white);
          imagefilledrectangle($img, 3,1,3,53,$cl_black);
          imagefilledrectangle($img, 4,1,4,53,$cl_white);
   
   
   
    $thin = 1 ;
    if(substr_count(strtoupper($_server['server_software']),"win32")){
        //o tamanho para windows tem que ser 3
        // for windows, the wide bar has = 3
         $wide = 3;
    } else {
            $wide = 2.72;
       }
    $pos   = 5 ;
    $text = $value ;
    if((strlen($text) % 2) <> 0){
        $text = "0" . $text;
    }
   
   
    while (strlen($text) > 0) {
      $i = round($this->barra_left($text,2));
      $text = $this->barra_right($text,strlen($text)-2);
      
      $f = $this->cd_barras[$i];
      
      for($i=1;$i<11;$i+=2){
        if (substr($f,($i-1),1) == "0") {
          $f1 = $thin ;
        }else{
          $f1 = $wide ;
        }
   
      
      imagefilledrectangle($img, $pos,1,$pos-1+$f1,53,$cl_black)  ;
      $pos = $pos + $f1 ;  
      
      if (substr($f,$i,1) == "0") {
          $f2 = $thin ;
        }else{
          $f2 = $wide ;
        }
   
      imagefilledrectangle($img, $pos,1,$pos-1+$f2,53,$cl_white)  ;
      $pos = $pos + $f2 ;  
      }
    }
   
       
    imagefilledrectangle($img, $pos,1,$pos-1+$wide,53,$cl_black);
    $pos=$pos+$wide;
   
    imagefilledrectangle($img, $pos,1,$pos-1+$thin,53,$cl_white);
    $pos=$pos+$thin;
   
   
    imagefilledrectangle($img, $pos,1,$pos-1+$thin,53,$cl_black);
    $pos=$pos+$thin;
   
    $this->put_img($img,$files);
    }
   
    function barra_left($input,$comp){
        return substr($input,0,$comp);
    }
   
    function barra_right($input,$comp){
        return substr($input,strlen($input)-$comp,$comp);
    }
   
    function put_img($image,$file){
        if($this->into){           
   imagegif($image,$file);
        }
  else {
                    header("content-type: image/gif");
                    imagegif($image);
             }
        imagedestroy($image);
    }
}

?>

//调用 方法

 代码如下 复制代码

<?php
  include("codes.php");
 $new_code = new cd_barra("1234567890","a.gif",1);
 
 ?>
   <img src="a.gif"   />

[!--infotagslink--]

相关文章

  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • JS实现随机生成验证码

    这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • PS怎么排除重叠图形

    PS排除重叠形状是什么意思?很多朋友都不是很清楚,其实方法很简单的,下面小编就为大家介绍介绍一下,不会的朋友可以参考本文,来看看吧。 步骤:1、在PS中,选择“矩形工具...2016-12-31
  • jQuery Real Person验证码插件防止表单自动提交

    本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证码显示的CSS样式 使用实例...2015-11-08
  • Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
  • php实现点击可刷新验证码

    验证码类文件 CreateImg.class.php <&#63;php class ValidationCode { private $width,$height,$codenum; public $checkcode; //产生的验证码 private $checkimage; //验证码图片 private $disturbColor = ''; /...2015-11-08
  • 基于JavaScript实现验证码功能

    这篇文章主要介绍了基于JavaScript实现验证码功能的相关资料...2017-04-03
  • 单击按钮发送验证码,出现倒计时的简单实例

    下面小编就为大家带来一篇单击按钮发送验证码,出现倒计时的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 代码...2017-07-06
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • 基于Pytorch版yolov5的滑块验证码破解思路详解

    这篇文章主要介绍了基于Pytorch版yolov5的滑块验证码破解思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
  • Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法

    这篇文章主要介绍了Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-06-24
  • 工信部的ICP备案网站登录时验证码一直输入不正确怎么回事

    工信部的ICP备案网站登录时验证码一直输入不正确怎么回事,为了防止一些机器采集人工信部对于查询验证做得识别度极低,所以许多的朋友都会发现输入验证码一直有问题了,那...2016-10-10
  • jQuery实现发送验证码控制按钮禁用功能

    最近接到新需求,需要实现一个点击发送验证码之后,按钮禁用,在5秒之后取消禁用,看似需求很简单,实现起来还真的好好动动脑筋,下面小编把jquery控制按钮禁用核心代码分享给大家,需要的朋友参考下吧...2021-07-24
  • R语言学习ggplot2绘制统计图形包全面详解

    这篇文章主要为大家详细介绍了R语言学习ggplot2绘制统计图形包的全面知识讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-11-06
  • vivo x9怎么设置图形解锁?vivo x9设置图形解锁教程

    本篇文章介绍了vivo x9如何设置图形解锁的教程,手机小白们快来看一看吧。 问:vivo x9怎么设置图形解锁? 答:图形解锁在某种程度上会保护我们的隐私,那么怎么设置图形...2017-01-22
  • Web制作验证码功能实例代码

    web开发中,经常会使用验证码功能,例如登录、注册,或其他关键功能之前经常会使用。下面通过实例代码给大家介绍Web制作验证码功能实例代码,感兴趣的朋友一起看看吧...2017-06-24
  • GoDaddy怎么开启手机验证码登录?

    GoDaddy怎么开启手机验证码登录?最近老听朋友说gd用户盗了,然后域名丢失了,今天 我们一起来看看关于GoDaddy开启手机验证码登录的教程. 给账户添加多重验证是为了账...2016-10-10
  • python网络爬虫实现发送短信验证码的方法

    这篇文章主要介绍了python网络爬虫实现发送短信验证码的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
  • C#验证码识别基础方法实例分析

    这篇文章主要介绍了C#验证码识别基础方法实例分析,较为详细的总结了C#验证码的实现思路及具体步骤,并对实现思路进行了总结归纳,具有很好的实用价值,需要的朋友可以参考下...2020-06-25
  • vue实现登录验证码

    这篇文章主要为大家详细介绍了vue实现登录验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-13