Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[疑问] ss5.5.5如何将验证码反序?

[复制链接]
xyzeast 发表于 2010-3-28 11:23:33 | 显示全部楼层 |阅读模式
为了防止垃圾评论,我打算将验证码答案反序显示,即显示的验证码是1234,答案其实是4321,不懂php,想问问如何实现?

下面是ss的验证码页面:
  1. <?php

  2. /*
  3.         [SupeSite/X-Space] (C)2001-2006 Comsenz Inc.
  4.         验证码图片

  5.         $RCSfile: batch.seccode.php,v $
  6.         $Revision: 1.16.4.1 $
  7.         $Date: 2007/06/13 17:45:11 $
  8. */

  9. $nolanguage = 1;//不包含语言包
  10. include_once('./include/main.inc.php');

  11. $nocacheheaders = 1;

  12. $seccode = random(4, 1);
  13. $seccode = sprintf('%04d', $seccode);

  14. $supe_hash = authcode($_SGLOBAL['timestamp']."\t".$seccode, 'ENCODE');
  15. ssetcookie('supe_hash', $supe_hash);

  16. if($nocacheheaders) {
  17.         @header("Expires: -1");
  18.         @header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
  19.         @header("Pragma: no-cache");
  20. }

  21. if(function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecreatefromgif') && function_exists('imagecopyresized') && function_exists('imagecolorallocate') && function_exists('imagesetpixel') && function_exists('imagechar') && function_exists('imagepng')) {
  22.         $im = imagecreate(62, 25);
  23.         $backgroundcolor = imagecolorallocate ($im, 255, 255, 255);

  24.         $numorder = array(1, 2, 3, 4);
  25.         shuffle($numorder);
  26.         $numorder = array_flip($numorder);

  27.         for($i = 1; $i <= 4; $i++) {
  28.                 $imcodefile = 'images/base/number'.$seccode[$numorder[$i]].'.gif';
  29.                 $x = $numorder[$i] * 13 + mt_rand(0, 4) - 2;
  30.                 $y = mt_rand(0, 3);
  31.                 if(file_exists($imcodefile)) {
  32.                         $imcode = imagecreatefromgif($imcodefile);
  33.                         $data = getimagesize($imcodefile);
  34.                         imagecolorset($imcode, 0 ,mt_rand(50, 255), mt_rand(50, 128), mt_rand(50, 255));
  35.                         imagecopyresized($im, $imcode, $x, $y, 0, 0, $data[0] + mt_rand(0, 6) - 3, $data[1] + mt_rand(0, 6) - 3, $data[0], $data[1]);
  36.                 } else {
  37.                         $text_color = imagecolorallocate($im, mt_rand(50, 255), mt_rand(50, 128), mt_rand(50, 255));
  38.                         imagechar($im, 5, $x + 5, $y + 3, $seccode[$numorder[$i]], $text_color);
  39.                 }
  40.         }

  41.         $linenums = mt_rand(10, 32);
  42.         for($i=0; $i <= $linenums; $i++) {
  43.                 $linecolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  44.                 $linex = mt_rand(0, 62);
  45.                 $liney = mt_rand(0, 25);
  46.                 imageline($im, $linex, $liney, $linex + mt_rand(0, 4) - 2, $liney + mt_rand(0, 4) - 2, $linecolor);
  47.         }       
  48.        
  49.         for($i=0; $i <= 64; $i++) {
  50.                 $pointcolor = imagecolorallocate($im, mt_rand(50, 255), mt_rand(50, 255), mt_rand(50, 255));
  51.                 imagesetpixel($im, mt_rand(0, 62), mt_rand(0, 25), $pointcolor);
  52.         }

  53.         $bordercolor = imagecolorallocate($im , 150, 150, 150);
  54.         imagerectangle($im, 0, 0, 61, 24, $bordercolor);

  55.         header('Content-type: image/png');
  56.         imagepng($im);
  57.         imagedestroy($im);
  58. } else {
  59.         $numbers = array
  60.         (
  61.                 0 => array('3c','66','66','66','66','66','66','66','66','3c'),
  62.                 1 => array('1c','0c','0c','0c','0c','0c','0c','0c','1c','0c'),
  63.                 2 => array('7e','60','60','30','18','0c','06','06','66','3c'),
  64.                 3 => array('3c','66','06','06','06','1c','06','06','66','3c'),
  65.                 4 => array('1e','0c','7e','4c','2c','2c','1c','1c','0c','0c'),
  66.                 5 => array('3c','66','06','06','06','7c','60','60','60','7e'),
  67.                 6 => array('3c','66','66','66','66','7c','60','60','30','1c'),
  68.                 7 => array('30','30','18','18','0c','0c','06','06','66','7e'),
  69.                 8 => array('3c','66','66','66','66','3c','66','66','66','3c'),
  70.                 9 => array('38','0c','06','06','3e','66','66','66','66','3c')
  71.         );
  72.         for($i = 0; $i < 10; $i++) {
  73.                 for($j = 0; $j < 6; $j++) {
  74.                         $a1 = substr('012', mt_rand(0, 2), 1).substr('012345', mt_rand(0, 5), 1);
  75.                         $a2 = substr('012345', mt_rand(0, 5), 1).substr('0123', mt_rand(0, 3), 1);
  76.                         mt_rand(0, 1) == 1 ? array_push($numbers[$i], $a1) : array_unshift($numbers[$i], $a1);
  77.                         mt_rand(0, 1) == 0 ? array_push($numbers[$i], $a1) : array_unshift($numbers[$i], $a2);
  78.                 }
  79.         }

  80.         $bitmap = array();
  81.         for($i = 0; $i < 20; $i++) {
  82.                 for ($j = 0; $j < 4; $j++) {
  83.                         $n = substr($seccode, $j, 1);
  84.                         $bytes = $numbers[$n][$i];
  85.                         $a = mt_rand(0, 14);
  86.                         switch($a) {
  87.                                 case 1: str_replace('9', '8', $bytes); break;
  88.                                 case 3: str_replace('c', 'e', $bytes); break;
  89.                                 case 6: str_replace('3', 'b', $bytes); break;
  90.                                 case 8: str_replace('8', '9', $bytes); break;
  91.                                 case 0: str_replace('e', 'f', $bytes); break;
  92.                         }
  93.                         array_push($bitmap, $bytes);
  94.                 }
  95.         }

  96.         for ($i = 0; $i < 8; $i++) {
  97.                 $a = substr('012', mt_rand(0, 2), 1) . substr('012345', mt_rand(0, 5), 1);
  98.                 array_unshift($bitmap, $a);
  99.                 array_push($bitmap, $a);
  100.         }

  101.         $image = pack('H*', '424d9e000000000000003e000000280000002000000018000000010001000000'.
  102.                         '0000600000000000000000000000000000000000000000000000FFFFFF00'.implode('', $bitmap));

  103.         header('Content-Type: image/bmp');
  104.         echo $image;
  105. }

  106. function random($length, $numeric = 0) {
  107.         mt_srand((double)microtime() * 1000000);
  108.         if($numeric) {
  109.                 $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
  110.         } else {
  111.                 $hash = '';
  112.                 $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  113.                 $max = strlen($chars) - 1;
  114.                 for($i = 0; $i < $length; $i++) {
  115.                         $hash .= $chars[mt_rand(0, $max)];
  116.                 }
  117.         }
  118.         return $hash;
  119. }

  120. ?>
复制代码
 楼主| xyzeast 发表于 2010-3-31 00:07:09 | 显示全部楼层
discuz已经没有帮忙了吗?
回复

使用道具 举报

 楼主| xyzeast 发表于 2010-3-31 09:25:04 | 显示全部楼层
这个版块已经死了,4天浏览量才4个,估计都是我自己的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 15:28 , Processed in 0.022565 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表