您正在使用IPV4(3.215.79.204)访问本站 您本次共访问本站 1 次
 用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]文明驾车我带头,文明行路我带头,礼貌让座我带头      

【腾讯云】618采购季来袭!爆款云服务器18元起,参与活动享多重好礼      
[公益] 节省一分零钱 献出一份爱心 温暖世间真情      
2022年 情人节 35
2022年 中秋节 72
2023年 元 旦 185
2023年 春 节 206
 
本类新增
本类热门文章
您现在的位置:首页 >> PHP >> 内容
php实现自动生成验证码的实例讲解
内容摘要: 新建一个cap_sz.php文件:?phpsession_start();//设置session,一定要在顶部$width=150;//设置图片宽为300像素$height=40;//设置图片高为40像素$image=imagecreatetruecolor($width,$height);//设置验证码大小的函数$bgcolor=imagecolorall......
新建一个cap_sz.php文件:

<?php

session_start();//设置session,一定要在顶部

$width=150;//设置图片宽为300像素

$height=40;//设置图片高为40像素

$image=imagecreatetruecolor($width,$height);//设置验证码大小的函数

$bgcolor=imagecolorallocate($image,255,255,255);//验证码颜色RGB为(255,255,255)#ffffff

imagefill($image,0,0,$bgcolor);//区域填充

$cap_code="";

for($i=0;$i<4;$i++){

$fontsize=7;//设置字体大小

$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));

//数字越大,颜色越浅,这里是深颜色0-120

$fontcontent=rand(0,9);

$cap_code.=$fontcontent;//.=连续定义变量

$x=($i*150/4)+rand(5,10);

$y=rand(5,10);

//设置坐标

imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);

}

$_SESSION['code']=$cap_code;//存到session

//设置干扰元素,设置雪花点

for($i=0;$i<300;$i++){

$inputcolor=imagecolorallocate($image,rand(50,200),rand(20,200),rand(50,200));

//设置颜色,20-200颜色比数字浅,不干扰阅读

imagesetpixel($image,rand(1,149),rand(1,39),$inputcolor);

//画一个单一像素的元素

}

//增加干扰元素,设置横线(先设置线的颜色,在设置横线)

for($i=0;$i<4;$i++){

$linecolor=imagecolorallocate($image,rand(20,220),rand(20,220),rand(20,220));

//设置线的颜色

imageline($image,rand(1,149),rand(1,39),rand(1,299),rand(1,149),$linecolor);

}

//因为有些浏览器,访问的content-type会是文本型(乱码),所以我们需要设置成图片的格式类型

header('Content-Type:image/png');

imagepng($image);//建立png函数

imagedestroy($image);//结束图形函数,消除$image

实例扩展:

<?php

$iC=newidCode(5,60,30);

$iC->createPNG();

classidCode{

private$words=array('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','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',

'0','1','2','3','4','5','6','7','8','9');

private$fonts;

private$count;//验证码字符数

private$height;

private$width;

private$path='..\myfolder\fonts';

private$keys;

//构造函数

publicfunction__construct($count,$width,$height){

$this->count=$count;

$this->getFonts();

$this->height=$height;

$this->width=$width;

}

privatefunctiongetFonts(){

$dir=dir($this->path);

while(false!==($file=$dir->read())){

if($file!='.'&&$file!='..'){

$this->fonts[count($this->fonts)]=basename($file);

}

}

$dir->close();

}

privatefunctioncreateKeys(){

for($i=0;$i<$this->count;$i++){

$this->keys[$i]['char']=$this->words[rand(0,count($this->words)-1)];

//使用字体路径标识

$this->keys[$i]['filename']=$this->path.'\\'.$this->fonts[rand(0,count($this->fonts)-1)];

}

}

publicfunctioncreatePNG(){

$this->createKeys();

//创建画布以及颜色块儿

$bg=imagecreatetruecolor($this->width+10*2,$this->height+3*2);//两边留10px空白,上下3px

$grey=imagecolorallocate($bg,155,155,155);

$blue=imagecolorallocate($bg,0x00,0x00,0xff);

//填充背景

imagefill($bg,0,0,$grey);

//添加字符

$pwidth=$this->width/$this->count;

$x;$y;

for($i=0;$i<$this->count;$i++){

$rotation=rand(-40,40);//偏转角度±40°

$fontsize=33;

$width_txt;

$height_txt;

do{

$fontsize--;

$bbox=imagettfbbox($fontsize,$rotation,$this->keys[$i]['filename'],$this->keys[$i]['char']);

$width_txt=$bbox[2]-$bbox[0];//x0246,y1357;左下,右下,右上,左上

$height_txt=$bbox[7]-$bbox[1];

}while($fontsize>8&&($height_txt>$this->height||$width_txt>$pwidth));

$fontcolor=imagecolorallocate($bg,rand(0,255),rand(0,255),rand(0,255));

$x=8+$pwidth*$i+$pwidth/2-$width_txt/2;//x坐标基本位置

$y=$this->height/2-$height_txt/2;

imagettftext($bg,$fontsize,$rotation,$x,$y,$fontcolor,$this->keys[$i]['filename'],$this->keys[$i]['char']);

}

//绘制干扰线

//根据字体酌情增加干扰线

imageline($bg,0,15,40,10,$blue);

//图像输出头文件

header('Content-type:image/png');

//输出png图像

imagepng($bg);

//清除缓存资源

imagedestroy($bg);

}

publicfunctioncheckKeys($input){

if(count($input)!=$this->count){

return'ERROR:长度不正确.';

}else{

for($i=0;$i<$this->count;$i++){

//0oOIl1校准,根据所选择的字体确定是否需要手动校准

if($input[$i]!=$this->keys[$i]['char']){

return'SUCCESS.';

}else{

return'ERROR:请输入正确验证码.';

}

}

}

}

}

?>

上一篇:php访问对象中的成员的实例方法 下一篇:PHP将amr音频文件转换为mp3格式的
发布日期:2022/5/15
手机扫二维码直达本页
发布时间:15:34:31
点击:7
录入:齐天大圣
相关文章
Baidu

YiJiaCMS 6.3.0.220527(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,百度云加速提供加速防护
Copyright©2000-2022