有关PHP在网络编程中,写验证码的问题
有的网页中登陆要输入验证码。但是输入错了后,验证码会重新换一个。请问这种功能怎么实现的啊?最好上PHP代码或者javascript代码...
有的网页中登陆要输入验证码。但是输入错了后,验证码会重新换一个。请问这种功能怎么实现的啊?
最好上PHP代码或者javascript代码 展开
最好上PHP代码或者javascript代码 展开
展开全部
验证码一般是一个字符串,由数字与字母组成,如果单纯显示在页面上,很容易用程序截取到,没有起到验证的作用,所以把这个字符串用图片展示出来,加上背景再对各个字符的角度和颜色处理下,这样外界程序就不能截取到了,只能由人眼观看判断才能别,这就起到了验证作用。
当客户端访问时,服务端随机生成这样一个字符串后,会存到session中,然后再合成到图片上,客户端再显示,用户输入验证码会发送到服务端,服务端把字符串与session存的值比对,正确就通过,不对就提示错误,客户端的验证码图片一般有事件,就时点击后给图片的地址加个随机数,这样服务端会生成一个新的验证码,供用户再次验证。
<?php
class Code {
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $code;//验证码
private $codelen = 4;//验证码长度
private $width = 80;//宽度
private $height = 30;//高度
private $img;//图形资源句柄
private $font;//指定的字体
private $fontsize = 16;//指定字体大小
private $fontcolor;//指定字体颜色
//构造方法初始化
public function __construct() {
$this->font = dirname(__FILE__).'/../data/font/arial.ttf';//注意字体路径要写对,否则显示不了图片
}
//生成随机码
private function createCode() {
$_len = strlen($this->charset)-1;
for ($i=0;$i<$this->codelen;$i++) {
$this->code .= $this->charset[mt_rand(0,$_len)];
}
}
//生成背景
private function createBg() {
$this->img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
}
//生成文字
private function createFont() {
$_x = $this->width / $this->codelen;
for ($i=0;$i<$this->codelen;$i++) {
$this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
}
}
//生成线条、雪花
private function createLine() {
//线条
for ($i=0;$i<6;$i++) {
$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
}
//雪花
for ($i=0;$i<100;$i++) {
$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
}
}
//输出
private function outPut() {
header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
//对外生成
public function doimg() {
$this->createBg();
$this->createCode();
$this->createLine();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode() {
return strtolower($this->code);
}
}
追问
嗯嗯,这些我知道。
生成验证码、点击提片换一张新的验证码,这些功能有。
现在就一个细节问题。就是一个小细节。
当输入验证码时,如果输错了,就显示“验证码错误”//(这段功能已经实现)
并且自动生成一个新的验证码。就是自动生成新的验证码该怎么弄?我的函数就是
如果验证码输入错了,光显示输入错了,但是验证码还是原来那个。没变(除非
点击图片才新换一个验证码),我想输错了验证码自动换一个。
追答
点击后给图片的地址加个随机数
例如图片的地址 是a.php
随机一个地址a.php?t=0.1233465345345,这样服务端就认为这是一个新的访问,从而生成新的验证码
摩杜云
2024-07-09 广告
2024-07-09 广告
判断一个发送邮件api公司的好坏,不只是看价格,还要考虑很多因素。建议可以多对比几个看看。您可以到摩杜云了解下。摩杜云成立于2019年,依托于公司多年技术沉淀和强大的云计算研发实力,面向全世界各个国家和地区、企业组织和个人开发者,提供全球的...
点击进入详情页
本回答由摩杜云提供
2015-03-12
展开全部
你这问题也没有问清楚啊!
追问
生成验证码、点击提片换一张新的验证码,这些主要的功能有。
现在就一个细节问题。就是一个小细节。
当输入验证码时,如果输错了,就显示“验证码错误”//(这段功能已经实现)
并且自动生成一个新的验证码。就是自动生成新的验证码该怎么弄?我的函数就是
如果验证码输入错了,光显示输入错了,但是验证码还是原来那个。没变(除非
点击图片才新换一个验证码),我想输错了验证码自动换一个。
追答
用js啊,如果验证码错误, 用js去触发验证码图片的点击事件啊!
或者干脆用js给验证码图片刷新路径
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Google reCAPTCHAs
追问
不懂额。。。。
能上一段示例代码嘛
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上回答的很清楚。。。赞一个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询