reCaptcha现在很难阅读(实际上是破译)。所以我正在寻找另一种可供使用的验证码系统。
我正在考虑使用一个简单的基于数学的系统,例如:“What is 2+5
”。
是否有任何此类插件或关于如何构建自己的插件的想法?
(不复杂的数学like this one)
答案 0 :(得分:2)
PHP - 生成一个简单的加法或减法数学问题,在显示数字(10 - 3)和单词(七加五)之间随机交替,并以数字(14)或单词(十四)接受答案。返回表示等式
组件的数组[0] - 第一个变量值,如字符串,如“4”或“4” [1] - 第二个值,运算符,如'+'或'plus' [2] - 第三个值,第二个变量,如'ten'或'10' [3] - 答案,数字形式,如'14' [4] - 答案,文字形式,如'十四'
所以只需将公式打印到页面,将数组存储在$ _SESSION中,然后检查用户提供的答案。
<?php
// array of numbers and their corresponding word versions
// you can simply do $wordNumbers[6] and get 'six'
$wordNumbers = array(
0 => 'zero',
1 => 'one',
2 => 'two',
3 => 'three',
4 => 'four',
5 => 'five',
6 => 'six',
7 => 'seven',
8 => 'eight',
9 => 'nine',
10 => 'ten',
11 => 'eleven',
12 => 'twelve',
13 => 'thirteen',
14 => 'fourteen',
15 => 'fifteen',
16 => 'sixteen',
17 => 'seventeen',
18 => 'eighteen',
19 => 'nineteen',
20 => 'twenty'
);
/*
*
* returns an array representing components of a math captcha
* [0] - first variable value, as string, like either '4' or 'four'
* [1] - second value, the operator, like '+' or 'plus'
* [2] - third value, the second variable, like 'ten' or '10'
* [3] - the answer, in numerical form, like '14'
* [4] - the answer, in text form, like 'fourteen'
*/
function getMathCaptcha(){
global $wordNumbers;
$equation = array();
// get first number, between 7 and 13 inclusive
$n1 = rand(7, 13);
$r = rand(0,1);
// return $n1 as digit or text
if ($r == 0) {
$equation[0] = $n1;
} else {
$equation[0] = $wordNumbers[$n1];
}
// get operator
$o = rand(0,1);
$r = rand(0,1);
if ($o == 0){
// subtraction
if ($r == 0) {
$equation[1] = '-';
} else {
$equation[1] = 'minus';
}
} else {
// addition
if ($r == 0) {
$equation[1] = '+';
} else {
$equation[1] = 'plus';
}
}
// get second number, between 0 and 7 inclusive, so no negative answers
$n2 = rand(1,7);
$r = rand(0,1);
// return $n2 as digit or text
if ($r == 0) {
$equation[2] = $n2;
} else {
$equation[2] = $wordNumbers[$n2];
}
// get answer
if ($o == 0){
$answer = $n1 - $n2;
} else {
$answer = $n1 + $n2;
}
// answer as digit and text
$equation[3] = $answer;
$equation[4] = $wordNumbers[$answer];
return $equation;
}
?>
答案 1 :(得分:1)
what are the downpoints of this captcha method
或者您是否特别想要使用用户输入法?
答案 2 :(得分:0)
答案 3 :(得分:0)
如果我要制作一个简单的,它将遵循:
制作不同类别的项目,例如鲜花,水果,蔬菜和肉类。然后设计验证码以询问总共一个类别。
例如:
随机化类别,选择2个唯一的类别。所以也许我们得到鲜花和水果。接下来,问用户:“如果你有3朵玫瑰,4朵橙子和6个苹果,那么你有多少水果?”
简单模式:
获取n-1个唯一类别。显示n个项目,其中每个项目属于一个唯一类别。要求从一个类别中获得总数。
答案 4 :(得分:0)
你可以自己创建这样的验证码。您所要做的就是创建一个函数,该函数将在给定的数字列表之间拾取一个随机数,并调用该函数两次以获取两个随机数。
将结果存储在会话变量或任何其他变量中,以便稍后验证。
下面的是用c#
编码的示例 Random a=new Random();
a.Next();//it will return you a non negative number
a.Next(min value,maximum value);//it will return you a number between the range specified.
希望这有帮助