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数据库操作面向对象的优点
Oct 09 PHP
杏林同学录(三)
Oct 09 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
Zend Framework动作助手Url用法详解
Mar 05 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP数组常用函数实例小结
Aug 20 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python下Fabric的简单部署方法
2015/07/14 Python
Python实现图片转字符画的示例
2017/08/22 Python
python简单商城购物车实例代码
2018/03/15 Python
Python中is和==的区别详解
2018/11/15 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
Django数据库操作之save与update的使用
2020/04/01 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
地陪导游欢迎词
2015/01/26 职场文书
企业战略合作意向书
2015/05/08 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server