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 相关文章推荐
MySQL数据源表结构图示
Jun 05 PHP
php生成SessionID和图片校验码的思路和实现代码
Mar 10 PHP
php 高效率写法 推荐
Feb 21 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
组合算法的PHP解答方法
Feb 04 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
php动态添加url查询参数的方法
Apr 14 PHP
PHP实现简单数字分页效果
Jul 26 PHP
Yii框架表单模型和验证用法
May 20 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 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
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
jQuery :first选择器使用介绍
2013/08/09 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
python生成随机图形验证码详解
2017/11/08 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
欧克利英国官网:Oakley英国
2019/08/24 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
2014政务公开实施方案
2014/02/19 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
教师节校长致辞
2015/07/31 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
Redis分布式锁的7种实现
2022/04/01 Redis