生成验证码

本文详细介绍了如何使用PHP生成包含噪点、噪线及文字的验证码图片,包括设置header、创建画布、定义颜色、填充背景、绘制噪点噪线以及使用特定字体库写入随机字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用一个案例生成验证码

因为我们输出的是一个图形,所以我们使用了一个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);

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值