PHP开发验证码方法
3493阅读
0评论
0点赞
为什么使用验证码
- 防止恶意破解密码、刷票、论坛灌水、刷页。
- 增加一种趣味性
- 环境要求:安装PHP扩展gd库。
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>登陆
title
>
head
>
<
body
>
<
form
action
=
"./login.php"
method
=
"post"
>
<
img
src
=
"image_captcha.php"
onclick
=
"this.src='image_captcha.php?'+new Date().getTime();"
width
=
"200"
height
=
"200"
><
br
/>
<
input
type
=
"text"
name
=
"captcha"
placeholder
=
"请输入图片中的验证码"
><
br
/>
<
input
type
=
"submit"
value
=
"验证"
>
form
>
body
>
html
>
/**
* 字母+数字的验证码生成
*/
// 开启session
session_start();
//1.创建黑色画布
$image
= imagecreatetruecolor(100, 30);
//2.为画布定义(背景)颜色
$bgcolor
= imagecolorallocate(
$image
, 255, 255, 255);
//3.填充颜色
imagefill(
$image
, 0, 0,
$bgcolor
);
// 4.设置验证码内容
//4.1 定义验证码的内容
$content
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
;
//4.1 创建一个变量存储产生的验证码数据,便于用户提交核对
$captcha
=
""
;
for
(
$i
= 0;
$i
< 4;
$i
++) {
// 字体大小
$fontsize
= 10;
// 字体颜色
$fontcolor
= imagecolorallocate(
$image
, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
// 设置字体内容
$fontcontent
=
substr
(
$content
, mt_rand(0,
strlen
(
$content
)), 1);
$captcha
.=
$fontcontent
;
// 显示的坐标
$x
= (
$i
* 100 / 4) + mt_rand(5, 10);
$y
= mt_rand(5, 10);
// 填充内容到画布中
imagestring(
$image
,
$fontsize
,
$x
,
$y
,
$fontcontent
,
$fontcolor
);
}
$_SESSION
[
"captcha"
] =
$captcha
;
//4.3 设置背景干扰元素
for
($
$i
= 0;
$i
< 200;
$i
++) {
$pointcolor
= imagecolorallocate(
$image
, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imagesetpixel(
$image
, mt_rand(1, 99), mt_rand(1, 29),
$pointcolor
);
}
//4.4 设置干扰线
for
(
$i
= 0;
$i
< 3;
$i
++) {
$linecolor
= imagecolorallocate(
$image
, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imageline(
$image
, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29),
$linecolor
);
}
//5.向浏览器输出图片头信息
header(
'content-type:image/png'
);
//6.输出图片到浏览器
imagepng(
$image
);
//7.销毁图片
imagedestroy(
$image
);
/**
* 接受用户登陆时提交的验证码
*/
session_start();
//1. 获取到用户提交的验证码
$captcha
=
$_POST
[
"captcha"
];
//2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
if
(
strtolower
(
$_SESSION
[
"captchaimg"
]) ==
strtolower
(
$captcha
)){
echo
"验证码正确!"
;
$_SESSION
[
"captcha"
] =
""
;
}
else
{
echo
"验证码提交不正确!"
;
}
评论(0)
暂无评论