PHP图片验证码制作实现分享(全)


Posted in PHP onMay 10, 2012

就如今天遇到随即函数rand();脑海中想到用它做点啥好呢,最后想起了验证码,数字验证码,字母验证码,中文验证码,可是自己不会呀,咋办呢,上网搜,看别人的代码,开不懂,看视频,听老师讲,将其中所遇到的函数,值得注意的地方都拿笔记下,平常看到一般网页上的随机验证码都是以一定的方框包围起来,貌似就是以图片为背景的。经过边看,自己边敲,虽然遇到很多不会的问题,但是我相信只要自己脚踏实地,一定学会的。现在想做一下总结,自己可能写的很乱,可我相信有一天会实现的。1.产生数字的随机数 ——》创建图片——》随机数写进图片——》在图片加入干扰值(点,线)——》保持在session中——》在form表单中引用;随机函数:rand(int min,int max);万变不离其宗,我看了网上许多中生成随机数的代码,有数字和字母随机数,中文随机数(数组)等等;都离不开rand();代码如下(有的上网copy,希望各位不要见怪啊第一种:

$authnum=''; 
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; 
$list=explode(",",$ychar);//分割函数 
for($i=0;$i<4;$i++){ 
$randnum=rand(0,35); 
$authnum.=$list[$randnum];//以数组的形式输出

第二种:
private function createCheckCode() 
{ 
for(i=0;i<this->codeNum;i++) 
{ 
number = rand(0,2); 
switch(number) 
{ 
case 0: rand_number = rand(48,57); break;//数字 
case 1: rand_number = rand(65,90);break;//大写字母 
case 2: rand_number = rand(97,122);break;//小写字母 
} 
$asc = sprintf("%c",rand_number); 
$asc_number = asc_number.asc; 
} 
return asc_number; 
}

第三种:
srand(microtime()*100000);//相当于计时器 
$string="abcdefghigklmnopqrstuvwxyz123456789"; 
for($i=0;$i<4;$i++) 
{ 
$new_number.=$string[rand(0,strlen($string)-1)];//随即的产生一个数组 
}

第四种:
for($i=0;$i<4;$i++) 
{ 
$rand.=dechex(rand(1,15));//将十进制转化为十六进制 
}

GD库:(提供了一系列图片处理函数的IPI,生成图片处理图片)
启用php中GD库:php.ini配置文件中,去掉";extension=php_gd2.dll"中“;”;
部分GD库函数的介绍:1.imagecreatetruecolor(int x_size,int Y_size) 新建真彩色图像
2.imagecolorallocate(resource image,int red,int green,int blue) 为一幅图像分配颜色,三原色
3.imagestring(resource,font,int x,int y,content,color)绘图函数4.header("Content-type:image/jpeg") 输出函数php的header是定义头的动作,php5中支持3中类型: 1,Content-type:xxxx/yyyy 2,Location:xxxx:yyyy/zzzz 3,Status:nnn xxxxxx xxxx/yyyy表示内容文件的类型 如:image/gif image/jpeg image/png imagejpeg(),imagegif(),imagepang() 5.iamgeline(resource image,int x1,int y1,int x2,int y2,int color); 画线函数,(int x,int y)起始坐标6.imagesetpixel(resource image,int x,int y,int color) 画点函数7.imagettftext(resource image,float size,float angle,int x,int y,int color,string fontfile,string text) 带字体写入函数8.iconv("gb2312","utf-8","字符串"); //首先要将文字转换成utf-8格式 php验证码插入中文的方法。

随机生成数字,字母的代码:

<?php 
//che.php 
session_start(); 
for($i=0;$i<4;$i++) 
{ 
$rand.=dechex(rand(1,15)); 
} 
$_SESSION['check_num']=$rand; 
$image=imagecreatetruecolor(50,30); 
$bg=imagecolorallocate($im,0,0,0);//第一次用调色板的时候,背景颜色 
$te=imagecolorallocate($im,255,255,255); 
imagestring($image,6,rand(0,20),rand(0,2),$rand,$te); 
ob_clean();//PHP网页中因为 要生成验证码而出现 图像"http://localhost/**.php"因其本身有错无法显示 
header("Content-type:image/jpeg"); imagejpeg($image); 
?>

给图片画出干扰线代码:
for($i=0;$i<8;$i++)//画出多条线 
{ 
$cg=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));//产生随机的颜色 
imageline($im,rand(10,40),0,rand(10,40),20,$cg); 
}

给图片画出干扰点的代码:
for($i=0;$i<80;$i++)//画出多个点 
{ 
imagesetpixel($im,rand(0,40),rand(0,20),$cg); 
}

把文字写入图片代码:
$str=array('我','我','亲','亲');//存储显示的汉字 
for($i=0;$i<4;$i++) 
{ 
$sss.=$str[rand(0,3)];//随机显示汉字 
} //$str=iconv("gb2312","utf-8",$str); //汉字编码转化,我的好像不需要 
imagettftext($im,10,0,rand(5,60),rand(5,60),$te,"simhei.ttf",$sss);//

0:字体的倾斜度,“simhei.ttf”:字体样式,一般放在根目录下;
PHP 相关文章推荐
PHP iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP SOCKET编程详解
May 22 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 PHP
laravel入门知识点整理
Sep 15 PHP
php array的学习笔记
May 10 #PHP
php 中的4种标记风格介绍
May 10 #PHP
php中常用的预定义变量小结
May 09 #PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 #PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 #PHP
PHP中数组的三种排序方法分享
May 07 #PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 #PHP
You might like
微信接口生成带参数的二维码
2017/07/31 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
JavaScript类的写法
2016/09/17 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
原生JS实现N级菜单的代码
2017/05/21 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
网络体系结构及协议的定义
2014/03/13 面试题
公积金转移接收函
2014/01/11 职场文书
优秀员工评语
2014/02/10 职场文书
投标承诺书范本
2014/03/27 职场文书
爱我中华教学反思
2014/04/28 职场文书
小学生校园广播稿
2014/09/28 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
用电申请报告范文
2015/05/18 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
Javascript设计模式之原型模式详细
2021/10/05 Javascript