php验证码实现
来源:互联网 发布:刮骨疗伤是真的吗 知乎 编辑:程序博客网 时间:2024/06/07 13:50
原文链接:http://www.qqdeveloper.com/a/54.html
什么是验证码?
借用百度的解释:验证码这个词最早是在2002年由卡内基梅隆大学的路易斯·冯·安、Manuel Blum Nicholas J.Hopper以及IBM的John Langford所提出。卡内基梅隆大学曾试图申请此词使其成为注册商标, 但该申请于2008年4月21日被拒绝。一种常用的CAPTCHA测试是让用户输入一个扭曲变形的图片上所显示的文字或数字,扭曲变形是为了避免被光学字符识(OCR, Optical Character Recognition)之类的电脑程序自动辨识出图片上的文数字而失去效果。由于这个测试是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,人们有时称CAPTCHA是一种反向图灵测试。
常见的验证码哪些?
图像类型、语音类型、视频类型、短信类型等。下面分享几种实际案例中的图片示例。
使用验证码的好处在哪里?
要说到使用验证码的好处,这肯定是很多的,总结以下几点。
防止恶意的破解密码。如一些黑客为了获取到用户信息,通过不同的手段向服务器发送数据,验证猜测用户信息的准确性。
防止恶意的刷票,论坛灌水。这种在论坛中长期存在灌水的现象,比如贴吧,不断发送帖子。现在百度贴吧已经针对用户发帖的时间做了一个时间的限制,当一定时间内发帖过多是无法继续发帖的。
防止恶意的请求。如用户提交一个表单信息,通过不断向后台请求数据信息造成服务器资源的浪费,以及恶意的攻击。
趣味性。这一点属于个人观点,当我们提交表单的时候,如遇到一些有趣的验证码方式,能够增强用户对网站的喜爱程度。
获取用户信息。这一点在现目前的站点中是屡见不鲜的事情了。如我们注册一个站点的账号,需要通过手机验证码才可以注册成功。网站在拿到用户的电话号码之后会给手机号主发送一些营销信息。
环境配置
只需要本地安装了PHP的GD扩展库即可使用。如何查看呢,创建一个PHP文件在该文件中写入<?php phpinfo();?>,访问该文件,如果查看到了GD库已经安装了,则可以使用。没有的,自行安装,百度很多教程。
相关函数手册参考PHP官方链接 http://php.net/manual/zh/ref.image.php
具体代码实现
1.我们先创建一个html页面显示验证码
<!
DOCTYPE
html>
<
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
>
2.创建一个PHP文件,接受前端页面传入的验证码信息
<?php
/**
* 接受用户登陆时提交的验证码
*/
session_start();
//1. 获取到用户提交的验证码
$captcha
=
$_POST
[
"captcha"
];
//2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
if
(
strtolower
(
$_SESSION
[
"captchaimg"
]) ==
strtolower
(
$captcha
)){
echo
"验证码正确!"
;
$_SESSION
[
"captcha"
] =
""
;
}
else
{
echo
"验证码提交不正确!"
;
}
3.创建验证码生成PHP文件
<?php
/**
* 字母+数字的验证码生成
*/
// 开启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
);
更改内容可以关注微信公众号:小7带你玩编程
- php实现验证码
- PHP实现验证码
- PHP实现验证码
- PHP实现验证码
- php实现验证码
- php实现验证码
- PHP实现验证码
- PHP---验证码实现
- php验证码实现
- 【PHP】验证码实现
- php实现验证码
- PHP验证码实现
- PHP实现验证码
- php 实现验证码
- php 验证码实现
- php验证码实现
- PHP 实现验证码
- PHP实现验证码
- sweetalert使用
- HDU 3613 Manacher
- httpError: The Http Transport returned a 0 status code
- java语言程序设计 第十一章 11.3
- JAVA 编程规范
- php验证码实现
- 第一章
- 1701H5 范江睿 10月12日 连续第二天总结
- 腾讯云免费SSL与Tomcat8的集成
- 设计模式学习起点 UML类图笔记
- bzoj 4709: [Jsoi2011]柠檬(分段DP+决策单调性)
- spark wordcount
- 数据结构及算法(Python)---队列
- 情商不合格,只能成为人工智能的人体 API 接口了