问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php用GD库怎么随机产生彩色字母加数字的验证码

发布网友 发布时间:2022-04-07 10:35

我来回答

2个回答

懂视网 时间:2022-04-07 14:56

对于验证码,我们并不陌生,随处可见,比如:登录注册、论坛灌水、刷票、密码破解等,主要作用是屏蔽机器请求,保障业务不受机器提交请求干扰。

下面就来写一个验证码demo,使用最常见的字母加数字验证码,加上干扰点和干扰线,使用的GD库生成的,如果你没有安装的话,请自行谷歌安装,另如何判断是否安装启用,请直接在phpinfo页面搜GD库即可

效果如下图:

5ed6c1cb4851a1d7da179d4b1ffa844.png

前台页面

<?php
if(isset($_REQUEST["code"])){
 session_start();
 if(strtolower($_POST["code"])==$_SESSION["code"]){
 echo "<script>alert('正确!')</script>";
 }else{
 echo "<script>alert('错误!')</script>";
 }
}
?>
<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport"
  content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>验证码</title>
 <style>
 #code{
  border: 1px solid #ccc;
  vertical-align: bottom;
 }
 #refresh{
  text-decoration: none;
  font-size: .875em;
 }
 </style>
</head>
<body>
<form action="" method="post">
 <p>
 验证码:
 <img src="code.php?r=<?php echo rand()?>" alt="" id="code">
 <a href="javascript:;" id="refresh">看不清?</a>
 </p>
 <p>
 输入验证码:
 <input type="text" name="code">
 </p>
 <input type="submit" value="提交">
 <script>
 document.getElementById("code").onclick = document.getElementById("refresh").onclick = refresh;
 function refresh() {
  document.getElementById('code').src='code.php?r='+Math.random()
 }
 </script>
</form>
</body>
</html>

后台页面

<?php
//启动session
session_start();
$code = "";  //验证码字符串
$str = "qwertyuiopasdfghjklzxcvbnm1234567890"; //验证码字符取值范围[a-z0-9]
$w = 160;  //图片宽度
$h = 40;  //图片高度
$num = 4;  //验证码字符数
$dotNum = 300; //干扰点个数
$lineNum = rand(3, 5);  //干扰线条数
$font = "./api/DejaVuSansMono.ttf"; //设置字体文件
$image = imagecreatetruecolor($w, $h); //创建一张指定宽高的图片
$imageColor = imagecolorallocate($image, 255, 255, 255); //设置背景图片颜色为白色
imagefill($image, 0, 0, $imageColor); //填充图片背景
//随机验证码,包含字母和数字
for ($i = 0; $i < $num; $i++) {
 $fontColor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120)); //生成随机字体颜色
 $content = substr($str, rand(0, strlen($str)), 1); //随机取字符集中的值
 $code .= $content;
 $fontSize = rand(15, 25);   //字体大小
 $x = $i * $w / $num + rand(5, 10);  //指定生成位置X轴偏移量
 $y = rand(20, 30);    //指定生成位置Y轴偏移量
 imagettftext($image, $fontSize, 0, $x, $y, $fontColor, $font, $content);
}
$_SESSION["code"] = $code; //保存验证码字符串到session中
//生成干扰点
for ($i = 0; $i < $dotNum; $i++) {
 $dotColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
 imagesetpixel($image, rand(0, $w), rand(0, $h), $dotColor);
}
//生成干扰线
for ($i = 0; $i < $lineNum; $i++) {
 $lineColor = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
 imageline($image, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $lineColor);
}
header("content-type:image/png");
imagepng($image);
imagedestroy($image);

热心网友 时间:2022-04-07 12:04

这个问题比较简单,只讲下原理,代码如果你要的话我发给你,或者自己网上搜索下。
原理:
1、创建0-9a-zA-Z字符串
2、创建GD画布,选择相应的颜色
3、用for循环产生制定长度的【验证码】元素(使用随机数函数来获取不同的字符)
4、以验证码元素为内容创建图像
5,如果需要对每个字符设置不同的颜色,只需要对每个字符单独设置一个前景色即可
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
arrive in和arrive at 有什么区别? 磁力泵为什么可空转? 为什么不让衬氟塑料磁力泵空转?怎样提升设备稳定性? 工业软管泵 塑料磁力泵为什么不能空转 求推荐男主和女配在一起的小说? 《红衣天下》txt全集下载 检测公司检测哪些 检测公司是怎么样的 检测公司属于什么企业 肉煮了吃太咸怎样让它变淡一些 肉炒咸了怎么办 我炒红烧肉太咸怎么办? 肉炒咸了有了妙招 贫困理由有哪些? 炒肉炒咸了怎么办? 申请生活困难补助的理由怎样写 有没有哪位知道应收账款平均收账期计算公式的 !谢谢!! 资产负债表 净值 是什么 应收账款净值和应收账款账面价值是同一个概念吗? 快手火炬手标志怎么取消 应收账款净值是指什么? 资产负债表中的净值指什么 “应收账款净额”是什么意思? 应收账款净额怎么计算? 资产负债表中的净值要怎么算? 应收帐款净额怎么算 应收账款净额怎么算? 什么是应收帐款净额?怎样计算? 会计上资产负债表应收账款的净值公式是甚么 中国已上市的新冠疫苗分为两大类共五款,你打的是几针的呢? 求助关于KT板背景图片的问题 我国将疫苗分为两大类,不同年龄的孩子需要接种哪些疫苗呢? 电视台使用的KT板背景图片怎么垂直固定 中国主要的3款新冠灭活疫苗,其效果如何? 鱼缸背景图做哑光的 这个东西叫什么? 初次要KT泡沫板做背景墙,打印长高宽在平面设计时是按怎样的清晰度做才好还是有原图有图就可以了? 我们要举行诗歌朗诵(古诗),要有特色,一个人念诗,其他人表演节目,我们可以排什么节目?急急急急急 我想弄个照片墙,现在是想吧照片贴在一个KT板上面,然后摆出造型,然是试过之后没有出效果,太平面了,然 企业宣传与策划 即墨喷绘写真条幅:喷绘和写真有什么区别 8086/8088存储器的物理地址是如何形成的? 照全身像怎么弄背景? 通过虚拟地址计算物理地址 求过程 什么是8086的基址、偏移地址、逻辑地址、物理地址? 如何计算物理地址 没有任何症状,急性白血病确诊1个月就去世了?为什么会这样? 急性白血病 会突发死亡吗? 为什么没有任何症状,为什么会突然得急性白血病?一个月就去世了? 爸爸得急性白血病没几天就去世了怎么回事?这个病的怎么来的?