// 简单的图片验证码类,仅限用于学习原理,因为复杂度还不够容易被机器识破 class Captcha{ public function show($strNum = 4, $width = 70, $height = 30) { // 生成验证码图片 header ( 'Content-type: image/png' ); $str = '1,2,3,4,5,6,7,8,9,a,b,c,d,f,g'; // 要显示的字符,可自己进行增删 $list = explode ( ',', $str ); $listMax = count ( $list ); $listCode = array (); for($i = 0; $i < $strNum; $i ++) { $listCode [] = $list [rand ( 0, $listMax - 1 )]; } // 随机生成的字符 $code = implode ( '', $listCode ); // 存入验证码到缓存 // 代码略。。。 // 生成图片 $img = imagecreate ( $width, $height ); // 填充背景颜色 $background = imagecolorallocate ( $img, 200, 200, 200 ); imagefill ( $img, 0, 0, $background ); // 三种颜色 $black = imagecolorallocate ( $img, 0, 0, 0 ); $red = imagecolorallocate ( $img, 200, 0, 0 ); $green = imagecolorallocate ( $img, 0, 140, 0 ); // 打印字符 for($i = 0; $i < count ( $listCode ); $i ++) { imagestring ( $img, 5, 10 + $i * 15, 5, $listCode [$i], $black ); } // 干扰像素 for($i = 0; $i < $width * $height / 100; $i ++) { imagesetpixel ( $img, rand ( 0, $width ), rand ( 0, $height ), $black ); imagesetpixel ( $img, rand ( 0, $width ), rand ( 0, $height ), $red ); imagesetpixel ( $img, rand ( 0, $width ), rand ( 0, $height ), $green ); } imagejpeg ( $img ); imagedestroy ( $img ); } } // 显示 $c = new Captcha(); $c -> show();
验证码效果: