基于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 相关文章推荐
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
php一次性删除前台checkbox多选内容的方法
Sep 22 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
php外部执行命令函数用法小结
Oct 11 PHP
php常用数组函数实例小结
Dec 29 PHP
php7下的filesize函数
Sep 30 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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变量范围介绍
2012/10/15 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Python xlwt模块使用代码实例
2020/06/10 Python
大学生四年生活自我鉴定
2013/11/21 职场文书
暑期实习鉴定
2013/12/16 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL