• 故事中美两军举行人道主义救援减灾联合实兵演练 2019-08-13
  • 掌握新思想 开拓新实践——深入贯彻落实党的十九大精神系列述评之二 2019-07-30
  • “草原英雄小姐妹”走进山城 2019-07-01
  • 高清:里约奥运会奖牌曝光 大部分由再生材料制成 2019-06-27
  • 在楼主大谈共产主义分配的时候,希望楼主先说明一下对马克思关于共产主义基本原则的理解。一个社会如果仍然存在“按劳动分配”,怎么会是“每一个个人的全面而自由的发展” 2019-06-25
  • 河北法院:打造互联网+诉非衔接的人民法庭工作新机制 2019-06-25
  • 芯片是汽车产业发展的基石  专家呼吁建立"汽车芯片智库" 2019-06-13
  • “高深文学创作回顾研讨会”在北京举行 2019-06-13
  • 江苏专项督查基础教育问题 择校热、大班额成重点 2019-06-08
  • 14599元!索尼A7M3发布:续航翻番、支持4K视频 2019-06-08
  • 首页 春城壹网 七彩云南 一网天下 2019-05-22
  • QFII政策调整引增量资金入场 “成长+大消费”或成布局重点 2019-05-22
  • 密印“农禅”:何以在蛮荒之地举起文明火把(图) 2019-05-18
  • 20180531 袁隆平:海水稻打破纪录,杂交稻走向全球 2019-05-17
  • 晋城:八项重点打好水污染防治攻坚战 2019-05-15
  • 欢迎访问

    北京11选五和值走势图:云南鼎浩信息技术有限公司官方网站,云南网站建设诚信品牌!

    DING HAO COLUMN 鼎浩专栏

    鼎浩的一些分享
    Sharing from Ding Hao

    PHP生成各种验证码和Ajax验证

    来源:云南11选五走势图500期     2013年07月02日16:02
    字号:T|T

    云南11选五走势图500期 www.a-mcl.com 验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录、论坛恶意灌水等。本文将通过实例讲解使用PHP生成各种常见的验证码包括数字验证码、数字+字母验证码、中文验证码、算术验证码等等以及其Ajax验证过程。

    查看演示DEMO 下载源码

    PHP生成验证码图片

    PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有:

    1、产生一张png的图片;

    2、为图片设置背景色;

    3、设置字体颜色和样式;

    4、产生4位数的随机的验证码;

    5、把产生的每个字符调整旋转角度和位置画到png图片上;

    6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;

    7、输出图片;

    8、释放图片所占内存。

    应某位同学的要求,下面我们以helloweba.com的文章评论所用的验证码为例,讲解验证码的生成过程,直接上代码。

    session_start();
    getCode(4,60,20);
    
    function getCode($num,$w,$h) {
    	$code = "";
    	for ($i = 0; $i < $num; $i++) {
    		$code .= rand(0, 9);
    	}
    	//4位验证码也可以用rand(1000,9999)直接生成
    	//将生成的验证码写入session,备验证时用
    	$_SESSION["helloweba_num"] = $code;
    	//创建图片,定义颜色值
    	header("Content-type: image/PNG");
    	$im = imagecreate($w, $h);
    	$black = imagecolorallocate($im, 0, 0, 0);
    	$gray = imagecolorallocate($im, 200, 200, 200);
    	$bgcolor = imagecolorallocate($im, 255, 255, 255);
    	//填充背景
    	imagefill($im, 0, 0, $gray);
    
    	//画边框
    	imagerectangle($im, 0, 0, $w-1, $h-1, $black);
    
    	//随机绘制两条虚线,起干扰作用
    	$style = array ($black,$black,$black,$black,$black,
    		$gray,$gray,$gray,$gray,$gray
    	);
    	imagesetstyle($im, $style);
    	$y1 = rand(0, $h);
    	$y2 = rand(0, $h);
    	$y3 = rand(0, $h);
    	$y4 = rand(0, $h);
    	imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED);
    	imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED);
    
    	//在画布上随机生成大量黑点,起干扰作用;
    	for ($i = 0; $i < 80; $i++) {
    		imagesetpixel($im, rand(0, $w), rand(0, $h), $black);
    	}
    	//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
    	$strx = rand(3, 8);
    	for ($i = 0; $i < $num; $i++) {
    		$strpos = rand(1, 6);
    		imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);
    		$strx += rand(8, 12);
    	}
    	imagepng($im);//输出图片
    	imagedestroy($im);//释放图片所占内存
    }

    代码中,自定义函数getCode()诠释了验证码的生成过程。运用PHP GD库自带的图像处理函数,能轻松生成各种想要的图片效果。

    imagecreate():创建一个新图像

    imagecolorallocate():为图像分配颜色

    imagefill():填充图像

    imagerectangle():画一个矩形(边框)

    imagesetstyle():设置画线风格

    imageline():画一条线段

    imagesetpixel():画点像素

    imagepng():以PNG格式将图像输出到浏览器或文件

    imagedestroy():释放图片所占内存

    将上述代码保存为code_num.php,以便调用。

    Ajax刷新和验证

    验证码生成后,我们要在实际的项目中应用,通常我们使用ajax可以实现点击验证码时刷新生成新的验证码(有时生成的验证码肉眼很难识别),即“看不清换一张”。填写验证码后,还需要验证所填验证码是否正确,验证的过程是要后台程序来完成,但是我们也可以通过ajax来实现无刷新验证。

    我们建立一个前端页面index.html,载入jquery,同时在body中加入验证码表单元素:

    验证码:


    html代码中,

    $(function(){
    	//数字验证
    	$("#getcode_num").click(function(){
    		$(this).attr("src",'code_num.php?' + Math.random());
    	});
    	...
    });

    刷新验证码,其实就是重新请求了验证码生成程序,这里要注意的是调用code_num.php时要带上随机参数防止缓存。接下来填写好验证码之后,点“提交”按钮,通过$.post(),前端向后台chk_code.php发送ajax请求。

    $(function(){
    	...
    	$("#chk_num").click(function(){
    		var code_num = $("#code_num").val();
    		$.post("chk_code.php?act=num",{code:code_num},function(msg){
    			if(msg==1){
    				alert("验证码正确!");
    			}else{
    				alert("验证码错误!");
    			}
    		});
    	});
    });

    后台chk_code.php验证:

    session_start();
    
    $code = trim($_POST['code']);
    if($code==$_SESSION["helloweba_num"]){
       echo '1';
    }

    后台根据提交的验证码与保存在session中的验证码比对,完成验证。

    对于其他几种验证的生成和使用,其原理一样,开发者可以根据需要,产生多种样式的随机验证码,本文演示demo中提供了数字验证码、数字+字母验证码、中文验证码、仿google验证码,算术验证码等,点击这里看演示demo。限于篇幅,其他几种验证码的生成代码略过,敬请谅解。

    客服中心
    点击进行在线咨询

    QQ咨询 咨询QQ:79929313 咨询QQ:88139574 咨询QQ:122790803

    咨询热线:0871-63399840

    客服热线:0871-63523332

    客服中心 客服中心 云南鼎浩信息技术有限公司 云南鼎浩信息技术有限公司
  • 故事中美两军举行人道主义救援减灾联合实兵演练 2019-08-13
  • 掌握新思想 开拓新实践——深入贯彻落实党的十九大精神系列述评之二 2019-07-30
  • “草原英雄小姐妹”走进山城 2019-07-01
  • 高清:里约奥运会奖牌曝光 大部分由再生材料制成 2019-06-27
  • 在楼主大谈共产主义分配的时候,希望楼主先说明一下对马克思关于共产主义基本原则的理解。一个社会如果仍然存在“按劳动分配”,怎么会是“每一个个人的全面而自由的发展” 2019-06-25
  • 河北法院:打造互联网+诉非衔接的人民法庭工作新机制 2019-06-25
  • 芯片是汽车产业发展的基石  专家呼吁建立"汽车芯片智库" 2019-06-13
  • “高深文学创作回顾研讨会”在北京举行 2019-06-13
  • 江苏专项督查基础教育问题 择校热、大班额成重点 2019-06-08
  • 14599元!索尼A7M3发布:续航翻番、支持4K视频 2019-06-08
  • 首页 春城壹网 七彩云南 一网天下 2019-05-22
  • QFII政策调整引增量资金入场 “成长+大消费”或成布局重点 2019-05-22
  • 密印“农禅”:何以在蛮荒之地举起文明火把(图) 2019-05-18
  • 20180531 袁隆平:海水稻打破纪录,杂交稻走向全球 2019-05-17
  • 晋城:八项重点打好水污染防治攻坚战 2019-05-15
  • 36选7选号技巧帮我选号 内蒙古快3走势图带连线 江苏11选五开奖结果图 福彩双色球走势图浙江 甘肃快三今天预测号 75秒时时彩中奖助手 快乐十分预测 贵州11选5开奖规则 双色球重号走势图2019 好彩3开奖时间 体彩福建36选7第18058期 百变王牌开奖查询 7星彩18059期开奖结果 赛马会六肖期期必中 山西11选5前三直选走势