基于PHP的验证码生成案例
基于PHP的验证码生成案例
PHP 其它杂项
访问GitHub主页
共1Star
详细介绍
验证码实现案例
http://www.imooc.com/video/1679
参考来源:验证码实现的步骤
- 生成底图
- 生成验证内容
- 生成验证码图片
- 效验验证内容
核心功能的技术难点
- 底图的实现,并添加干扰元素
- 需要依赖PHP图片处理库GD
- 生成验证内容
- 简单的随机数生成,可以使用PHP函数mt_rand()
- 随机数字 + 字母生成,需要使用ASCII编码理论
- 随机中文内容生成,需要UTF-8编码理论基础
- 验证内容保存在服务端
- 需要PHP操作SESSION
- 验证内容的效验
- 需要前台的Ajax效验
开发前的准备
- 安装PHP的运行环境
- 检测PHP是否支持GD,可以使用phpinfo()查看
实现验证码底图
- GD可以参考PHP Manual手册
- 注意事项:
- 图片底图生成依赖GD扩展
- 输出图片前,必须提前输出图片head信息
- 使用imagecreatetruecolor()创建真彩色图像默认背景为黑
- 参考文件:captcha_randNum.php
- 参考代码
实现随机数字验证码内容
- 注意事项:
- 控制好字体大小和分布情况,避免字体重叠和显示不全
- 做好字体颜色的变换,可以控制RGB在0-120之内,深色区段
- 增加干扰元素(点、线),同时要控制好颜色,避免“喧宾夺主”
- 参考文件:captcha_randNumOrChar.php
- 参考代码
通过SESSION存储验证信息
-
注意事项:
- session_start()必须处于脚本的最顶端
- 多服务器的情况下,可以采用集中管理SESSION信息
-
参考文件:captcha_randNumOrCharSession.php
-
参考代码
session_start(); //处于最顶部,初始化 $captch_code = ""; ... $captch_code .= $fontcontent; //进行拼接 ... $_SESSION["leyiweb"] = $captch_code; //将验证码内存保存到SESSINO
验证效验
- 验证分为三部分
- 生成验证码以及保存SESSION的PHP文件
- 前端用户输入界面(引用验证码PHP)
- 后端效验接口,对SESSION和RESQUEST超全局变量的值进行效验
- 注意事项:
- 文件需要引用正确
- 前端input框的name是用于后端接收的,需要设置好
- 用户一般输入字符是不分大小写,验证码字典中采用全小写,需要将用户的输入进行大小写转换后进行效验
- 参考文件:form.php validate.php captcha_randNumOrCharSession.php
- 参考代码:见源代码文件
动态效验
- 问题探究:
- 很多时候机器生产的验证码很难被识别,一般都会设置让用户更换验证码的操作
- 更换事件是都过js实现的,当图片被点击进行更换验证码的src
- 为了保证js能够更换验证码的src,验证码的URL设置为http://xx.xxx.xx/x.png?r=rand(),只需更换r的值即可
- 参考文件:form.php validate.php captcha_randNumOrCharSession.php
- 参考代码:见源代码文件
复杂验证码的实现
中文验证码的实现
- 实现与之前的类似,核心在替换验证码内容部分为中文
- 注意事项:
- GBK编码时,需要将中文通过iconv()转换为UTF-8
- 选用的TTL文件需要支持中文,TTL文件可以到控制面板底下查找
- 一个中文汉字在UTF-8下需要占用三个字节
- 参考文件:form.php validate.php captcha_randZh.php
- 参考代码:
编辑于2017.8.7
推荐源码
暂无源码 更多源码...