php生成验证码,点击可刷新的实例

来源:互联网 发布:公共软件服务经营范围 编辑:程序博客网 时间:2024/05/17 04:56
PHP生成验证码,并可以进行点击刷新。

验证码原理:首先生成一个随机数,然后在数据数上面加上干扰图片,同时把该数据生成图片并输出。
这个数据保存在session中。然后把用户的输入与保存在session中的数据进行匹配,进行验证。

verifyCode.php代码如下:
<?phpHeader("Content-type: image/PNG");session_start();//准备好随机数发生器种子srand((double)microtime()*1000000);//准备图片的相关参数$im = imagecreate(62,20);$black = ImageColorAllocate($im, 0,0,0); //RGB黑色标识符$white = ImageColorAllocate($im, 255,255,255); //RGB白色标识符$gray = ImageColorAllocate($im, 200,200,200); //RGB灰色标识符//开始作图imagefill($im,0,0,$gray);while(($randval=rand()%100000)<10000);{$_SESSION["check_num"] = $randval;//将四位整数验证码绘入图片imagestring($im, 5, 10, 3, $randval, $black);}//加入干扰象素for($i=0;$i<200;$i++){$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);}//输出验证图片ImagePNG($im);//销毁图像标识符ImageDestroy($im);//header("content-type:image/png");////定义header,声明图片文件,最好是png,无版权之扰;////生成新的四位整数验证码//session_start();//开启session;//$authnum_session = '';//$str = 'abcdefghijkmnpqrstuvwxyz1234567890';////定义用来显示在图片上的数字和字母;//$l = strlen(str); //得到字串的长度;////循环随机抽取四位前面定义的字母和数字;//for($i=1;$i<=4;$i++)//{//$num=rand(0,l-1);////每次随机抽取一位数字;从第一个字到该字串最大长度,////减1是因为截取字符是从0开始起算;这样34字符任意都有可能排在其中;//$authnum_session.= str($num);////将通过数字得来的字符连起来一共是四位;//} //by www.jbxue.com//session_register("authnum_session");////用session来做验证也不错;注册session,名称为authnum_session,////其它页面只要包含了该图片////即可以通过_session["authnum_session"]来调用////生成验证码图片,//srand((double)microtime()*1000000);//$im = imagecreate(50,20);//图片宽与高;////主要用到黑白灰三种色;//$black = imagecolorallocate(im, 0,0,0);//$white = imagecolorallocate(im, 255,255,255);//$gray = imagecolorallocate(im, 200,200,200);////将四位整数验证码绘入图片//imagefill(im,68,30,gray);////如不用干扰线,注释就行了;//$li = imagecolorallocate(im, 220,220,220);//for($i=0;$i<3;$i++)//{//加入3条干扰线;也可以不要;视情况而定,因为可能影响用户输入;//imageline(im,rand(0,30),rand(0,21),rand(20,40),rand(0,21),li);//}////字符在图片的位置;//imagestring(im, 5, 8, 2, authnum_session, white);//for($i=0;$i<90;$i++)//{//加入干扰象素//imagesetpixel(im, rand()%70 , rand()%30 , gray);//}//imagepng(im);//imagedestroy(im);/*session_start();//生成验证码图片Header("Content-type: image/PNG");$im = imagecreate(44,18);$back = ImageColorAllocate($im, 245,245,245);imagefill($im,0,0,$back); //背景srand((double)microtime()*1000000);//生成4位数字for($i=0;$i<4;$i++){$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255));$authnum=rand(1,9);$vcodes.=$authnum;imagestring($im, 5, 2+$i*10, 1, $authnum, $font);}for($i=0;$i<100;$i++){ //加入干扰象素$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);}ImagePNG($im);ImageDestroy($im);$_SESSION['VCODE'] = $vcodes;*/?>

为了能够无刷新的生成新的验证码,即点击即可生成新的验证码,可以这样:
<dl> <dt><label for="verifyCode">验证码:</label></dt> <dd><input type="text" id="verifyCode" name="verifyCode" value="" size="10" maxlength="10" class="iptext v_ip"/></dd> <dd><img style="cursor: pointer" mce_style="cursor: pointer" src="verifyCode.php" mce_src="verifyCode.php" id="verifyCode" align="middle" onclick="this.src='verifyCode.php?'" alt="刷新验证码"/></dd></dl> 
原创粉丝点击