GD库制作验证码
程序员文章站
2022-05-22 12:26:17
...
php代码:
<?php // 配置验证码 $code_ini = array( 'code_count' => 4, // 验证码长度 'code_size' => 20, // 验证码字体大小 'code_width' => 100, // 验证码框宽度 'code_height' => 30, // 验证码框高度 'code_num' => true, // 开启数字 'code_upper' => true, // 开启大写字母 'code_lower' => true, // 开启小写字母 'code_remove' => '1li0oO2zZ' //排除易混淆字符 ); // 将配置项转为对应变量 foreach ($code_ini as $key=>$value) { $$key = $value; } // 创建验证码画布 $code_img = imagecreatetruecolor($code_width, $code_height); $black = imagecolorallocate($code_img, 0, 0, 0); // 填充随机背景颜色 $bg = imagecolorallocate($code_img, rand(200, 255), rand(200, 255), rand(200, 255)); imagefill($code_img, 0, 0, $bg); // 随机画100个干扰点 for ($i = 0; $i < 100; $i++) { $color = imagecolorallocate($code_img, rand(0, 200), rand(0, 200), rand(0, 200)); imagesetpixel($code_img, rand(2, $code_width-2), rand(2, $code_height-2), $color); } // 随机画10个干扰线 for ($q = 0; $q < 10; $q++) { $color = imagecolorallocate($code_img, rand(0, 200), rand(0, 200), rand(0, 200)); imageline($code_img, rand(2, $code_width-2), rand(2, $code_height-2), rand(2, $code_width-2), rand(2, $code_height-2), $color); } // 获取验证码 $code = get_code($code_count, $code_num, $code_upper, $code_lower, $code_remove); for ($i=0; $i<$code_count; $i++) { $color = imagecolorallocate($code_img, rand(0, 200), rand(0, 200), rand(0,200)); imagettftext($code_img, $code_size, rand(-30, 30), 5+20*$i, 24, $color, '../fonts/msyh.ttf',$code[$i]); } imagerectangle($code_img, 0, 0, $code_width-1, $code_height-1, $black); // 输出验证码 header('content-type:image/gif'); imagegif($code_img); // 销毁资源 imagedestroy($code_img); // 获得验证码 function get_code($code_count, $code_num, $code_upper, $code_lower, $code_remove) { $num = array(); $upper = array(); $lower = array(); if ($code_num) { $num = range(0, 9); } if ($code_upper) { $upper = range('A', 'Z'); } if ($code_lower) { $lower = range('a', 'z'); } // 合并符合条件数组 $arr = array_merge($num, $lower, $upper); // 排除易混淆字符 $remove = str_split($code_remove); $arr1 = array_diff($arr, $remove); $mess = ''; for ($i=0; $i<$code_count; $i++) { $mess .= $arr1[array_rand($arr1)]; } return $mess; }