これは私がずっと前に見つけた簡単な数学のキャプチャタイプのものです。
利点:
-画像がないため、帯域幅の使用量が少なくなります。
-外部依存関係はありません。
フロープロセス
でform.php
:
- 乱数を1つ選択します
$n1
- 別の乱数を選択してください
$n2
- さまざまな数学演算を使用して計算し
$n1
、それをとして保存して、結果の数値が予測不可能であり、$n2
$result
$n1+$n2
- エコー「
$n1
+とは$n2
?」
- 手順4で尋ねた質問の答えを入力するようにユーザーに依頼します。
$result
フォームに非表示の値として追加します。
- 送信時に、
$_POST
値はによって処理されcheck.php
ます。
でcheck.php
:
$_POST["answer"]
が設定されている場合は、$answer
- のステップ3で計算
$answer
したのと同じ方法で計算します。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