①?新建code.php验证码生成文件
php
session_start();
//生成验证码图片
Header("Content-type: image/PNG");
imagefill($im,0,0,$back); //背景
srand((double)microtime()*1000000);
$vcodes.=$authnum;
}
for($i=0;$i100;$i◆◆) //加入干扰象素
{
imagesetpixel($im, rand()p , rand()0 , $randcolor);
ImagePNG($im);
ImageDestroy($im);
$_SESSION['Checknum'] = $vcodes;
② 显示验证码图片
在需要显示验证码的页面中加入
input type="text" name="passcode"
img src="code.php"
③判断并获取验证码的值
验证码是通过第一步骤代码中的$_SESSION['Checknum'] = $vcodes;赋的值,所以验证码的值存在$_SESSION['Checknum']当中.在验证页面,使用以下代码,
...
session_start();//启动会话
$code=$_POST["passcode"];
if( $code == $_SESSION["Checknum"])
{...}即可完成验证码登录.
运行截图:
望采纳,谢谢
PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中.PHP生成验证码的大致流程有:
①.、产生一张png的图片;
②.、为图片设置背景色;
③.、设置字体颜色和样式;
⑤.、把产生的每个字符调整旋转角度和位置画到png图片上;
⑥.、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;
⑦.、输出图片;
⑧.、释放图片所占内存.
session_start();?
function?getCode($num,$w,$h)?{?
$code?=?"";?
for?($i?=?0;?$i?$num;?$i◆◆)?{?
}?
//将生成的验证码写入session,备验证时用?
$_SESSION["helloweba_num"]?=?$code;?
//创建图片,定义颜色值?
header("Content-type:?image/PNG");?
$im?=?imagecreate($w,?$h);?
$black?=?imagecolorallocate($im,?0,?0,?0);?
//填充背景?
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);?
//在画布上随机生成大量黑点,起干扰作用;?
imagesetpixel($im,?rand(0,?$w),?rand(0,?$h),?$black);?
//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成?
imagepng($im);//输出图片?
imagedestroy($im);//释放图片所占内存?
验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码.好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下php实现验证码.正所谓,技多不压身.而且,也可以封装成一个函数,以后使用的时候也是很方便的,当然现在未封装.
现在来说说简单的纯数字验证码吧.
如果是初学者,建议按照我代码的注释 //数字 一步步来.最简单的方法,还是把整个代码复制走了.
新建一个captcha.php:
php //10设置session,必须处于脚本最顶部
imagefill($image, 0, 0, $bgcolor); //10设置变量
//设置字体颜色,随机颜色
//设置数字
$captcha_code .= $fontcontent;
//设置坐标
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
} //10存到session
//imagesetpixel — 画一个单一像素
imagedestroy($image);
接着就是静态页的代码了:index.html
doctype htmlhtml
head
title确认验证码title
body
form method="post" action="./form.php"
p
P请输入验证码:input type="text" name='authcode' value=''/p
bodyhtml
从index.html可以看到,提交的表单是到form.php的,所以还要有一个判断的form.php代码:
//isset()检测变量是否设置
if(isset($_REQUEST['authcode'])){ session_start(); //strtolower()小写函数
if(strtolower($_REQUEST['authcode'])== $_SESSION['authcode']){ //跳转页面
echo "script language=\"javascript\""; echo "document.location=\"./form.php\""; echo "/script";
}else{ //提示以及跳转页面
echo "script language=\"javascript\""; echo "alert('输入错误!');"; echo "document.location=\"./form.php\""; echo "/script";
} exit();
废话不多说了,拉代码吧.
//设置需要随机取的值,去掉容易出错的值如0和o
$fontcontent = substr($data, rand(0,strlen($data)),1); //10.=连续定义变量
其他的两个页面,不许要修改.
一般而言,现在就已经够用了.但是就像动漫一样,总会有番外.
那么,我们来个汉字的番外吧.其实我也准备将汉字的验证码放到我的毕业设计里面,虽然现在很流行滑动验证码,但是本人毕竟不是专门学习js的.
php //11设置session,必须处于脚本最顶部
session_start(); //1设置验证码图片大小的函数
//11
//随机选取中文
$in = rand(0,count($strdb)); $cn = $strdb[$in]; //将中文记录到将保存到session的字符串中
$captcha_code .= $cn; /*imagettftext (resource $image ,float $size ,float $angle ,int $x ,int $y,int $color,
string $fontfile ,string $text ) 幕布 ,尺寸,角度,坐标,颜色,字体路径,文本字符串
mt_rand()生成更好的随机数,比rand()快四倍*/
} //11存到session
} //10增加干扰元素,设置线
其他的页面也是不需要修改的.
效果图如下:
你访问?http://你地址/上述程序的文件名.php?action=verifycode
这样就可以看到图片了,同理插入到登录框用
img?src="http://你地址/上述程序的文件名.php?action=verifycode"/
就可以了
-------------------------
leboc代码你都没看懂,$_GET["action"]=="verifycode"?是判断动作的,当动作为verifycode的时候调用rand_create()函数产生一个随机验证码.不是你说的
"每个验证码不会都是"verifycode"?吧?".而是每次调用验证码都要用verifycode
补充回答-----------------------------------
弹出迅雷?请确认你的电脑支持PHP,的运行环境.
我用你的代码保存为c.php,保存在服务器上,
同时,建立一个1.html,代码内容仅为
img?src="c.php?action=verifycode"/.存放与c.php同一目录.
运行后是可以正常显示验证码的.
以上就是土嘎嘎小编为大家整理的php编程每天必学之验证码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!