www.gusucode.com > 仿51.com的php源码 1.1 > authpage/validatecode.php
<?php /* * 作者:Bigmonster * 网站:http://www.foolmen.com * 电子邮件:ahao_150@163.com * 版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件 * 发送一份给作者,欢迎大家进一步改进. * Copyright (C) 2006-2007 FoolMen Studio & foolmen.com * Author: Bigmonster ahao_150@163.com * File Name: validatecode.php * create image validatecode. * * Last Modified: * 2006-03-13 14:41 */ //输入中文字符串时需要gb2312到utf8的转码函数 require_once "convertEncoding.php"; session_start(); if(!session_is_registered('validatecode')) { session_register('validatecode'); } $width = "150";//图片宽 $height = "50";//图片高 $len = "4";//生成几位验证码 $bgcolor = "#ffffff";//背景色 $noise = true;//生成杂点 $noisenum = 200;//杂点数量 $border = true;//边框 $bordercolor = "#000000";//边框颜色 //产生一个基于调色板的图像 $image = imageCreate($width, $height); //背景颜色 $back = getcolor($bgcolor); //画一矩形并用背景色填充 imageFilledRectangle($image, 0, 0, $width, $height, $back); //每个验证码所占的宽度 $size = $width/$len; if($size>$height) $size=$height; //左边位置 $left = ($width-$len*($size+$size/10))/$size; //依次将$len个字符输出 for ($i=0; $i<$len; $i++) { //产生一个中文字符 $randtext = CreateRandomGBStr(1); //$randtext=randStr(4,NUMBER); $code .= $randtext; //文字颜色 $textColor = imageColorAllocate($image, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100)); //文字所用字体文件 $font = "fangZhengJianZhiJianTi.TTF"; //文字字号大小 $randsize = mt_rand($size-$size/10, $size+$size/10)*(2/3); //字符位置 $location = $left+($i*$size+$size/10); //输出字符到图象 ImageTTFText($image, $randsize, mt_rand(-18,18), $location, mt_rand($size-$size/10, $size+$size/10), $textColor, $font, $randtext); } //添加图片噪声 if($noise == true) setnoise(); //将字符串验证码保存在SESSION中 $_SESSION['validatecode'] = $code; //画边框 $bordercolor = getcolor($bordercolor); if($border==true) imageRectangle($image, 0, 0, $width-1, $height-1, $bordercolor); //将图象在浏览器输出 header("Content-type: image/png"); imagePng($image); imagedestroy($image); /**************************************************************************/ // 函数名: getcolor // 功能: 获取颜色 /**************************************************************************/ function getcolor($color) { global $image; $color = eregi_replace ("^#","",$color); $r = $color[0].$color[1]; $r = hexdec ($r); $b = $color[2].$color[3]; $b = hexdec ($b); $g = $color[4].$color[5]; $g = hexdec ($g); $color = imagecolorallocate ($image, $r, $b, $g); return $color; } /**************************************************************************/ // 函数名: setnoise // 功能: 添加噪声点 /**************************************************************************/ function setnoise() { global $image, $width, $height, $back, $noisenum; for ($i=0; $i<$noisenum; $i++){ $randColor = imageColorAllocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imageSetPixel($image, mt_rand(0, $width), mt_rand(0, $height), $randColor); } } /**************************************************************************/ // 函数名: randStr // 功能: 产生随机字符串 // 参数: $str 字符个数, $format 类型 /**************************************************************************/ function randStr($len,$format) { switch($format) { case 'ALL': $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; case 'CHAR': $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break; case 'UPPERCHAR': $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 'NUMBER': $chars='0123456789'; break; default : $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; } $string=""; while(strlen($string)<$len) $string.=substr($chars,(mt_rand()%strlen($chars)),1); return $string; } /**************************************************************************/ // 函数名: CreateRandomGBStr // 功能: 产生指定长度的utf8编码格式的中文字符串 // 参数: $strLength 中文字符个数 /**************************************************************************/ function CreateRandomGBStr($strLength) { if(!is_int($strLength)) return ""; /* 每循环一次产生一个gb编码的中文字符 * 每个汉字由四个区位码组成 */ $gb = ""; for($i = 0; $i < $strLength; $i++) { //取汉字16区到55区中的任意一个 //因为在这个区以外的汉字都挺生僻,不适合作为验证码出现 //规律:前两位趣味从16到55 //码位第一位为零的话第二位不能为零,第一位为9的话第二位不能为5到9中的数字 //55区最后一行没有汉字 //先产生前两位区位码 $qu = mt_rand(16,55); if($qu == 55) { //单独处理这一区 //码位第一位 $ma1 = mt_rand(0,8); if($ma1 == 0) { //码位第二位 $ma2 = mt_rand(1,9); } else { $ma2 = mt_rand(0,9); } } else { //码位第一位 $ma1 = mt_rand(0,9); if($ma1 == 0) { //码位第二位 $ma2 = mt_rand(1,9); } elseif($ma1 == 9) { $ma2 = mt_rand(0,4); } else { $ma2 = mt_rand(0,9); } } $gb .= chr($qu+160) . chr(($ma1*10+$ma2)+160); } //返回utf8编码格式的中文字符串 return gb2utf8($gb); } ?>