PHP验证码的制作教程
自己过去自学了PHP绘画验证码的教程,现在就把这一部分笔记跟大家分享,希望可以帮到大家。
顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了。
笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2
下面主要从理论+实践代码进行讲解,后面有代码实例。
一、验证码的介绍
验证码是为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户是计算机和人的公共全自动程序。
二、验证码应用场景?
(都是为了区分人还是机器,屏蔽机器请求)
a)登录、注册确定提交前,做人/机器校验;
b)发布、回复信息前,做人/机器校验;
c)疑似机器请求时,做人/机器校验;
………………
三、验证码服务的核心技术分析
实现步骤:
1.生成底图;
2.生成验证内容;
3.生成验证码图片;
4.校验验证内容;
技术点:
a)底图的实现,并且添加干扰元素;
依赖PHP图片处理库GD
http://php.net/gd
b)生成验证内容
简单的随机数生成,使用PHP函数mt_rand();
随机数字+字母生成,需要ASCII码理论基础;
随机中文生成,需要UTF-8编码理论基础;
c)验证内容保存在服务端;
需要PHP操作SESSION基础
d)验证内容的校验
需要前端Ajax基础;
注意事项:
a)依赖GD扩展
※b)输出图片前,必须提前输出图片header信息;
c)该方法默认输出为黑色背景
从理论部分,然后按步骤进行一步一步的写下面的代码:
验证码的实例:(基本的验证码)
- <?php
- session_start();
- // 先制作底图
- $image = imagecreatetruecolor(100, 30);
- $bgcolor = imagecolorallocate($image, 255, 255, 255);//生成底片颜色,默认为黑色
- imagefill($image, 0, 0, $bgcolor);//x,y轴上的位置
- /*// 在地图上显示随机数字
- for($i=0;$i<4;$i++){
- $fontsize=6;
- $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
- $fontcontent=rand(0,9);//数字0~9
- // 关键的部分 (注意事项:控制好字体大小与分布,避免字体重叠或显示不全)
- $x=($i*100/4)+rand(5,10); //写在的坐标上
- $y=rand(5,10);
- imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
- }
- */
- /* //数字和字母验证码
- for($i=0;$i<4;$i++){
- $fontsize=6;
- $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));
- $data ='abcdefghigkmnpqrstuvwxy3456789';
- $fontcontent=substr($data, rand(0,strlen($data)),1);
- $x=($i*100/4+rand(5,10));
- $y=rand(5,10);
- imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
- }*/
- $captch_code="";
- //字母验证码
- for($i=0;$i<4;$i++){
- $fontsize=6;
- $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));
- $data ='abcdefghigkmnpqrstuvwxy';
- $fontcontent=substr($data, rand(0,strlen($data)),1);
- $captch_code.=$fontcontent;
- $x=($i*100/4+rand(5,10));
- $y=rand(5,10);
- imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
- }
- $_SESSION['authcode']=$captch_code;
- // 添加点的干扰素
- for($i=0;$i<200;$i++){
- $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
- imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);
- }
- // 添加线干扰
- for($i=0;$i<3;$i++){
- $linecolor=imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));
- imageline($image, rand(1,99),rand(1,29), rand(1,99),rand(1,29),$linecolor);
- }
- header('content-type:image/png');//输出png的图片
- imagepng($image);//生成图片
- // 销毁图片
- imagedestroy($image);
- ?>
关于PHP的验证代码部分后,就是配上前端的显示页面代码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>登录</title>
- </head>
- <body>
- <form action="reg.php" method="post">
- <img id="captcha_img" src="verify.php?r=<?php echo rand();?>">
- <a href="javascript:void(0);" onclick="document.getElementById('captcha_img').src='verify.php?+Math.random()';" title="换一个?">看不清?</a><br>
- 验证码:<input type="text" name="authcode">
- <input type="submit" >
- </form>
- </body>
- </html>
上面是数字的验证码,下面的这部分PHP是图片验证码的页面图片验证码的显示:
- <?php
- session_start();
- // 图片的验证码
- $table=array(
- "pic0"=>'狗',
- "pic1"=>'猫',
- "pic2"=>'鱼',
- "pic3"=>'鸟'
- );
- $index=rand(0,3);
- $value=$table['pic'.$index];
- $_SESSION['authcode']=$value;
- $filename=dirname(__FILE__).'\\pic'.$index.'.jpg';//需要自己准备好图片!!
- $contents=file_get_contents($filename); header('content-type:image/jpg'); echo $contents; ?>
下面这个是汉字的显示代码:
- 汉字的验证码:
- <?php
- session_start();
- // 先制作底图
- $image = imagecreatetruecolor(200, 60);
- $bgcolor = imagecolorallocate($image, 255, 255, 255);//生成底片颜色,默认为黑色
- imagefill($image, 0, 0, $bgcolor);//x,y轴上的位置
- $fontface='msyh.ttf';
- $str="刘恒春美女帅哥看这里来好样的我知道了是";
- $strdb=str_split($str,3);//每三个长算一个汉字
- header("content-type:text/html;charset='utf8'");
- $captch_code="";
- //中文验证码
- for($i=0;$i<4;$i++){
- $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120));
- $index=rand(0,count($strdb));
- $cn=$strdb[$index];
- $captch_code.=$cn;
- imagettftext($image, mt_rand(20,24), mt_rand(-60,60), (40*$i+20), mt_rand(30,35),$fontcolor,$fontface,$cn);
- }
- $_SESSION['authcode']=$captch_code;
- // 添加点的干扰素
- for($i=0;$i<200;$i++){
- $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
- imagesetpixel($image, rand(1,199), rand(1,59), $pointcolor);
- }
- // 添加线干扰
- for($i=0;$i<3;$i++){
- $linecolor=imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));
- imageline($image, rand(1,199),rand(1,59), rand(1,199),rand(1,59),$linecolor);
- }
- header('content-type:image/png');//输出png的图片
- imagepng($image);//生成图片
- // 销毁图片
- imagedestroy($image);
- ?>
综上的全部就是验证码代码的总结了,如果有需要可以到我下面的百度云里面下载对应的笔记。
笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2
PHP验证码的制作教程的更多相关文章
- Dash文档制作教程
前言 什么是Dash 面向程序员的文档库(Mac) 代码片段管理工具 这是强烈推荐给每天在各种API文档中摸爬滚打的程序员们的神器. 为什么要自己制作文档 官方的源中没有相关文档 文档在离线下体验更好 ...
- 24个 HTML5 & CSS3 下拉菜单效果及制作教程
下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...
- 10个优秀的 HTML5 & CSS3 下拉菜单制作教程
下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...
- 10个实用的 CSS3 按钮效果制作教程
人们往往喜欢那些有更多互动元素的网站,因此现在很多设计师专注于他们的 CSS3 技能.这是因为 CSS3 技能可以帮助他们在很大的程度上实现所需的吸引力.这里分享的10个优秀的 CSS3 按钮效果制作 ...
- 20个漂亮 CSS3 按钮效果及优秀的制作教程
在这篇文章中,我们编译了一组有用的 CSS3 动画按钮教程和引人注目的实验.正如我们都知道的,CSS3在网页设计方面是最重要和最关键的,可以使您的网站对访客更具吸引力和互动性.你可以学习这些教程和试验 ...
- PPT制作教程:如何制作ppt
PowerPoint(PPT)是专门用于制作演示文稿(俗称幻灯片).广泛运用于各种会议.产品演示.学校教学等.学会如何制作ppt,成为提升工作效 率的好帮手.PPT包含有很多的功能,我们可以根据个人喜 ...
- WordPress主题制作教程5:循环
wordpress循环分两种,一种是自定义循环,一种是默认循环. 自定义循环:根据指定参数进行实例化 调用所有页面,post_type值:page对应页面,post对应文章 <?php $arg ...
- 11个优秀的HTML5 & CSS3下拉菜单制作教程
下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用HTML5和CSS3可以更容易创造视觉 ...
- WordPress插件制作教程(八): 最后总结
WordPress插件教程最后一篇,还是为大家简单的做下总结.这次插件制作教程讲的内容和知识点个人觉得不是很多,因为插件制作不单单是这些内容,它涉及的知识很多很多,不是说你会一些函数就可以做出一个好的 ...
随机推荐
- Mobile game analysis
Let's take a look at a very popular mobile game "Garena 传说对决" . It would be very interesti ...
- javascript 函数和作用域(闭包、作用域)(七)
一.闭包 JavaScript中允许嵌套函数,允许函数用作数据(可以把函数赋值给变量,存储在对象属性中,存储在数组元素中),并且使用词法作用域,这些因素相互交互,创造了惊人的,强大的闭包效果.[upd ...
- 超简单jQuary链式操作代码实现手风琴效果
超简单jQuery代码实现手风琴效果 HTML代码 <div id="cont"> <div> <p>人生若只如初见</p> < ...
- 使用MyEclipse生成实体类和Hibernate映射文件
1.打开MyEclipse DataBase Explorer. 如上图,点击图中2便可切换到MyEclipse DataBase Explorer,若没有该图标,则点击图中1,便可选择MyEclip ...
- [刷题]算法竞赛入门经典(第2版) 5-9/UVa1596 - Bug Hunt
//开学了,好烦啊啊啊啊啊!怎么开个学那么多破事情!!都俩星期了,终于有时间写出来一道题 题意:不难理解,不写了.这几天忙的心累. 代码:(Accepted, 0.010s) //UVa1596 - ...
- CVE-2014-0038内核漏洞原理与本地提权利用代码实现分析 作者:seteuid0
关键字:CVE-2014-0038,内核漏洞,POC,利用代码,本地提权,提权,exploit,cve analysis, privilege escalation, cve, kernel vuln ...
- WPF学习随笔
内容控件 Padding内边距,Margin外边距 1.ScrollViewer滚动条控件 <ScrollViewer VerticalScrollBarVisibility="Vis ...
- 跟随上次的socket sever,追加Tcplistener、Httplistener的server
一.Tcplistener搭建web server 1.同socket类似,Tcplistener其实是对socket的封装,方便编程,先初始化tcplistener并且开始监听 //初始化端点信息 ...
- React入门---开始前的准备(上)-2
开始前准备: 1.安装配置nodeJs(nodeJS官网) 检查安装成功: node -v npm -v 2.使用NPM配置React开发环境 (1). 创建项目文件夹(创建文件夹时,文件夹名不要起为 ...
- DDD理论学习系列(2)-- 领域
DDD理论学习系列目录 1. 引言 领域一词,主要有以下两个意思: 一国主权所达之地. 学术思想或社会活动的范围. 不管是指国家的主权范围也好还是学术活动范围,都是在讲一个范围,一个界限. 比如我们常 ...