PHP:原生随机验证码生成案例,详细易懂!

如果您觉得该文章对您有帮助,让更多人受用,请关注“键盘码农”,转发该文章。

该案例共分为4个文件:code.php(验证码随机生成方法)、register.html(验证码测试界面)、register.php(验证码判断)、verify.php(验证码)。

php原生验证码制作

code.php(验证码随机生成方法)

/**

* 随机生成验证码

*$width : 宽度

*$height: 高度

*$type: 要产生的验证码的类型

0表示纯数字, 1表示纯字符, 2表示数字字符混合 3表示计算

*$num: 验证码的个数

至少是两个

*/

// code();

function code($width = 100, $height = 50, $type = 1, $num = 4)

{

//创建画布

$image = imagecreatetruecolor($width, $height);

//给画布创建颜色

//给画布上画矩形

imagefilledrectangle($image, 0, 0, $width, $height,light_color($image));

//生成验证码

switch ($type) {

case 0:

$code = rand_number($num);

break;

case 1:

$code = rand_char($num);

break;

case 2:

$code = rand_num_char($num);

break;

case 3:

$code = rand_computer();

break;

}

//将验证码画到画布上

$w = ceil($width / $num);

for ($i = 0; $i

$x = mt_rand($i * $w, ($i + 1) * $w - 10);

$y = mt_rand(0 + 5, $height - 15);

//一次只能画一个字符

imagechar($image, 5, $x, $y, $code[$i], dark_color($image));

}

//给验证码上加干扰元素 点 弧度

for ($i = 0; $i

imagesetpixel($image, mt_rand(0, $width), mt_rand(0, $height), dark_color($image));

}

for ($i = 0; $i

imagearc($image, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, 90), mt_rand(0, 180), dark_color($image));

}

//告知浏览器要显示的文件类型

header('Content-type: image/png');

//显示到浏览器

imagepng($image);

//关闭资源

imagedestroy($image);

//返回验证码

return $code;

}

/**

* 生成浅色系

*/

function light_color($image)

{

return imagecolorallocate($image, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));

}

/**

* 生成深色系

*/

function dark_color($image)

{

return imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));

}

function rand_number($num)

{

//方式一:

// $str = str_shuffle($str);

// return substr($str, 0, $num);

//方式二:

// $arr = range(0, 9);

// shuffle($arr);

// $str = join('', $arr);

// return substr($str, 0, $num);

//方式三

$arr = range(0, 9);

shuffle($arr);

$arr = array_slice($arr, 0, $num);

return join('', $arr);

}

/**

* 生成纯字符的验证码

*/

function rand_char($num)

{

//方式一

// $str = str_shuffle($str);

// return substr($str, 0, $num);

//方式二:

// $a = range('a', 'z');

// $b = range('A', 'Z');

// $arr = array_merge($a, $b);

// shuffle($arr);

// $arr = array_slice($arr, 0, $num);

// return join('', $arr);

//方式三

$a = range('a', 'z');

$b = range('A', 'Z');

$arr = array_merge($a, $b);

//键值对调

$arr = array_flip($arr);

$arr = array_rand($arr, $num);

return implode('', $arr);

}

/**

* 产生数字字母混合验证码

*/

function rand_num_char($num)

{

//方式一

// $a = range(0, 9);

// $b = range('a', 'z');

// $c = range('A', 'Z');

// $arr = array_merge($a, $b, $c);

// shuffle($arr);

// $arr = array_slice($arr, 0, $num);

// return join('', $arr);

//方式二:

$str = '';

for ($i = 0; $i

//产生一个0-2的随机数, 0表示0-9, 1表示a-z 2表示A-Z

$rand = mt_rand(0, 2);

switch ($rand) {

case 0:

$str .= chr(mt_rand(48, 57));

break;

case 1:

$str .= chr(mt_rand(97, 122));

break;

case 2:

$str .= chr(mt_rand(65, 90));

break;

}

}

return $str;

}

function rand_computer()

{

$arr = ['+', '-', '*'];

$a = mt_rand(1, 9);

$b = mt_rand(1, 9);

$rand = mt_rand(0, 2);

return $a .$arr[$rand]. $b. '=';

}

验证码生成

register.html(验证码测试界面)

验证码

php生成验证码测试

register.php(验证码判断)

session_start();

$code = $_POST['code'];

if (strcasecmp($code, $_SESSION['code'])) {

exit('验证码输入错误,请让人操作');

} else {

exit('输入正确');

}

verify.php(要调用的验证码)

include 'code.php';

session_start();

$_SESSION['code'] = code(75, 20, 2, 4);

多看多测试,包括验证码生成的多种方法都已一一举例,希望对您有所帮助,如有疑问不懂的地方欢迎提问,谢谢!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180407A0MXX700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券