首页 > 语言 > PHP > 正文

php图片验证码代码

2024-09-04 11:44:21
字体:大 中 小
来源:转载
供稿:网友

在用户验证页面,如注册,登录的时候,为了加强用户登录的安全性,添加验证码验证代码,下面我为各位朋友提供几种不同同类型的php验证代码程序,最后一款是一款使用了验证代码的实例代码,实例代码如下:

  1. date_default_timezone_set('asia/shanghai'); 
  2.  function setcode($len) 
  3.  { 
  4.   $code = ''; 
  5.   for ($i=0;$i<$len;$i++)//生成随机长度 
  6.   { 
  7.    $code .= chr(drand()); 
  8.   } 
  9.   return $code; 
  10.  } 
  11.  //生成一个随机字符 
  12.  function drand() 
  13.  { 
  14.   $rand = mt_rand(0,2); 
  15.   $str = ''; 
  16.   switch ($rand) 
  17.   { 
  18.    case 0: $str = mt_rand(48,57);break;//数字 
  19.    case 1: $str = mt_rand(65,90);break;//大写字母 
  20.    case 2: $str = mt_rand(97,122);break;//小写字母 
  21.   } 
  22.   return $str; 
  23.  } 
  24.  $_session['checkcode'] = $code = setcode(5);  
  25.  
  26. //php图片验证码原代码,需支持gd2.dll扩展,需修改php.ini后重启iis or ap 
  27.  
  28. session_start();  
  29. session_register('safecode'); 
  30. $type = 'gif'; 
  31. $width= 40; 
  32. $height= 16; 
  33. header("content-type: image/".$type); 
  34. srand((double)microtime()*1000000); 
  35. $randval = randstr(4,""); 
  36. if($type!='gif' && function_exists('imagecreatetruecolor')){  
  37.      $im = @imagecreatetruecolor($width,$height); 
  38. }else{  
  39.      $im = @imagecreate($width,$height); 
  40. } 
  41.      $r = array(225,211,255,223); 
  42.      $g = array(225,236,237,215); 
  43.      $b = array(225,236,166,125); 
  44.  
  45.      $key = rand(0,3); 
  46.    
  47.      $backcolor = imagecolorallocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机) 
  48.      $bordercolor = imagecolorallocate($im, 0, 0, 0);//边框色 
  49.      $pointcolor = imagecolorallocate($im, 255, 170, 255);//点颜色 
  50.  
  51.      @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backcolor);//背景位置 
  52.      @imagerectangle($im, 0, 0, $width-1, $height-1, $bordercolor); //边框位置 
  53.      $stringcolor = imagecolorallocate($im, 255,51,153); 
  54.  
  55.      for($i=0;$i<=100;$i++){  
  56.            $pointx = rand(2,$width-2); 
  57.            $pointy = rand(2,$height-2); 
  58.            @imagesetpixel($im, $pointx, $pointy, $pointcolor); 
  59.      } 
  60.  
  61.      @imagestring($im, 3, 5, 1, $randval, $stringcolor); 
  62.      $imagefun='image'.$type; 
  63.      $imagefun($im); 
  64.      @imagedestroy($im); 
  65.      $_session['safecode'] = $randval; 
  66. //产生随机字符串 
  67. function randstr($len=6,$format='all') {  
  68.            switch($format) {  
  69.                  case 'all': 
  70.                  $chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789www.111cn.net'; break; 
  71.                  case 'char': 
  72.                  $chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'; break; 
  73.                  case 'number': 
  74.                  $chars='0123456789'; break; 
  75.                  default : 
  76.                  $chars='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789';  
  77.                  break; 
  78.            } 
  79.      $string=""; 
  80.      while(strlen($string)<$len) 
  81.      $string.=substr($chars,(mt_rand()%strlen($chars)),1); 
  82.      return $string; 
  83. } 
  84.  
  85. //调用此页面,如果下面的式子成立,则生成验证码图片  
  86. if($_get["action"]=="verifycode")  
  87. {  
  88.     rand_create();  
  89. }  
  90. //验证码图片生成  
  91. function rand_create()  
  92. {  
  93.     //通知浏览器将要输出png图片  
  94.     header("content-type: image/png");  
  95.     //准备好随机数发生器种子   
  96.     srand((double)microtime()*1000000);  
  97.     //准备图片的相关参数    
  98.     $im = imagecreate(62,20);  
  99.     $black = imagecolorallocate($im, 0,0,0);  //rgb黑色标识符  
  100.     $white = imagecolorallocate($im, 255,255,255); //rgb白色标识符  
  101.     $gray = imagecolorallocate($im, 200,200,200); //rgb灰色标识符  
  102.     //开始作图      
  103.     imagefill($im,0,0,$gray);  
  104.     while(($randval=rand()%100000)<10000);{  
  105.         $_session["login_check_num"] = $randval;  
  106.         //将四位整数验证码绘入图片   
  107.         imagestring($im, 5, 10, 3, $randval, $black);  
  108.     }  
  109.     //加入干扰象素     
  110.     for($i=0;$i<200;$i++){  
  111.         $randcolor = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));  
  112.         imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);  
  113.     }  
  114.     //输出验证图片  
  115.     imagepng($im);  
  116.     //销毁图像标识符  
  117.     imagedestroy($im);  
  118. }  
  119. //检验验证码  
  120. function rand_check()  
  121. {  
  122.     if($_post["reg_rand"] == $_session["login_check_num"]){  
  123.         return true;  
  124.     } //开源代码Vevb.com 
  125.     else{  
  126.         exit("验证码输入错误");  
  127.     }  
  128. } 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表