php图片验证码代码

 更新时间:2016年11月25日 16:58  点击:1928
在用户验证页面,如注册,登录的时候,为了加强用户登录的安全性,添加验证码验证代码,下面我为各位朋友提供一四款不同同类型的php验证代码程序,最后一款是一款使用了验证代码的实例代码。
 代码如下 复制代码
date_default_timezone_set('asia/shanghai');
 function setcode($len)
 {
  $code = '';
  for ($i=0;$i<$len;$i++)//生成随机长度
  {
   $code .= chr(drand());
  }
  return $code;
 }
 //生成一个随机字符
 function drand()
 {
  $rand = mt_rand(0,2);
  $str = '';
  switch ($rand)
  {
   case 0: $str = mt_rand(48,57);break;//数字
   case 1: $str = mt_rand(65,90);break;//大写字母
   case 2: $str = mt_rand(97,122);break;//小写字母
  }
  return $str;
 }
 $_session['checkcode'] = $code = setcode(5);

//php图片验证码原代码,需支持gd2.dll扩展,需修改php.ini后重启iis or ap

 代码如下 复制代码

session_start();
session_register('safecode');
$type = 'gif';
$width= 40;
$height= 16;
header("content-type: image/".$type);
srand((double)microtime()*1000000);
$randval = randstr(4,"");
if($type!='gif' && function_exists('imagecreatetruecolor')){
     $im = @imagecreatetruecolor($width,$height);
}else{
     $im = @imagecreate($width,$height);
}
     $r = array(225,211,255,223);
     $g = array(225,236,237,215);
     $b = array(225,236,166,125);

     $key = rand(0,3);
 
     $backcolor = imagecolorallocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机)
     $bordercolor = imagecolorallocate($im, 0, 0, 0);//边框色
     $pointcolor = imagecolorallocate($im, 255, 170, 255);//点颜色

     @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backcolor);//背景位置
     @imagerectangle($im, 0, 0, $width-1, $height-1, $bordercolor); //边框位置
     $stringcolor = imagecolorallocate($im, 255,51,153);

     for($i=0;$i<=100;$i++){
           $pointx = rand(2,$width-2);
           $pointy = rand(2,$height-2);
           @imagesetpixel($im, $pointx, $pointy, $pointcolor);
     }

     @imagestring($im, 3, 5, 1, $randval, $stringcolor);
     $imagefun='image'.$type;
     $imagefun($im);
     @imagedestroy($im);
     $_session['safecode'] = $randval;
//产生随机字符串
function randstr($len=6,$format='all') {
           switch($format) {
                 case 'all':
                 $chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789www.111cn.net'; break;
                 case 'char':
                 $chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'; break;
                 case 'number':
                 $chars='0123456789'; break;
                 default :
                 $chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789';
                 break;
           }
     $string="";
     while(strlen($string)<$len)
     $string.=substr($chars,(mt_rand()%strlen($chars)),1);
     return $string;
}

 

//调用此页面,如果下面的式子成立,则生成验证码图片
if($_get["action"]=="verifycode")
{
    rand_create();
}
//验证码图片生成
function rand_create()
{
    //通知浏览器将要输出png图片
    header("content-type: image/png");
    //准备好随机数发生器种子 
    srand((double)microtime()*1000000);
    //准备图片的相关参数  
    $im = imagecreate(62,20);
    $black = imagecolorallocate($im, 0,0,0);  //rgb黑色标识符
    $white = imagecolorallocate($im, 255,255,255); //rgb白色标识符
    $gray = imagecolorallocate($im, 200,200,200); //rgb灰色标识符
    //开始作图    
    imagefill($im,0,0,$gray);
    while(($randval=rand()%100000)<10000);{
        $_session["login_check_num"] = $randval;
        //将四位整数验证码绘入图片 
        imagestring($im, 5, 10, 3, $randval, $black);
    }
    //加入干扰象素   
    for($i=0;$i<200;$i++){
        $randcolor = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
        imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
    }
    //输出验证图片
    imagepng($im);
    //销毁图像标识符
    imagedestroy($im);
}
//检验验证码
function rand_check()
{
    if($_post["reg_rand"] == $_session["login_check_num"]){
        return true;
    }
    else{
        exit("验证码输入错误");
    }
}

//验证码通过gd生成png图片,并把$randval随机数字赋给$_session['login_check_num'],在通过用户输入的$_post进行比较,来判断是否正确。达到需要实现的功能,需要修改php.ini文件,使php支持gd库

php 图片水印中文乱码解决方法是要转入一款中文字体摩洛哥 以了,如果你在生成水印有中文时,又没载入相关的字体的话,那中文肯定会是乱码的,如果是英语字母那载不载入都没关系哦。
 代码如下 复制代码
$name =  iconv("gb2312","utf-8",www.111cn.net 一聚教程网);
$font = 'simhei.ttf';//水印字体  
$im = imagecreatefromjpeg("test.jpg");//载入图片  
$black = imagecolorallocate($im, 0, 0, 0);//设置颜色  
imagettftext($im, 12, 0, 320, 84, $black, $font, $name);//打印水印  
imagepng($im);//输出图片,如果要保存加个保存路径和文件名,如imagepng($im,'test1.jpg');  
imagedestroy($im);//清空缓存 


