当前位置:首页 > PHP教程 > php应用 > 列表

一个完整php验证码实例程序

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-25 11:34:01 浏览: 评论:0 
  1. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.phpfensi.com/tr/xhtml1/dtd/xhtml1-transitional.dtd"
  2. <html lang="en-us" xml:lang="en-us" xmlns="http://www.w3.org/1999/xhtml"
  3. <title>login</title> 
  4. <link rel="stylesheet" type="text/css" href="/tryit.css" /> 
  5. <script type="text/javascript"
  6. function getpinimg() 
  7.  document.getelementbyid("pinimg").src="log_demo.php?a=pin&r=" + math.random(); 
  8. </script> 
  9. </head> 
  10.  
  11. <body> 
  12. <form action="log_demo.php" method="get"
  13.  <input type="hidden" name="a" value="log" /> 
  14.  user:<input type="text" name="user" size="20" value="test" /><br /><br /> 
  15.  password:<input type="password" name="pass" size="12" value="123456" /><br /><br /> 
  16.  pincode:<input type="text" name="pin" size="8" value="" />  
  17.  <input type="button" value="getpin" onclick="getpinimg();"
  18.    <img id="pinimg" src="log_demo.php?a=pin" onclick="getpinimg();" />  
  19.  <input type="submit" value="submit"><br /> 
  20. </form> 
  21. </body> 
  22. </html> 

log_demo.php代码如下:

  1. <?php 
  2. require_once("log_aux.php"); 
  3.  
  4. if ($_get['a'] == "pin") { 
  5.  getpinimg(); 
  6.  exit
  7.  
  8. if ($_get['a'] == "log") { 
  9.  $ret = checkpincookie($_get['pin'], 300); 
  10.  if ($ret < 0) {//开源代码phpfensi.com 
  11.   echo "pin error:$ret "
  12.   exit
  13.  } 
  14.  // check user name and password. 
  15.  echo "ok..$ret "
  16.  if ("123xx" == 123) { 
  17.   echo "dddd "
  18.  } 
  19.  echo $_get['u']; 

log_aux.php代码如下:

  1. <?php 
  2. $magic_a = "www.phpfensi.com34589"
  3. $magic_b = "234566***+"
  4.  
  5. function getpincookie($pin_code
  6.  global $magic_a
  7.  global $magic_b
  8.  $now = time(); 
  9.  $client_ip = $_server['remote_addr']; 
  10.  $pin = md5($now . $client_ip . $magic_a . $pin_code . $maigc_b) . $now
  11.  return $pin
  12.  
  13. function checkpincookie($pin_code_in$timeout=300) // 5 miniuteswww.phpfensi.com 
  14.  global $magic_a
  15.  global $magic_b
  16.  $pin = substr($_cookie['pin'], 0, 32); 
  17.  $time = substr($_cookie['pin'], 32); 
  18.  $now = time(); 
  19.  if ($now - $time > $timeout) { 
  20.   return -100;  // time_out 
  21.  } 
  22.  $pin_code_in = strtolower($pin_code_in); 
  23.  $client_ip = $_server['remote_addr']; 
  24.  $pin_2 = md5($time . $client_ip . $magic_a . $pin_code_in . $maigc_b); 
  25.  if ($pin === $pin_2) { 
  26.   return 0; 
  27.  } else { 
  28.   return -200; // pincode is error. 
  29.  } 
  30.  
  31. function getpinimg() 
  32. // $rnd = rand(0, 10); 
  33.  $rnd = 0; 
  34.  $path = "./www.phpfensi.com/" . substr("00000$rnd", -4); 
  35.  for ($i = 0; $i < 4; ++$i) { 
  36.   if (__getpinimg($path)) { 
  37.    break
  38.   } 
  39.  } 
  40.  exit
  41.  
  42. function __getpinimg($path
  43.  require("$path/pinmap.php"); 
  44.  $pinv = $pin[rand(0, $pin_max)]; 
  45.  list ($file$pin_code) = explode('#'$pinv); 
  46.  $filepath = "$path/$file$pin_ext"
  47.  
  48.  //  output pincode image. 
  49.  $fh = fopen($filepath"rb"); 
  50.  if (!$fh) { 
  51.   return false; 
  52.  } 
  53.  $data = fread($fh, 10240); // php just read max size: 8k. 
  54.  fclose($fh); 
  55.  
  56.  if (strlen($data) < 200) { 
  57.   return false; 
  58.  } 
  59.  // set cookie; 
  60.  header("content-type: image/jpeg"); 
  61.  $pin_code = strtolower($pin_code); 
  62.  $pin = getpincookie($pin_code); 
  63.  setcookie("pin"$pin); 
  64.  
  65.  echo $data
  66.  return true; 

Tags: PHP验证码 PHP简单示例

分享到: