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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
php 购物车的例子
May 04 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
编写php应用程序实现摘要式身份验证的方法详解
Jun 08 PHP
php动态生成函数示例
Mar 21 PHP
PHP经典面试题集锦
Mar 19 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 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
PHP句法规则详解 入门学习
2011/11/09 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
类之Prototype.js学习
2007/06/13 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
python3.x上post发送json数据
2018/03/04 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
房屋租赁合同协议书范本
2014/10/19 职场文书
员工开除通知书
2015/04/25 职场文书
交通处罚决定书
2015/06/24 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python