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 相关文章推荐
通过ICQ网关发送手机短信的PHP源程序
Oct 09 PHP
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
解析isset与is_null的区别
Aug 09 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php密码生成类实例
Sep 24 PHP
smarty缓存用法分析
Dec 16 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
如何在PHP中生成随机数
Jun 04 PHP
PHP中SESSION过期设置
Mar 09 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
php实现的递归提成方案实例
2015/11/14 PHP
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
Python输出带颜色的字符串实例
2017/10/10 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python os用法总结
2018/06/08 Python
浅谈python之新式类
2018/08/12 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
高中英语教学反思
2014/02/04 职场文书
办公室副主任职责范本
2014/03/08 职场文书
学历公证书范本
2014/04/09 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
致运动员加油稿
2015/07/21 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
Go语言测试库testify使用学习
2022/07/23 Golang