生成验证码
程序员文章站
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);
这样我们的验证码就生成了!
上一篇: 滑动验证码