- <?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;
- }
- //该片段来自于http://www.codesnippet.cn/detail/1705201614664.html
来源: http://www.codesnippet.cn/detail/1705201614664.html