换上新验证码,附代码

2008年09月20日

最近博客老是被垃圾评论骚扰。之前的验证码开启后又有群众反映评论不了。前些天在小O的博客上看到他用了简单数学运算的验证码,于是自己也写了个。刚刚换了上来,大家看看如何,欢迎提出建议。

代码:

PHP代码
  1. <?php   
  2. //-------------------------------------   
  3. // 文件说明:数学运算验证码   
  4. // 文件作者:Jesse Lee   
  5. // 作者主页:http://www.lisijie.com.cn   
  6. // 最后更新:2008-09-07   
  7. //-------------------------------------   
  8.   
  9. session_start();   
  10.   
  11. $sessionvar = 'vdcode'//Session变量名称   
  12. $width = 150;   //图像宽度   
  13. $height = 20;   //图像高度   
  14.   
  15. $operator = '+-*';  //运算符   
  16.   
  17. $code = array();   
  18. $code[] = mt_rand(1,9);   
  19. $code[] = $operator{mt_rand(0,2)};   
  20. $code[] = mt_rand(1,9);   
  21. $code[] = $operator{mt_rand(0,2)};   
  22. $code[] = mt_rand(1,9);   
  23. $codestr = implode('',$code);   
  24. eval("\$result = ".implode('',$code).";");   
  25. $code[] = '=';   
  26.   
  27. $_SESSION[$sessionvar] = $result;   
  28.   
  29. $img = ImageCreate($width,$height);   
  30. ImageColorAllocate($img, mt_rand(230,250), mt_rand(230,250), mt_rand(230,250));   
  31. $color = ImageColorAllocate($img, 0, 0, 0);   
  32.   
  33. $offset = 0;   
  34. foreach ($code as $char) {   
  35.     $offset += 20;   
  36.     $txtcolor = ImageColorAllocate($img, mt_rand(0,255), mt_rand(0,150), mt_rand(0,255));   
  37.     ImageChar($img, mt_rand(3,5), $offset, mt_rand(1,5), $char$txtcolor);   
  38. }   
  39.   
  40. for ($i=0; $i<100; $i++) {     
  41.     $pxcolor = ImageColorAllocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));   
  42.     ImageSetPixel($img, mt_rand(0,$width), mt_rand(0,$height), $pxcolor);   
  43. }   
  44.   
  45. header('Content-type: image/png');   
  46. ImagePng($img);   
  47. ?>  

技术学习 PHP,验证码

  1. avatar
    ROY
    September 29th, 2008 at 10:35 am
    [回复]
    這個就能防止BOT亂POST嗎?
    假若不用圖片,直接輸出HIDDEN VALUE可以嗎?
  2. September 30th, 2008 at 10:30 am
    [回复]
    一般情况下是可以的,除非验证码被破解了。你可可以用文字代替图片,不过效果可能没那么好。
  3. avatar
    ROY
    October 2nd, 2008 at 11:38 am
    [回复]
    哦,始於都是用圖片較好~~謝謝喔 ^_^
  4. avatar
    测试
    October 4th, 2008 at 21:11 pm
    [回复]
    奇怪~~~~~~~怎么我测试博主的这个验证码,输出的session值和实际结果不一样呢?
  5. avatar
    ggg
    April 6th, 2009 at 12:14 pm
    [回复]
    博猪不好意思,上面两条请删除吧,你的验证码提交了以后不会刷新啊~~
  6. avatar
    测试
    June 1st, 2009 at 10:26 am
    [回复]
    学习了哈
 
点击换一张验证码