基于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中使用Oracle数据库(6)
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
php之readdir函数用法实例
Nov 13 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
php实现微信发红包
Dec 05 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
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在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
scrapy爬虫完整实例
2018/01/25 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
基于python实现操作redis及消息队列
2020/08/27 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
英文翻译的自我评价语句
2013/10/04 职场文书
生物制药毕业生自荐信
2013/10/16 职场文书
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
班干部演讲稿
2014/04/24 职场文书
生物工程专业求职信
2014/09/03 职场文书
先进党支部申报材料
2014/12/24 职场文书
四年级小学生评语
2014/12/26 职场文书
向女朋友道歉的话
2015/01/20 职场文书
监守自盗观后感
2015/06/10 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python
js作用域及作用域链工作引擎
2022/07/07 Javascript