検索
ホームページphp教程php手册php验证码生成程序代码

php验证码生成程序代码

Jun 13, 2016 am 10:12 AM
phpsessionそして導入コード利用ストレージ図書館記事生成するコードプログラム確認する

本文章给大家介绍利用session存储与gd库一并生成验证码程序,同时会加入一些干扰元素,这样就可以简单的防机器注册了,下面我来给各位同学介绍介绍。

PHP验证码并生成图片程序,采用了session识别,稍微改进了一下目前网络上流传的PHP验证码,加入杂点,数字颜色随机显示,控制4位数字显示;话不多说了,程序如下,分享出来。

新建yz.php验证码生成文件:

注意:以下代码需要打开php的GD库,修改php.in文件的配置,把已经注释掉的行之前的分号取消即可:extension=php_gd2.dll。

 代码如下 复制代码

   class ValidationCode
   {
    //属性
    private $width;
    private $height;
    private $codeNum;
       private  $image;
    private $disturbColorNum;  //干扰元素数目
    private  $checkCode;
    function __construct($width=80,$height=20,$codeNum=4)
     {
     $this->width=$width;
     $this->height=$height;
     $this->codeNum=$codeNum;
     $number=floor($width*$height/15);
     if($number>240-$codeNum)
    {
      $this->disturbColorNum=240-$codeNum;
     }else
      {
      $this->disturbColorNum=$number;
      }
      $this->checkCode=$this->createCheckcode();
    }
    function getCheckCode()
    {
           return $this->checkCode;
    }
    private function createImage(){
          $this->image=imagecreatetruecolor($this->width,$this->height);
    $backcolor=imagecolorallocate($this->image,rand(225,255),rand(225,255),rand(255,255));
    imagefill($this->image,0,0,$backcolor);
    $border=imagecolorallocate($this->image,0,0,0);
    imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
    }
    private function setDisturbColor(){
     for($i=0;$idisturbColorNum;$i++){
      $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
     imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
     }
     for($i=0;$i      {
                  $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
      imagearc($this->image,rand(-10,$this->width),rand(-10,$this->height),rand(30,300),rand(20,300),55,44,$color);
     }
    }
      private function outputText($fontFace=""){
    for($i=0;$icodeNum;$i++)
    {
     $fontcolor=imagecolorallocate($this->image,rand(0,128),rand(0,128),rand(0,128));
    if($fontFace=="")
   {
     $fontsize=rand(3,5);
     $x=floor($this->width/$this->codeNum)*$i+5;
     $y=rand(0,$this->height-15);
     imagechar($this->image,$fontsize,$x,$y,$this->checkCode{$i},$fontcolor);
    }
    else
   {
     $fontsize=rand(12,16);
     $x=floor(($this->width-8)/$this->codeNum)*$i+8;
     $y=rand($fontsize,$this->height-8);
     imagettftext($this->image,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontFace,$this->checkCode{$i});
    }
    }
   }

   private function createCheckCode(){
    $code="23456789abcdefghijkmnpqrstuvwrst";
    $str="";
    for($i=0;$icodeNum;$i++)
    {
     $char=$code{rand(0,strlen($code)-1)};
     $str.=$char;
    }
    return $str;
   }
   private function outputImage()
    {
    if(imagetypes()&IMG_GIF)
     {
       header("Content-Type:image/gif");
        imagepng($this->image);
     }else if(imagetypes()&IMG_JPG)
     {
        header("Content-Type:image/jpeg");
        imagepng($this->image);
     }else if(imagetypes()&IMG_PNG)
     {
        header("Content-Type:image/png");
      imagepng($this->image);
     }else if(imagetypes()&IMG_WBMP){
                 header("Content-Type:image/vnd.wap.wbmp");
     imagepng($this->image);
     }else
     {
      die("PHP不支持图片验证码");
     }
    }
        //通过该方法向浏览器输出图像
    function  showImage($fontFace="")
    {
     //创建图像背景
            $this->createImage();
     //设置干扰元素
           $this->setDisturbColor();
     //向图像中随机画出文本
     $this->outputText($fontFace);
     //输出图像
     $this->outputImage();
    }

    function __destruct()
    {
     imagedestroy($this->image);
    }
   }
   function checklogin(){
        if(empty($_POST['name']))
                die( '用户名不能为空');
    if(empty($_POST['password']))
     die("密码不能为空");
    if($_SESSION['code']!=$_POST['vertify'])
     die("验证码输入不正确".$_SESSION['code']);
  
    $username=$_POST['name'];
    $password=md5($_POST['password']);
    //检查是否存在
         conndb($username,$password);
   }
   function conndb($name="",$ps=""){
        $conn=mysql_connect('localhost','root','123456');
       if(!$conn) die("数据库连接失败".mysql_error());
     mysql_select_db('5kan',$conn) or die('选择数据库失败'.mysql_error());
  mysql_set_charset('utf8',$conn);
  $sql="select id from k_user where  username='{$name}' and password='{$ps}'";
  $result=mysql_query($sql) or die("SQL语句错误".mysql_error());
  if(mysql_num_rows($result)>0)  die("登录成功");
  else  die("用户名或者密码错误");
  mysql_close($conn);
   }
    session_start();
   if(!isset($_POST['randnum']))
   {
     $code=new ValidationCode(120,20,4);
     $code->showImage("comicbd.ttf");  //显示在页面
  $_SESSION['code']=$code->getCheckCode();//保存在服务器中
   }
   else
   {
    checklogin();
   }

?>


到具体调用的地方,用这样的形式:php验证码生成程序代码就可以了;验证的时候验证session:$_SESSION['VCODE']的值就可以了。还可以对以上代码稍微改进,改成两个数字相加求和的形式

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境