4

嗨,我是 PHP 新手,我需要一些帮助。我创建了一个联系表格,我想添加一些验证码。我已经创建了一些 gif 图像,其中添加了一些噪声的数字,并将 no1 命名为 code_01.gif,将 no2 命名为 code_02.gif 等。我将其中一些静态地放在我的表单上,用于这样的显示目的:

<img src="images/code_01.gif" />
<img src="images/code_07.gif" />
<img src="images/code_01.gif" />
<img src="images/code_08.gif" />
<img src="images/code_03.gif" />
<img src="images/code_07.gif" />
<input name="captcha" type="text" id="captcha" />

我想添加一些功能以每次随机显示图像代码,并检查输入是否与显示的 6 位数字匹配。

任何帮助,将不胜感激。

4

3 回答 3

5

简单的 PHP 验证码

这是您将使用的最简单的验证码脚本之一。虽然它不会掩盖文本,但对于许多需要低级 CAPTCHA 解决方案的人来说,它将很好地发挥其作用。这个脚本几乎不需要设置。唯一的依赖是 PHP GD 库。

它可以像这样使用简单,但它也是可配置的:

<?php

session_start();
include("captcha.php");
$_SESSION['captcha'] = captcha();

echo '<img src="' . $_SESSION['captcha']['image_src'] . '" alt="CAPTCHA" />';

?>

演示: http: //labs.abeautifulsite.net/simple-php-captcha/

于 2012-07-12T08:51:31.743 回答
3

你也可以使用这个:Securimage

Securimage 是一个开源的免费 PHP CAPTCHA 脚本,用于生成复杂的图像和 CAPTCHA 代码,以保护表单免受垃圾邮件和滥用。它可以很容易地添加到您网站上的现有表单中,以防止垃圾邮件机器人。只要您安装了 PHP,它就可以在大多数网络服务器上运行,并且 PHP 中支持 GD。Securimage 可以完成从生成 CAPTCHA 图像到验证输入代码的所有工作。有声代码可以通过 Flash 流式传输到具有视力障碍的浏览器。

于 2012-07-13T02:39:09.510 回答
-1

这是我很久以前发现的一个简单的数学 captha 类型的东西。
优点:
- 没有图像,因此带宽使用量更少。
- 没有外部依赖。

流水作业

form.php

  1. 选择一个随机数$n1
  2. 选择另一个随机数$n2
  3. 用各种数学运算计算$n1&$n2并将其存储为$result,以便结果数不可预测且与$n1+$n2
  4. 回声“什么是$n1+ $n2?”
  5. 要求用户输入步骤 4 中提出的问题的答案。
  6. 在表单中添加$result为隐藏值。
  7. 提交时,$_POST值由 处理check.php

check.php

  1. 如果$_POST["answer"]已设置,请将其存储在$answer
  2. $answer以与第 3 步相同的方式计算form.php
  3. 现在,如果$answer等于$_POST["result"],则验证用户是人类。

请记住,这$answer是用户提交的答案,$result是我们对$answer.

代码:

文件:form.php

<?php

$n1 = rand(1,15);
$n2 = rand(1,15);
//start making our result unpredictable & non-aligned with hidden value
$result = $n1+$n2;
$result = ($result*3)-2;
$result = ($result+4)*5;
$question="what is $n1 + $n2?";
?>
<form method="post" action="check.php">
<?php echo $question.PHP_EOL; ?>
<input name="answer" type="text"><br />
<input type="hidden" name="result" value="<?php echo $result; ?>">
</form>

文件:check.php

<?php

if(isset($_POST["answer")){
    $answer = $_POST["answer"];
    // start doing same math on $answer
    $answer = ($answer*3)-2;
    $answer = ($answer+4)*5;
    if($answer == $_POST["result"]{
        // echo Hurray, you are Human..
        // Do anything here.. 
    }else{
        echo "Wrong Answer";
    }

http://codepad.org/2MtULNhZ 的逻辑实现

关键是使编码和解码公式更难。所以有人在看hidden form value result并且Question不应该找出他们两者之间的关系。

于 2012-07-17T11:50:19.310 回答