基于PHP制作验证码


Posted in PHP onOctober 12, 2016

网站注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,为了防止网站被机器恶意注册。

生成验证码无非就那么几个步骤,首先是获取一个随机字符串,然后创建一个布画,将生成的字符串写到布画上,我们还可以在布画上画线画雪花,现在帖一段生成验证码的代码。

源代码:

<?php
session_start(); //开启session
//创建随机码,并保存在session中
for($i=0;$i<4;$i++)
{
$_nmsg.=dechex(mt_rand(0,15));
}
//保存到session中
$_SESSION['code']=$_nmsg;
//设置图片长和高

$_width=75;
$_height=25;
//创建一张图像
$_img=imagecreatetruecolor($_width,$_height);

//白色背景
$_white=imagecolorallocate($_img,255,255,255);
//填充到背景上
imagefill($_img,0,0,$_white);

//黑色边框
$_black=imagecolorallocate($_img,0,0,0);
imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

//随即画出5个线条
for($i=0;$i<5;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}

//雪花
for($i=0;$i<10;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",$_rnd_color);
}

//输出验证码

for($i=0;$i<strlen($_SESSION['code']);$i++)
{
imagestring($_img,5,10+$i*15,mt_rand(0,10),$_SESSION['code'][$i],$_blackr);
}

//输出图像
header('Content-Type:image/png');
imagepng($_img);
//销毁图像
imagedestroy($_img);
?>

代码中将使用以下函数:

mt_rand — 生成更好的随机数
int mt_rand ([ int $min ], int $max )很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。

mt_rand()函数是非正式用来替换它的。该函数用了Mersenne Twister中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。

dechex — 十进制转换为十六进制返回一字符串,包含有给定 number参数的十六进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 "ffffffff"。

imagecreatetruecolor — 新建一个真彩色图像
resource imagecreatetruecolor ( int $x_size , int $y_size )

imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

imagecolorallocate — 为一幅图像分配颜色
int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate()必须被调用以创建每一种用在 image 所代表的图像中的颜色。

imagefill — 区域填充
bool imagefill ( resource $image , int $x , int $y , int $color )
imagefill() 在 image图像的坐标 x,y(图像左上角为 0, 0)处用 color颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。

imagerectangle — 画一个矩形
bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
imagerectangle() 用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。

imageline — 画一条线段
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
imageline() 用 color颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。

imagestring — 水平地画一行字符串
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
imagestring() 用 col颜色将字符串 s 画到 image所代表的图像的 x,y坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。

imagepng — 以 PNG 格式将图像输出到浏览器或文件
imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。

imagedestroy — 销毁一图像

imagedestroy() 释放与 image 关联的内存。

将源代码保存为code.php是个php文件,我们该如何使用他呢?

imagepng已经将这个php文件输出成了png文件

直接调用就可以了

<img src="mycode.php"/>

如果要使用验证码,记得开启session哦

<?php
session_start();
echo $_SESSION['code'];
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP asXML()函数讲解
Feb 03 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
实现PHP搜索加分页
Oct 12 #PHP
如何使用PHP给图片加水印
Oct 12 #PHP
php版微信数据统计接口用法示例
Oct 12 #PHP
php版微信js-sdk支付接口类用法示例
Oct 12 #PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 #PHP
如何使用php等比例缩放图片
Oct 12 #PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 #PHP
You might like
PHP Token(令牌)设计
2008/03/15 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
python实现求最长回文子串长度
2018/01/22 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
局域网标准
2016/09/10 面试题
我们的节日中秋活动方案
2014/08/19 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
酒桌上的开场白
2015/06/01 职场文书
七年级作文之游记
2019/12/11 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