// 简单的图片验证码类,仅限用于学习原理,因为复杂度还不够容易被机器识破
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();

验证码效果:

验证码图片效果.png

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。