PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > PHP教程 > 正文

    B5教程网一步一步教你php生成验证码图片

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:在php中要生成验证码图片是相当的简单的,因为在php中为我们提供了图形gd.dll库,要启用gd图形库我们只要在在php.ini中把php-gd前面的;去就...
    在php中要生成验证码图片是相当的简单的,因为在php中为我们提供了图形gd.dll库,要启用gd图形库我们只要在在php.ini中把php-gd前面的;去就可以了。
      方法一,代码如下:
    复制代码 代码如下:
    $authnum=''; 
    $ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; 
    $list=explode(",",$ychar);//分割函数 
    for($i=0;$i<4;$i++){ 
    $randnum=rand(0,35); 
    $authnum.=$list[$randnum];//以数组的形式输出 
    方法二,代码如下:
     
    复制代码 代码如下:
    private function createCheckCode() 

    for(i=0;i<this->codeNum;i++) 

    number = rand(0,2); 
    switch(number) 

    case 0: rand_number = rand(48,57); break;//数字 
    case 1: rand_number = rand(65,90);break;//大写字母 
    case 2: rand_number = rand(97,122);break;//小写字母 

    $asc = sprintf("%c",rand_number); 
    $asc_number = asc_number.asc; 

    return asc_number; 
    方法三,代码如下:
     
    复制代码 代码如下:
    srand(microtime()*100000);//相当于计时器 
    $string="abcdefghigklmnopqrstuvwxyz123456789"; 
    for($i=0;$i<4;$i++) 

    $new_number.=$string[rand(0,strlen($string)-1)];//随即的产生一个数组 
    方法四,代码如下:
     
    复制代码 代码如下:
    for($i=0;$i<4;$i++) 

    $rand.=dechex(rand(1,15));//将十进制转化为十六进制 
    随机生成数字,字母的代码:
     
    复制代码 代码如下:
    <?php 
    //che.php 
    session_start(); 
    for($i=0;$i<4;$i++) 

    $rand.=dechex(rand(1,15)); 

    $_SESSION['check_num']=$rand; 
    $image=imagecreatetruecolor(50,30); 
    $bg=imagecolorallocate($im,0,0,0);//第一次用调色板的时候,背景颜色 
    $te=imagecolorallocate($im,255,255,255); 
    imagestring($image,6,rand(0,20),rand(0,2),$rand,$te); 
    ob_clean();//PHP网页中因为 要生成验证码而出现 图像"http://localhost/**.php"因其本身有错无法显示 
    header("Content-type:image/jpeg"); imagejpeg($image); 
    ?> 
    给图片画出干扰线代码:
     
    复制代码 代码如下:
    for($i=0;$i<8;$i++)//画出多条线 

    $cg=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));//产生随机的颜色 
    imageline($im,rand(10,40),0,rand(10,40),20,$cg); 
    给图片画出干扰点的代码:
     
    复制代码 代码如下:
    for($i=0;$i<80;$i++)//画出多个点 

    imagesetpixel($im,rand(0,40),rand(0,20),$cg); 
    把文字写入图片代码:
     
    复制代码 代码如下:
    $str=array('我','我','亲','亲');//存储显示的汉字 
    for($i=0;$i<4;$i++) 

    $sss.=$str[rand(0,3)];//随机显示汉字 
    }
    //$str=iconv("gb2312","utf-8",$str); //汉字编码转化,我的好像不需要 
    imagettftext($im,10,0,rand(5,60),rand(5,60),$te,"simhei.ttf",$sss); 
    后我们结合实际分享一个完整的实例,代码如下:
     
    复制代码 代码如下:
    /**
    * 生成验证码图片
    *
    * @param String $word 验证码在session中的变量名称
    */
    function valiCode($word='randcode'){
    Header("Content-type: image/gif");
    $border = 0; //是否要边框 1要:0不要
    $how = 4; //验证码位数
    $w = $how*15; //图片宽度
    $h = 18; //图片高度
    $fontsize = 10; //字体大小
    $alpha = "abcdefghijkmnpqrstuvwxyz"; //验证码内容1:字母
    $number = "23456789"; //验证码内容2:数字
    $randcode = ""; //验证码字符串初始化
    srand((double)microtime()*1000000); //初始化随机数种子
    $im = ImageCreate($w, $h); //创建验证图片
    /*
    * 绘制基本框架
    */
    $bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色
    ImageFill($im, 0, 0, $bgcolor); //填充背景色
    if($border)
    {
      $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色
      ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//绘制边框
    }

    /*
    * 逐位产生随机字符
    */
    for($i=0; $i<$how; $i++)
    {
      $alpha_or_number = mt_rand(0, 1); //字母还是数字
      $str = $alpha_or_number ? $alpha : $number;
      $which = mt_rand(0, strlen($str)-1); //取哪个字符
      $code = substr($str, $which, 1); //取字符
      $j = !$i ? 4 : $j+15; //绘字符位置
      $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即颜色
      ImageChar($im, $fontsize, $j, 3, $code, $color3); //绘字符
      $randcode .= $code; //逐位加入验证码字符串
    }

    /*
    * 如果需要添加干扰就将注释去掉
    *
    * 以下for()循环为绘背景干扰线代码
    */
    /* + -------------------------------绘背景干扰线 开始-------------------------------------------- + */
    for($i=0; $i<5; $i++)//绘背景干扰线
    {
      $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线颜色
      ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线
    }
    /* + -------------------------------绘背景干扰线 结束-------------------------------------- + */

    /*
    * 如果需要添加干扰就将注释去掉
    *
    * 以下for()循环为绘背景干扰点代码
    */
    /* + --------------------------------绘背景干扰点 开始------------------------------------------ + */

    for($i=0; $i<$how*40; $i++)//绘背景干扰点
    {
      $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色
      ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干扰点
    }

    /* + --------------------------------绘背景干扰点 结束------------------------------------------ + */

    //把验证码字符串写入session  方便提交登录信息时检验验证码是否正确  例如:$_POST['randcode'] = $_SESSION['randcode']
    $_SESSION[$word] = $randcode;
    /*绘图结束*/
    Imagegif($im);
    ImageDestroy($im);
    /*绘图结束*/
    }
    调用方法也很简单把上面实例保存img.php文件,然后在要调用的页面
    html页面如下
    代码如下 复制代码
    <script language="javascript"> 
    function refresh_code() 

      form1.imgcode.src="verifycode.php?a="+Math.random(); 

    </script>
    <form id="form1" name="form1" method="post" action="checkcode.php"> 
      <label for="code">验证码:</label> 
      <input type="text" name="code" id="textfield" /> 
      <img id="imgcode" src="VerifyCode.php" alt="验证码" /> 
      <a href="javascript:refresh_code()">看不清?换一个</a> 
      <input type="submit" name="button" id="button" value="提交" /> 
    </form> 
    这要就可以实现验证码调用了,再加个提交验证验证码是否正确,代码如下:
     
    复制代码 代码如下:
    <?php 
    session_start(); 
      if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){ 
    print("验证码正确,"); 
      }else{ 
        print("验证码错误,"); 
      }
    ?> 
    这要就我们完成了从生成验证码图片和使用的整个过程了,也算是从php入门到精通验证码全部讲了。
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-10-701-1.html
    相关热词搜索: 验证码