utaka : "MU:スパムのユーザー登録防止法"
5月 6th, 2011
わたしのトコも被害を受けました。
SI CAPTCHA Anti-Spam(バージョン 2.7.1)で当初は凌いでましたが、
破られてるか、直打ちされてるようで、1日10~20件来てます。
SI CAPTCHA Anti-Spam を諦めて、
簡単な計算問題を出すタイプのプラグイン
Block Spam By Math Reloaded ( v.2.1.1 ) に変更し、
私のサイトは、日本人相手なので、半角数字を漢数字に置き換える改造を加えました。
BuddyPressにも対応していますし、携帯対応化を考えるをこちらにしてよかったかなと思ってます。
改造方法を下記に示します。よろしければ、参考にしてください
下記では 例えば 3 を 三 に置き換えてますが
参 や さん 、弐 たす 壱 などにすれば かなりいけるかと思います。
改造後は、UTF-8コードで保存してください
########################################
#
# Block Spam By Math Reloaded ( v.2.1.1 )
#コメントやユーザー登録の際に、計算式を出すプラグイン
#
# 半角文字を 漢数字の置き換える
#
#######################################
#
#####---- OPEN --------------------------
#wp-content/plugins/block-spam-by-math-reloaded/block-spam-by-math-reloaded.php
#
####------- FIND -------------------------
# Last Line
?>
#
## -------- Befoer Add -------------------
#
/**
* 半角数字を漢数字に変換する(位取り記法)
* EX.1,234,567 --> 百二十三万四千五百六十七
* @param string $instr 半角数字
* 小数、負数に対応;指数表記には未対応
* カンマは削除
* @return string 漢数字
*http://www.pahoo.org/e-soul/webtech/php03/php03-05-01.shtm
*/
function num2kan_decimal($instr) {
static $kantbl1 = array(0=>'', 1=>'一', 2=>'二', 3=>'三', 4=>'四', 5=>'五', 6=>'六', 7=>'七', 8=>'八', 9=>'九', '.'=>'.', '-'=>'−');
static $kantbl2 = array(0=>'', 1=>'十', 2=>'百', 3=>'千');
static $kantbl3 = array(0=>'', 1=>'万', 2=>'億', 3=>'兆', 4=>'京');
$outstr = '';
$len = strlen($instr);
$m = (int)($len / 4);
//一、万、億、兆‥‥の繰り返し
for ($i = 0; $i <= $m; $i++) {
$s2 = '';
//一、十、百、千の繰り返し
for ($j = 0; $j < 4; $j++) {
$pos = $len - $i * 4 - $j - 1;
if ($pos >= 0) {
$ch = substr($instr, $pos, 1);
$ch1 = isset($kantbl1[$ch]) ? $kantbl1[$ch] : '';
$ch2 = isset($kantbl2[$j]) ? $kantbl2[$j] : '';
//冒頭が「一」の場合の処理
if ($ch1 != '') {
if ($ch1 == '一' && $ch2 != '') $s2 = $ch2 . $s2;
else $s2 = $ch1 . $ch2 . $s2;
}
}
}
if ($s2 != '') $outstr = $s2 . $kantbl3[$i] . $outstr;
}
return $outstr;
}
#
###----- Find -----------------------
# About Line 160
echo '
<div class="question">What is '. $mathvalue0 .' + '. $mathvalue1 .' ?</div>
#
## -------- Replace With -------------------
#
echo '
<div class="question">計算問題 '. num2kan_decimal($mathvalue0) .' + '. num2kan_decimal($mathvalue1) .' は?(半角数字で)</div>
#
## -------- Save by the UTF-8 Code!!! -------------------
#