下面来看一款生成水印文字函数

 代码如下 复制代码

function str2pic ($string,$source,$destination="",$f,$fontsize=10,$shadowcolor="#ffffff",$f,$x=10,$y=10) {  
 //header('content-type:image/png');
    $pi=pathinfo($source);
    $pie=$pi[extension];#获取扩展名
    if(eregi("jpg|jpeg",$pie))$im=@imagecreatefromjpeg($source);
    if(eregi("gif",$pie))$im=@imagecreatefromgif($source);
    if(eregi("png",$pie))$im=@imagecreatefrompng($source);
    $col1=hex2dec($shadowcolor);#阴影颜色
    $col2=hex2dec($fontcolor);#字体颜色
    $col1=imagecolorallocate($im,$col1[0],$col1[1],$col1[2]);
    $col2=imagecolorallocate($im,$col2[0],$col2[1],$col2[2]);
    imagettftext($im,$fontsize,0,$y+1,$x+1,$col1,$fonturl,$string);
    imagettftext($im,$fontsize,0,$y,$x,$col2,$fonturl,$string);
    imagejpeg($im);
    if($destination)imagejpeg($im,$destination);
    imagedestroy($im);
}

function hex2dec($hexcolror) {#十六进制颜色转换成10进制颜色
    preg_match_all("/([0-f]){2,2}/i",$hexcolror,$matches);
    if(count($matches[0])==3){
    $rr=hexdec($matches[0][0]);
    $gg=hexdec($matches[0][1]);
    $bb=hexdec($matches[0][2]);
    }
    return array($rr,$gg,$bb);
}
?>
<?php
str2pic("[url=http://www.111cn.net]www.111cn.net","winter.jpg","winter2.jpg","simhei.ttf",10,"ffffff","330099",10,10[/url]);
?>

 

本程序是根据用户提供的数据生成3D效果的百分比图片统计效果有一点像中国站长

$image = imagecreatetruecolor(200,200);  //创建一张200*200的画布;

 代码如下 复制代码

//创建多种又区分的颜色
$red = imagecolorallocate($image,255,0,0);
$blue  = imagecolorallocate($image,0,0,255);
$yellow = imagecolorallocate($image,255,255,0);
$violet = imagecolorallocate($image,255,0,255);
$white = imagecolorallocate($image,255,255,255);
$black = imagecolorallocate($image,0,0,0);


//使用for循环创建3d效果底层效果
for($i=120;$i>100;$i--){
    imagefilledarc($image,100,$i,200,120,0,30,$red,img_arc_pie);//img_arc_pie注释如下:

    imagefilledarc($image,100,$i,200,120,30,80,$blue,img_arc_pie);
    imagefilledarc($image,100,$i,200,120,80,360,$yellow,img_arc_pie);
}
//bool imagefilledarc ( resource image, int cx, int cy, int w, int h, int s, int e, int color, int style )
//
//imagefilledarc() 在 image 所代表的图像中以 cx,cy(图像左上角为 0, 0)画一椭圆弧。如果成功则返回 true,失败则返回 false。w 和 h 分别指定了椭圆的宽和高,s 和 e 参数以角度指定了起始和结束点。style 可以是下列值按位或(or)后的值:
//
//img_arc_pie
//
//img_arc_chord
//
//img_arc_nofill
//
//img_arc_edged


//这个层是最上面一层的效果,这样立体效果就出来了!
    imagearc($image,100,100,200,120,0,360,$black);//添加一个黑色的边圈,这样3d效果看起来更加明显点
    imagefilledarc($image,100,100,200,120,0,30,$red,img_arc_pie);
    imagefilledarc($image,100,100,200,120,30,80,$blue,img_arc_pie);
    imagefilledarc($image,100,100,200,120,80,360,$yellow,img_arc_pie);

//添加百分比数据,当然此处必要的时候可以批量的进行一定的运算将输入输入到图片上
    $str = iconv ("gbk","utf-8","36%");//如果要输入中文需要此转换。example:占用:30%;
    imagettftext($image,10,360-15,100+70,115,$white,"simhei.ttf",$str);

 

imagejpeg($image);
imagedestroy($image);

 

这是一款经典实用的生成小图的php代码,有专业素语来讲就是php 生成缩略图代码哦。

# 显示图形及连接

 function showdir ($adirectory, $i)

