首页 > 开发 > PHP > 正文

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

2024-05-04 21:58:53
字体:大 中 小
来源:转载
供稿:网友
  1. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.Vevb.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. { 
  8.  document.getelementbyid("pinimg").src="log_demo.php?a=pin&r=" + math.random(); 
  9. } 
  10. </script> 
  11. </head> 
  12.  
  13. <body> 
  14. <form action="log_demo.php" method="get"> 
  15.  <input type="hidden" name="a" value="log" /> 
  16.  user:<input type="text" name="user" size="20" value="test" /><br /><br /> 
  17.  password:<input type="password" name="pass" size="12" value="123456" /><br /><br /> 
  18.  pincode:<input type="text" name="pin" size="8" value="" />  
  19.  <input type="button" value="getpin" onclick="getpinimg();"> 
  20.    <img id="pinimg" src="log_demo.php?a=pin" onclick="getpinimg();" />  
  21.  <input type="submit" value="submit"><br /> 
  22. </form> 
  23. </body> 
  24. </html> 

log_demo.php代码如下:

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

log_aux.php代码如下:

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

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