这是我很久以前发现的一个简单的数学 captha 类型的东西。
优点:
- 没有图像,因此带宽使用量更少。
- 没有外部依赖。
流水作业
在form.php
:
- 选择一个随机数
$n1
- 选择另一个随机数
$n2
- 用各种数学运算计算
$n1
&$n2
并将其存储为$result
,以便结果数不可预测且与$n1+$n2
- 回声“什么是
$n1
+ $n2
?”
- 要求用户输入步骤 4 中提出的问题的答案。
- 在表单中添加
$result
为隐藏值。
- 提交时,
$_POST
值由 处理check.php
。
在check.php
:
- 如果
$_POST["answer"]
已设置,请将其存储在$answer
$answer
以与第 3 步相同的方式计算form.php
- 现在,如果
$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
不应该找出他们两者之间的关系。