在CI的中文手册上,有一些有关于验证码识别的代码和原理讲解,下面废话不多说,直接上代码。
public function __construct()
{
//切记在控制器的构造函数中一定先继承父类控制器的构造函数
parent::__construct();$this->load->helper('captcha');
}
public function test_gd(){
$vals = array(
'word' => rand(100000,999999) , //验证码上显示的字符,可以写成函数,例如:rand(100000,999999)
'img_path' => 'data/captcha/', //验证码保存路径
'img_url' => '../../data/captcha', //验证码图片url
'font_path' => './path/to/fonts/texb.ttf', //验证码上字体
'img_width' => '150', //验证码图片宽度
'img_height' => 30, //验证码图片高度
'expiration' => 7200, //验证码图片删除时间
'word_length' => 8, //验证码长度
'font_size' => 16, //验证码字体大小
'img_id' => 'Imageid',
'pool' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'colors' => array(
'background' => array(255, 255, 255),
'border' => array(255, 255, 255),
'text' => array(0, 0, 0),
'grid' => array(255, 40, 40)
)
);
$cap = create_captcha($vals);
echo($cap['image']);
}
这种方式的缺点是,所有生成的验证码的图片都会存放在同一个文件夹里。如果访问量比较大的话,会造成内存占用量比较大的问题。网上有很多解决这种问题的方式。可以参考着改进一下。如果我有时间的话,我会写一个放在博客上。
还有一种生成验证码的比较好的方式。就是用php写一个画板,画板不变,变的是生成的随机的数字,这种方式也是大多数人所用到的。