您的位置 首页 php

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

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

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

随机验证码生成案例(原生)

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

<?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 < $num; $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 < 100; $i++) {

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

}

for ($i = 0; $i < 10; $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 = ‘0123456789’;

// $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 = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;

// $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 < $num; $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. ‘=’;

}

php验证码生成

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

<!DOCTYPE html>

<html>

<head>

<title>验证码</title>

<meta charset=”utf-8″>

</head>

<body>

<form action=”register.php” method=”post”>

<input type=”text” name=”code”>

<img src=”verify.php”>

<input type=”submit” name=”dosubmit” value=”提交”>

</form>

</body>

</html>

php验证码生成测试

register.php(验证码判断)

<?php

session_start();

$code = $_POST[‘code’];

if (strcasecmp($code, $_SESSION[‘code’])) {

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

} else {

exit(‘输入正确’);

}

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

<?php

include ‘code.php’;

session_start();

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

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

文章来源:智云一二三科技

文章标题:PHP:随机验证码生成案例(原生),详细易懂!

文章地址:https://www.zhihuclub.com/77970.shtml

关于作者: 智云科技

热门文章

网站地图