php ---验证码

<?php

require_once 'string.func.php';

//通过GD库 做验证码
function verify($type=1,$length=4,$sess_name="verify"){
//创建画布
$width=80;
$height=30;
//创建一个真彩色图像 返回一个图像标识符
$image=imagecreatetruecolor($width,$height);
/*
imagecolorallocate 为一副图像分配颜色
imagecolorallocate() 返回一个标识符,代表了由给定的 RGB
 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。
 这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate()
 必须被调用以创建每一种用在 image 所代表的图像中的颜色。
*/
$white=imagecolorallocate($image,255,255,255);
$black=imagecolorallocate($image,0,0,0);


//用填充矩形填充画布
/*
 矩形区域着色。

语法:
 int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col);

返回值: 整数
本函数将图片的封闭长方形区域着色。
参数 x1、y1 及 x2、y2 分别为矩形对角线的坐标。
参数 col 表示欲涂上的颜色。
*/
imagefilledrectangle($image,1,1,$width-2,$height-2,$white);


//设置随机字符串
$chars=buildRandomString($type,$length);


$_SESSION[$sess_name]=$chars;
//$fontfile=array('经典趣体简.TTF');
 for($i=0; $i<$length; $i++){
    $size=mt_rand(14,18);
     $angle=mt_rand(-15,15);
    $x=5+$i*$size;
    $y=mt_rand(20,26);
    $fontfile="../fonts/quti.TTF";
    $color=imagecolorallocate($image,mt_rand(50,90),mt_rand(20,100),mt_rand(90,180));
    /*
    定义和用法
    substr() 函数返回字符串的一部分。
    语法
    substr(string,start,length)
    */
    $text=substr($chars,$i,1);
    /*
        ImageTTFText
    写 TTF 文字到图中。
    语法: array ImageTTFText(int im, int size, int angle, int x,
    int y, int col, string fontfile, string text);
    返回值: 数组
    本函数将 TTF (TrueType Fonts) 字型文字写入图片。
    参数 size 为字形的尺寸;angle 为字型的角度,顺时针计算,
    0 度为水平,也就是三点钟的方向 (由左到右),
    90 度则为由下到上的文字;x,y 二参数为文字的坐标值 (原点为左上角);
    参数 col 为字的颜色;fontfile 为字型文件名称,亦可是远端的文件;
    text 当然就是字符串内容了。返回值为数组,包括了八个元素,
    头二个分别为左下的 x、y 坐标,第三、四个为右下角的 x、y 坐标,
    第五、六及七、八二组分别为右上及左上的 x、y 坐标。治募
    注意的是欲使用本函数,系统要装妥 GD 及 Freetype 二个函数库。
    */
    imagettftext($image,$size,$angle,$x,$y,$color,$fontfile,$text);
 }
 //干扰元素  点
 for($i=0;$i<50;$i++){
    imagesetpixel($image,mt_rand(0,$width-1),mt_rand(0,$height-1),$black);
 }

header("content-type:image/gif");
//imagegif — 输出图象到浏览器或文件。
 imagegif($image);
 imagedestroy($image);
 }
 
 verify($type=1,$length=4,$sess_name="verify");

?>


<?php
function buildRandomString($type=1,$length=4){

if($type==1){
    $chars=join("",range(0,9));
}elseif($type==2){
    $chars=join("",array_merge(range('a','z'),range('A','Z')));
}elseif($type==3){
    $chars=join("",array_merge(range('a','z'),range('A','Z'),range(0,9) ));
}
if($length>strlen($chars)){
    exit("字符串长度不够");
}
$chars=str_shuffle($chars);
return substr($chars,0,$length);

    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值