基于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 相关文章推荐
php 什么是PEAR?
Mar 19 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
Yii分页用法实例详解
Dec 04 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
php传值方式和ajax的验证功能
Mar 27 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 PHP
PHP微信发送推送消息乱码的解决方法
Feb 28 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 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中file_exists函数使用详解
2015/05/08 PHP
PHP curl使用实例
2015/07/02 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
Python Socket传输文件示例
2017/01/16 Python
python机器学习之随机森林(七)
2018/03/26 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
西尔斯百货官网:Sears
2016/09/06 全球购物
求职者简历中的自我评价
2013/10/20 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
2014年党支部承诺书
2014/05/30 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
班级文化建设标语
2014/06/23 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python