欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

生成验证码

程序员文章站 2022-05-13 15:51:41
...

用一个案例生成验证码

因为我们输出的是一个图形,所以我们使用了一个header('content-type:image/png');

验证码使用的是一个字符串,有些字符不容易去别所以去掉

<?php
//案例
header('content-type:image/png');

//字符串,去掉不容易识别的i,l,o I,L,O
$str = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890";

接下来我们创建我们的画布

<?php
//案例
header('content-type:image/png');

//字符串,去掉不容易识别的i,l,o I,L,O
$str = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890";

//画布
$width = 500;
$height = 300;
$img = imagecreatetruecolor(width,height);

然后我们定义画布的颜色,颜色用灰色,16进制 

定义画布颜色之后填充画布

之后输出画布

输出完之后销毁画布

<?php
//案例
header('content-type:image/png');

//字符串,去掉不容易识别的i,l,o I,L,O
$str = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890";

//画布
$width = 500;
$height = 300;
$img = imagecreatetruecolor(width,height);


//颜色
$color = imagecolorallocate($img,0xcc,0xcc,0xcc);

//填充
imagefill($img,0,0,$color);

//输出画布
imagepng($img);

//销毁画布
imagedestroy($img);

这样我们就得到了一块灰色的画布

我们的验证码需要在里面添加一些噪点与噪线

<?php
//案例
header('content-type:image/png');

//字符串,去掉不容易识别的i,l,o I,L,O
$str = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890";

//画布
$width = 500;
$height = 300;
$img = imagecreatetruecolor(width,height);


//颜色
$color = imagecolorallocate($img,0xcc,0xcc,0xcc);

//填充
imagefill($img,0,0,$color);

//画噪点
for($i=0;$i<100;$i++){
    $color = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));
    $x = rand(0,$width);
    $y =rand(0,$height);
    imagesetpixel($img,$x,$y,$color);
}


//画噪线
for($i=0;$i<40;$i++){
    $color = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));
    $x1 = rand(0,$width);
    $y1 = rand(0,$heigth);
    $x2 = rand(0,$width);
    $y2 = rand(0,$heigth);
    imageline($img,$x1,$y1,$x2,$y2,$color);
  }
//输出画布
imagepng($img);

//销毁画布
imagedestroy($img);

最后我们写入它的文字

如果我们需要一个4位验证码

我们要先获得字符串的长度 生成随机数

如果我们使用 imagettftext()话 我们需要引入他的字体库

需要引入他的字体库文件 、

字体库文件一般放在C:\Windows\Fonts  在里面找到 simsunb.ttf  字体复制到对应的文件夹中

<?php
//案例
header('content-type:image/png');

//字符串,去掉不容易识别的i,l,o I,L,O
$str = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890";

//画布
$width = 200;
$height = 150;
$img = imagecreatetruecolor(width,height);


//颜色
$color = imagecolorallocate($img,0xcc,0xcc,0xcc);

//填充
imagefill($img,0,0,$color);

//画噪点
for($i=0;$i<100;$i++){
    $color = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));
    $x = rand(0,$width);
    $y =rand(0,$height);
    imagesetpixel($img,$x,$y,$color);
}


//画噪线
for($i=0;$i<40;$i++){
    $color = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));
    $x1 = rand(0,$width);
    $y1 = rand(0,$heigth);
    $x2 = rand(0,$width);
    $y2 = rand(0,$heigth);
    imageline($img,$x1,$y1,$x2,$y2,$color);
  }


//画文字
$len = strlen($str);
$font = "simsunb.ttf";
for($i=0;$i<4;$i++){
  $color = imagecolorallocate($img,255,0,0); //颜色
  $index = rand(0,$len-1);
  $chr = substr($str,$index,1);
  $x = 20 + $i * 40;
  $y = 80;
  imagettftext($img,40,rand(-70,70),$x,$y,$color,$font,$chr);
}

//输出画布
imagepng($img);

//销毁画布
imagedestroy($img);

这样我们的验证码就生成了!