{
  global $browsedir;

  $start = $i;

# 更改 $maxcols 及 $maximages 可改变每一页显示的小图的行数与列数。

  $maxcols = 2;
  $maximages = 6;
  $maximages = $i + ($maximages - 3);

# 更改 $imagemaxwidth 及 $imagemaxheight 可改变显示小图的宽度与高度。

  $imagemaxwidth = 100;
  $imagemaxheight = 100;
   
# 计算高度与宽度的比例。

  $imagemaxratio =  $imagemaxwidth / $imagemaxheight;
   
  $ndirectory = sizeof ($adirectory);
  echo (table_start);
  for ($i; $i<=$maximages;)
  {
     echo (row_start);
     for ($icols=1; $icols<=$maxcols; $icols++)
     {
       echo (col_start);
       $imagefilename = $adirectory[++$i];
       if (strlen($imagefilename)>0)
       {
         $imagepath = $browsedir."/".$imagefilename;
         $imagesize = getimagesize ($imagepath);
         if ($imagesize)
         {
           $imagewidth = $imagesize[0];
           $imageheight = $imagesize[1];
           $imageratio = $imagewidth / $imageheight;
           if ($imageratio > $imagemaxratio)
           {
              $imageoutputwidth = $imagemaxwidth;
              $imageoutputheight = ceil ($imagemaxwidth/$imagewidth*$imageheight);
           }
           else if ($imageratio < $imagemaxratio)
           {
              $imageoutputheight = $imagemaxheight;
              $imageoutputwidth = ceil ($imagemaxheight/$imageheight*$imagewidth);
           } else
           {
              $imageoutputwidth = $imagemaxwidth;
              $imageoutputheight = $imagemaxheight;
           }

# 显示图形

           echo (a_start.$imagepath.a_close);
           echo (img_start.$imagepath.img_width.$imageoutputwidth.img_height.$imageoutputheight.img_end);
           echo (line_break.$adirectory[$i]);
           echo (a_end);
         }
         echo (col_end);
       }
     }
     echo (row_end);
  }
  echo (table_end);
pagemenu ($browsedir, $ndirectory, $start);

}

function pagemenu ($browsedir, $ndirectory, $pg) {

echo "<br><center><font face="verdana, arial, helvetica, sans-serif" size="1" color="#000033">page:";

$pg_num = 1;

for ($img_num = 0; $img_num <= $ndirectory;) {

    if ($pg == $img_num) {
    echo "<span class="menulink_1"><a href="thumb.php?browsedir=$browsedir&start=$img_num"> *$pg_num</a> <span>";
    } else {
    echo "<span class="menulink_2"><a href="thumb.php?browsedir=$browsedir&start=$img_num"> $pg_num</a> <span>";
    }

# 建立其他页次的连接, 每页显示四张图, 故页数 $pg_num 每加 1 , $img_num 就加 4 。

    $pg_num = $pg_num + 1;
    $img_num = $img_num + 4;

}

echo "</font> ";

}

function dirtoarray ($browsedir, $extensions)
{

  $nextensions = sizeof ($extensions);
  $idirectory = 0;
  $directory = dir($browsedir);
   
  while ($entry = $directory->read())
  {
      for ($i=1; $i<=$nextensions; $i++)
      {
         $compare = stristr ($entry, $extensions[$i]);
         if (strlen($compare) == strlen($extensions[$i]))
         {
            $adirectory[++$idirectory] = $entry;
            break;
         }
      }
  }
  $directory->close();
  return $adirectory;
}

#主程序

#变量 $browsedir 为图形文件放置的位置。

$browsedir="./images";

# 允许浏览的图形文件扩展名, 放置於数组中, 可自行增加。

$extensions[1] = "jpeg";
$extensions[2] = "jpg";
$extensions[3] = "gif";
$extensions[4] = "png"; 
showdir (dirtoarray ($browsedir, $extensions), $start);

define ("line_break", "<br>");
define ("table_start", "<table width=600> ");
define ("table_end", "</table> ");
define ("row_start", "  <tr> ");
define ("row_end", "  </tr> ");
define ("col_start", "   <td align=center>       ");
define ("col_end", "    </td> ");
define ("img_start", "<img src=");
define ("img_end", ">");
define ("img_width", " width=");
define ("img_height", " height=");
define ("a_start", '<a href="');
define ("a_close", '">');
define ("a_end", "</a>");
?>

这是一款简单实用的php验证码生成程序了,主要是利用了php gd库来生成图形验证码,并且保存到session中,生成的代码是利用rand随机生成的。
 代码如下 复制代码

session_start();
$im=imagecreatetruecolor(100,30);
//分配颜色
$bg=imagecolorallocate($im,0,0,0);
$textcolor=imagecolorallocate($im,255,255,255);
//在图片上划线
for($i=0;$i<3;$i++){

$te1 = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imageline($im,0,rand(0,15),100,rand(0,15),$te1);
}
//在图片上打印200个点
for($i=0;$i<200;$i++){

 imagesetpixel($im,rand()%100,rand()%30,$te1);
}
for($i=0;$i<4;$i++){
 //dechex()把十进制转换成十六进制
 $rand.= dechex(rand(1,15));
}
$_session[check_pic]=$rand;
imagestring($im,5,rand(3,70),rand(3,15),$rand,$textcolor);
header("content-type:image/jpeg");
imagejpeg($im);

/*
生成验证的作用是防止用户乱注册了,这是一等的验证程序
*/

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • PHP 验证码不显示只有一个小红叉的解决方法

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

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08