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 相关文章推荐
PHP4实际应用经验篇(6)
Oct 09 PHP
PHP 的几个配置文件函数
Dec 21 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
php动态添加url查询参数的方法
Apr 14 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php四种定界符详解
Feb 16 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 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
destoon设置自定义搜索的方法
2014/06/21 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
PHP实现货币换算的方法
2014/11/29 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
2014年单位植树节活动方案
2014/03/23 职场文书
学校交通安全责任书
2014/08/25 职场文书
2014年团队工作总结
2014/11/24 职场文书
小学生思想品德评语
2014/12/31 职场文书
志愿者个人总结
2015/03/03 职场文书
2016年学校招生广告语
2016/01/28 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python