php生成验证码方法

本文共有1936个字,关键词:

问题:如何生成验证码图片?

方法:

<?php
//必须至于顶部,多服务器端记录验证码信息,便于用户输入后做校验
session_start();
// 图片宽度、调试
$w = 150;
$h = 45;

//默认返回的是黑色的照片
$image = imagecreatetruecolor($w, $h);
//将背景设置为白色的
$bgcolor = imagecolorallocate($image, 255, 255, 255);
//将白色铺满地图
imagefill($image, 0, 0, $bgcolor);

//空字符串,每循环一次,追加到字符串后面  
$captch_code='';
//验证码为随机四个字符,数字和字母
for ($i=0; $i <4 ; $i++) { 
    $fontsize=25;
    $fontcolor=imagecolorallocate($image,rand(0,220),rand(0,220),rand(0,220));
    //子典。因为o和0,l和1冲突,所以我们字典中不包括易混淆的
    $data='23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW';
    $fontcontent = substr($data,rand(0,strlen($data)) ,1);
    $captch_code.= $fontcontent;

    $x=($i*$w/4)+rand(5,10);
    $y=rand(5,10);

    // imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
    // imagestring font 是 1,2,3,4 或 5,使用内置字体
    @imagefttext($image, $fontsize, 0, $x, $fontsize+$y, $textcolor, 'Resources/oa/fonts/MiNiJianXingKai-1.ttf', $fontcontent);
}
$_SESSION['authcode'] = $captch_code;
//为验证码增加干扰元素,控制好颜色,
//点   
for ($i=0; $i < 800; $i++) { 
    $pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
    imagesetpixel($image, rand(1,$w-1), rand(1,$h-1), $pointcolor);
}

//为验证码增加干扰元素
//线   
for ($i=0; $i < 18; $i++) { 
    $linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
    imageline($image, rand(1,$w-1), rand(1,$h-1),rand(1,$w-1), rand(1,$h-1) ,$linecolor);
}

header('content-type:image/png');
imagepng($image);

//销毁
imagedestroy($image);

参考:

https://blog.csdn.net/chenfang0529/article/details/81295479
https://blog.csdn.net/dmtnewtons_blog/article/details/24974887
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论