商城笔记13——验证码

验证码

就是有字母或文字的图片,并且要有一定的干扰,还要能够在看不清的情况下进行刷新。流程如下:
1.造画布,不填充,默认的画布是黑色的
2.造颜料准备写字
3.写字
imagestring——水平的画一行字符串
说明: bool inagestring(resource image,int i m a g e , i n t font, int x,int x , i n t y,string s,int s , i n t col)
参数分别代表:画布资源,字体大小(1~5中选择),字符最左上角的X坐标,Y坐标,要写的字符串,颜色

/* 
1.造画布
*/
$im = imagecreatetruecolor(50,25);
//不填充,默认的画布是什么颜色的呢
//答:黑色
//2.造颜料准备写字
$red = imagecolorallocate($im,255,0,0);

//3.写字
//imagestring------水平的画一行字符串
//说明 
//bool inagestring(resource $image,int $font, int $x,int $y,string $s,int $col)
//参数分别代表:画布资源,字体大小(1~5中选择),字符最左上角的X坐标,Y坐标,要写的字符串,颜色
//
//
$str = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz23456789'),0,4);
imagestring($im,5,0,0,$str,$red);
header('content-type: image/png');
imagepng($im);//直接输出

运行结果如下:
这里写图片描述


进一步改进后:验证码可以随机改变颜色,也会有干扰线生成

//1.造画布
$im = imagecreatetruecolor(50,25);

//2.造颜料准备写字
//$red = imagecolorallocate($im,255,0,0);
//填充浅色背景
$gray = imagecolorallocate($im,220,220,220);

//随机颜色
$randcolor = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
$linecolor1 = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
$linecolor2 = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
$linecolor3 = imagecolorallocate($im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
//填充背景
imagefill($im,0,0,$gray);

//画干扰线
imageline($im,0,mt_rand(0,25),50,mt_rand(0,25),$linecolor1);
imageline($im,0,mt_rand(0,25),50,mt_rand(0,25),$linecolor2);
imageline($im,0,mt_rand(0,25),50,mt_rand(0,25),$linecolor3);

//3.写字
//imagestring------水平的画一行字符串
//说明 
//bool inagestring(resource $image,int $font, int $x,int $y,string $s,int $col)
//参数分别代表:画布资源,字体大小(1~5中选择),字符最左上角的X坐标,Y坐标,要写的字符串,颜色
//
//
$str = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz23456789'),0,4);
imagestring($im,5,0,0,$str,$randcolor);
header('content-type: image/png');
imagepng($im);//直接输出

运行结果如下:
这里写图片描述


进一步改善,可以随机刷新

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script type = "text/javascript">
        function chv(){
        var vcode = document.getElementsByTagName('img')[0];
        vcode.src= "04.php?_s"+Math.random();
        }
       </script>
    </head>
    <body>
    验证码:<input type = "text" name = 'yanzhengma' />
    <img src = '04.php' onclick='chv()'; />

    </body>
</html>

运行结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值