当前位置:首页 > PHP教程 > php图像处理 > 列表

php生成验证码图片从入门和精通教程

发布:smiling 来源: PHP粉丝网  添加日期:2013-12-31 16:51:47 浏览: 评论:0 

在php中要生成验证码图片是相当的简单的,因为在php中为我们提供了图形gd.dll库,要启用gd图形库我们只要在在php.ini中把php-gd前面的;去就可以了。

方法一,代码如下:

  1. $authnum='';  
  2. $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";  
  3. $list=explode(",",$ychar);//分割函数  
  4. for($i=0;$i<4;$i++){  
  5. $randnum=rand(0,35);  
  6. $authnum.=$list[$randnum];//以数组的形式输出 

方法二,代码如下:

  1. private function createCheckCode()  
  2. {  
  3. for(i=0;i<this->codeNum;i++)  
  4. {  
  5. number = rand(0,2);  
  6. switch(number)  
  7. {  
  8. case 0: rand_number = rand(48,57); break;//数字  
  9. case 1: rand_number = rand(65,90);break;//大写字母  
  10. case 2: rand_number = rand(97,122);break;//小写字母  
  11. }  
  12. $asc = sprintf("%c",rand_number);  
  13. $asc_number = asc_number.asc;  
  14. }  
  15. return asc_number;  

方法三,代码如下:

  1. srand(microtime()*100000);//相当于计时器  
  2. $string="abcdefghigklmnopqrstuvwxyz123456789";  
  3. for($i=0;$i<4;$i++)  
  4. {  
  5. $new_number.=$string[rand(0,strlen($string)-1)];//随即的产生一个数组  

方法四,代码如下:

  1. for($i=0;$i<4;$i++)  
  2. {  
  3. $rand.=dechex(rand(1,15));//将十进制转化为十六进制  

随机生成数字,字母的代码:

  1. <?php  
  2. //che.php  
  3. session_start();  
  4. for($i=0;$i<4;$i++)  
  5. {  
  6. $rand.=dechex(rand(1,15));  
  7. }  
  8. $_SESSION['check_num']=$rand;  
  9. $image=imagecreatetruecolor(50,30);  
  10. $bg=imagecolorallocate($im,0,0,0);//第一次用调色板的时候,背景颜色  
  11. $te=imagecolorallocate($im,255,255,255);  
  12. imagestring($image,6,rand(0,20),rand(0,2),$rand,$te);  
  13. ob_clean();//PHP网页中因为 要生成验证码而出现 图像"http://localhost/**.php"因其本身有错无法显示  
  14. header("Content-type:image/jpeg"); imagejpeg($image);  
  15. ?> 

给图片画出干扰线代码:

  1. for($i=0;$i<8;$i++)//画出多条线  
  2. {  
  3. $cg=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));//产生随机的颜色  
  4. imageline($im,rand(10,40),0,rand(10,40),20,$cg);  

给图片画出干扰点的代码:

  1. for($i=0;$i<80;$i++)//画出多个点  
  2. {  
  3. imagesetpixel($im,rand(0,40),rand(0,20),$cg);  

把文字写入图片代码:

  1. $str=array('我','我','亲','亲');//存储显示的汉字  
  2. for($i=0;$i<4;$i++)  
  3. {  
  4. $sss.=$str[rand(0,3)];//随机显示汉字  
  5. //$str=iconv("gb2312","utf-8",$str); //汉字编码转化,我的好像不需要  
  6. imagettftext($im,10,0,rand(5,60),rand(5,60),$te,"simhei.ttf",$sss); 

最后我们结合实际分享一个完整的实例,代码如下:

  1. /** 
  2.  * 生成验证码图片 
  3.  * 
  4.  * @param String $word 验证码在session中的变量名称 
  5.  */ 
  6. function valiCode($word='randcode'){ 
  7.  Header("Content-type: image/gif"); 
  8.  $border = 0; //是否要边框 1要:0不要 
  9.  $how = 4; //验证码位数 
  10.  $w = $how*15; //图片宽度 
  11.  $h = 18; //图片高度 
  12.  $fontsize = 10; //字体大小 
  13.  $alpha = "abcdefghijkmnpqrstuvwxyz"//验证码内容1:字母 
  14.  $number = "23456789"//验证码内容2:数字 
  15.  $randcode = ""//验证码字符串初始化 
  16.  srand((double)microtime()*1000000); //初始化随机数种子 
  17.  $im = ImageCreate($w$h); //创建验证图片 
  18.  /* 
  19.  * 绘制基本框架 
  20.  */ 
  21.  $bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色 
  22.  ImageFill($im, 0, 0, $bgcolor); //填充背景色 
  23.  if($border
  24.  { 
  25.   $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色 
  26.   ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//绘制边框 
  27.  } 
  28.  
  29.  /* 
  30.  * 逐位产生随机字符 
  31.  */ 
  32.  for($i=0; $i<$how$i++) 
  33.  { 
  34.   $alpha_or_number = mt_rand(0, 1); //字母还是数字 
  35.   $str = $alpha_or_number ? $alpha : $number
  36.   $which = mt_rand(0, strlen($str)-1); //取哪个字符 
  37.   $code = substr($str$which, 1); //取字符 
  38.   $j = !$i ? 4 : $j+15; //绘字符位置 
  39.   $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即颜色 
  40.   ImageChar($im$fontsize$j, 3, $code$color3); //绘字符 
  41.   $randcode .= $code//逐位加入验证码字符串 
  42.  } 
  43.  
  44.  /* 
  45.  * 如果需要添加干扰就将注释去掉 
  46.  * 
  47.  * 以下for()循环为绘背景干扰线代码 
  48.  */ 
  49.  /* + -------------------------------绘背景干扰线 开始-------------------------------------------- + */ 
  50.  for($i=0; $i<5; $i++)//绘背景干扰线 
  51.  { 
  52.   $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线颜色 
  53.   ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线 
  54.  } 
  55.  /* + -------------------------------绘背景干扰线 结束-------------------------------------- + */ 
  56.  
  57.  /* 
  58.  * 如果需要添加干扰就将注释去掉 
  59.  * 
  60.  * 以下for()循环为绘背景干扰点代码 
  61.  */ 
  62.  /* + --------------------------------绘背景干扰点 开始------------------------------------------ + */ 
  63.  
  64.  for($i=0; $i<$how*40; $i++)//绘背景干扰点 
  65.  { 
  66.   $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色 
  67.   ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干扰点 
  68.  } 
  69.  
  70.  /* + --------------------------------绘背景干扰点 结束------------------------------------------ + */ 
  71.  
  72.  //把验证码字符串写入session  方便提交登录信息时检验验证码是否正确  例如:$_POST['randcode'] = $_SESSION['randcode'] 
  73.  $_SESSION[$word] = $randcode
  74.  /*绘图结束*/ 
  75.  Imagegif($im); 
  76.  ImageDestroy($im); 
  77.  /*绘图结束*/ 
  78. 调用方法也很简单把上面实例保存img.php文件,然后在要调用的页面 
  79. html页面如下 
  80.  代码如下 复制代码 
  81. <script language="javascript">  
  82.  function refresh_code()  
  83.  {  
  84.   form1.imgcode.src="verifycode.php?a="+Math.random();  
  85.  }  
  86. </script> 
  87. <form id="form1" name="form1" method="post" action="checkcode.php">  
  88.   <label for="code">验证码:</label>  
  89.   <input type="text" name="code" id="textfield" />  
  90.   <img id="imgcode" src="VerifyCode.php" alt="验证码" />  
  91.   <a href="javascript:refresh_code()">看不清?换一个</a>  
  92.   <input type="submit" name="button" id="button" value="提交" />  
  93. </form> 

这要就可以实现验证码调用了,再加个提交验证验证码是否正确,代码如下:

  1. <?php  
  2. session_start();  
  3.   if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){  
  4.  print("验证码正确,");  
  5.   }else{  
  6.     print("验证码错误,");  
  7.   } 
  8. ?> 

这要就我们完成了从生成验证码图片和使用的整个过程了,也算是从php入门到精通验证码全部讲了。

Tags: php生成 验证码 图片

分享到: