用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP验证码生成程序几种方法

时间:2015-01-23  来源:西部数据  作者:西部数据

PHP验证码生这个功能常用于用用户注册登录或发布信息时一个安全验证的基本功能,下面小编来给大家介绍一些常用的PHP验证码生成代码与应用实例.

例1,直接使用数组,此方法比较简单,代码如下:

  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"
  4. </head> 
  5. <body> 
  6. <?php 
  7.  
  8. $arr=array(2,3,4,5,8,1,9,7,"a","b","c","d","e","f","中","国","南","北","大","小","多","少"); 
  9. $b=array_rand($arr,3); 
  10.  
  11. ?> 
  12. <form action="yz.php" method="post"
  13. <input type="text" name="code" /> 
  14. <input type="hidden" name="yanzhengma" value="<?php foreach($b  as $key
  15.          { 
  16.           echo $arr[$key]; 
  17.          } 
  18.        ?>" 
  19. /> 
  20.  
  21. <input type="submit" name="submit" value="do" /> 
  22. </form> 
  23. <?php 
  24.  
  25. echo “code:"; 
  26. foreach($b  as $key
  27.  echo $arr[$key]; 
  28. ?> 
  29.  
  30. </body> 
  31. </html>(以上语句另存为一个php文件) 
  32.  
  33. <?php 
  34. header(“Content-Type:text/html;charset=utf-8"); 
  35. echo $_POST["yanzhengma"]; 
  36. echo $_POST["code"]; 
  37. if($_POST["yanzhengma"]==$_POST["code"]) 
  38.  echo “验证码正确"; 
  39. }//开源代码phpfensi.com 
  40. else 
  41.  die(“<script>alert(‘验证码不正确");location="array_rand.php";</script>"); 
  42. ?> 

以上语句另存为yz.php

例2,也是用数组只不是数据多了一点,代码如下:

  1. function UPCAbarcode($code) { 
  2.   $lw = 2; $hi = 100; 
  3.   $Lencode = array('0001101','0011001','0010011','0111101','0100011'
  4.                    '0110001','0101111','0111011','0110111','0001011'); 
  5.   $Rencode = array('1110010','1100110','1101100','1000010','1011100'
  6.                    '1001110','1010000','1000100','1001000','1110100'); 
  7.   $ends = '101'$center = '01010'
  8.   /* UPC-A Must be 11 digits, we compute the checksum. */ 
  9.   if ( strlen($code) != 11 ) { die("UPC-A Must be 11 digits."); } 
  10.   /* Compute the EAN-13 Checksum digit */ 
  11.   $ncode = '0'.$code
  12.   $even = 0; $odd = 0; 
  13.   for ($x=0;$x<12;$x++) { 
  14.     if ($x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; } 
  15.   } 
  16.   $code.=(10 - (($odd * 3 + $even) % 10)) % 10; 
  17.   /* Create the bar encoding using a binary string */ 
  18.   $bars=$ends
  19.   $bars.=$Lencode[$code[0]]; 
  20.   for($x=1;$x<6;$x++) { 
  21.     $bars.=$Lencode[$code[$x]]; 
  22.   } 
  23.   $bars.=$center
  24.   for($x=6;$x<12;$x++) { 
  25.     $bars.=$Rencode[$code[$x]]; 
  26.   } 
  27.   $bars.=$ends
  28.   /* Generate the Barcode Image */ 
  29.   $img = ImageCreate($lw*95+30,$hi+30); 
  30.   $fg = ImageColorAllocate($img, 0, 0, 0); 
  31.   $bg = ImageColorAllocate($img, 255, 255, 255); 
  32.   ImageFilledRectangle($img, 0, 0, $lw*95+30, $hi+30, $bg); 
  33.   $shift=10; 
  34.   for ($x=0;$x    if (($x<10) || ($x>=45 && $x<50) || ($x >=85)) { $sh=10; } else { $sh=0; } 
  35.     if ($bars[$x] == '1') { $color = $fg; } else { $color = $bg; } 
  36.     ImageFilledRectangle($img, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color); 
  37.   } 
  38.   /* Add the Human Readable Label */ 
  39.   ImageString($img,4,5,$hi-5,$code[0],$fg); 
  40.   for ($x=0;$x<5;$x++) { 
  41.     ImageString($img,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg); 
  42.     ImageString($img,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg); 
  43.   } 
  44.   ImageString($img,4,$lw*95+17,$hi-5,$code[11],$fg); 
  45.   /* Output the Header and Content. */ 
  46.   header("Content-Type: image/png"); 
  47.   ImagePNG($img); 
  48.  
  49. UPCAbarcode('12345678901'); 
  50.  
  51. ?> 

例3,这个是一个比较完整的ajax刷新验证码实例.

vcode.php,代码如下:

  1. <?php   
  2. session_start();//开启session功能  
  3. header("Cache-Control: no-cache, must-revalidate"); 
  4.  
  5. $im = imagecreate(60,30);//定义图片宽度和高度  
  6. $vcode=getVCode();//获取要显示的字符  
  7. $bg = imagecolorallocate($im, 255, 255, 255);//定义图片背景  
  8. $txt = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));//定义要显示字符的颜色  
  9. imagestring($im, 8, 0, 0, $vcode$txt);//写入字符串到图片  
  10. header(Content-type: image/jpeg);//定义Content-type  
  11. imagejpeg($im);//以JPEG格式显示图片  
  12. $_SESSION[vcode]=$vcode;//写入SESSION  
  13.  
  14. function getVCode(){    //随机生成用户指定个数的字符串  
  15.   $codenum=4;  
  16.   $checkcode="";  
  17.   $string="";//要显示的可选字符串,请自行定义;  
  18.   for($i=0;$i<$codenum;$i  ) {    
  19.   $number=rand(0,2);    
  20.   switch($number){  //根据可选字符串可灵活定义;  
  21.        case 0 : $rand_number=rand(0,10);break;     
  22.        case 1 : $rand_number=rand(11,36);break;    
  23.        case 2 : $rand_number=rand(37,62);break;    
  24.   }    
  25.   $code=substr($string,$rand_number,1);  
  26.   $checkcode=$checkcode.$code;    
  27.   }   
  28.   return  $checkcode;  
  29. }       
  30. ?> 

loginform.html,代码如下:

  1. <!--详细信息--> 
  2. <form name="loginform"> 
  3. <table class="dtable"> 
  4.         <tr> 
  5.           <td width="100"> 用户名 </td><td><input class="txtbox" name="loginname" type=text size="30"/></td> 
  6.         </tr> 
  7.         <tr> 
  8.           <td width="100"> 密码 </td><td><input class="txtbox" name="loginpwd" type=password size="30"/></td> 
  9.         </tr> 
  10.         <tr> 
  11.           <td width="100"> 验证码 </td> 
  12.           <td><input class="txtbox" name="loginvcode" type=text size="10"/> 
  13.           <img id="vcode" src="vcode.php" alt="验证码" align="absmiddle"/> 
  14.           <a href="javascript:getVCode();">换一张</a></td> 
  15.         </tr> 
  16. </table> 
  17. <table> 
  18.         <tr><td colspan="2"> 
  19.           <input class="btn" name="ok" type="button" value="登录" onclick="setType('usr');usrVCode();"> 
  20.           <input class="btn" name="reset" type="reset" value="重写"> 
  21.           <input class="btn" name="exit" type="button" value="退出" onclick="Hide();"> 
  22.         </td></tr> 
  23. </table> 
  24. <table> 
  25.         <tr><td colspan="2"> 
  26.           还没有注册? <a href="javascript:setType('usr');Show('0','addform');">马上注册</a> 
  27.           忘记密码? <a href="javascript:setType('usr');Show('0','pwdform');">取回密码</a> 
  28.         </td></tr> 
  29. </table> 
  30. </form> 

vcode.js,代码如下:

  1. //该函数用来获取验证码 
  2. function getVCode() { 
  3.         var vcode=document.getElementById('vcode'); 
  4.         vcode.src = 'vcode.php?nocache='+new Date().getTime(); 
  5.  
  6. //该函数用来验证验证码 
  7. function usrVCode() { 
  8.         if(!checkLogin())return false
  9.         var loginvcode=document.loginform.loginvcode.value; 
  10.         var xmlhttp1=createAjax(); 
  11.         var data='&loginvcode='+loginvcode; 
  12. if (xmlhttp1) { 
  13.   var state=document.getElementById('state'); 
  14.           xmlhttp1.open('get',?do=vcodedo'+data,true);  
  15.   xmlhttp1.send(null); 
  16.   xmlhttp1.onreadystatechange=function() { 
  17.     if (xmlhttp1.readyState==4 && xmlhttp1.status==200) { 
  18.              setTimeout("state.style.display = 'none';",1000); 
  19.      var myres=xmlhttp1.responseText; 
  20.              var result=(myres==1)?"恭喜您,验证码输入正确!":"很抱歉,验证码输入错误!"
  21.              if(myres==0)alert(result); 
  22.              if(myres==1)usrLogin(); 
  23.             } 
  24.     else { 
  25.              state.style.display = ""
  26.      state.style.left=(document.body.offsetWidth-350)/2; 
  27.              state.style.top=(document.body.offsetHeight-235)/2+document.body.scrollTop; 
  28.     } 
  29.           } 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门