我这个想法好不好?
现在为了防止入侵,登陆都增加了验证码,但是PHP要用到GD库,影响速度,而且很多虚拟主机也不支持,我下面这个想法就是用HTML来画数字,这样大家觉得好不好?
<?php
/*
* 将字符串用HTML来图形化输入
* @参数: $str [in]
* 待显示的字符串
* @参数: $cr [in]
* 显示字符串的颜色,字符串形式, 如"#FFFFFF"
* @返回: NULL
*/
function ShowDigit($str,$cr)
{
/* 字符宽度跟高度 */
$CHAR_WIDTH = 16;
$CHAR_HEIGHT = 16;
/* 数字的点阵 */
$digit['0'] = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
$digit['1'] = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
$digit['2'] = array(0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,
0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
/* 字符个数 */
$count = strlen($str);
/* 步长 */
$stride = $CHAR_WIDTH * $count;
/* 把每一个数字的点阵存入显示数组中 */
for( $c = 0; $c < strlen($str); $c ++)
{
$k = 0;
for ($i = 0; $i <16; $i ++)
{
for ($j = 0; $j <16; $j ++)
{
$a[$j + $i * $stride + $c * $CHAR_WIDTH] = $digit[$str{$c}][$k++];
}
}
}
/* 用HTML的形式显示数字 */
echo "<table cellspacing='0' cellpadding='0' bgcolor='#FFFFFF'>";
for ($j = 0; $j < $CHAR_HEIGHT; $j ++)
{
echo "<tr>\n";
for ($i = 0; $i < $stride; $i ++)
{
if ($a[$i + $j * $stride] == 0)
{
echo "<td height=1 width=1 bgcolor='#FFFFFF'></td>\n";
} else {
echo "<td height=1 width=1 bgcolor='$cr'></td>\n";
}
}
echo "</tr>\n";
}
echo "</table>";
}
/* 例子 */
ShowDigit("01101210101021010", '#FF9000');
?>