原生php验证码,原生php实现验证码

应该是比去年更早的时候写的今天看的时候居然有些懵逼的感觉,这该就是平时的框架用习惯了,让我忘记了真正的代码怎么写了吧。说的对我们不应该把时间用在造轮子上面,可是不觉得只是会把一块块别人的东西搬来搬去的,都不知道里面是什么,这种不求甚解的态度更是显得傻乎乎吗?

bbea7c13c33acc74cc188476c56240c1.png其中code.php就是验证码,但为什么它放在图片的文件夹中,因为php可以输出为多种格式,包括html,png等,所以只需要将其看成是png格式就好了。总体的思想是:

1.创建一张图片

2.将其用颜色填充,即为该验证码的背景图片。

3.随机的在图片上随机位置用随机的颜色画写线条和星号作为混淆。

4.将预先存储在session中的字符逐个在图片的某个范围内随机的写上。

这样一张验证码的图片就生成了。代码如下:

session_start();

$len = 4;

/*创建一张图片*/

$_width = 75;

$_height = 25;

$_img = imagecreatetruecolor($_width,$_height);//创建一张真彩色图片

header('Content-type:image/png');//要交代一下图片的格式

/*创建颜色 */

$_white = imagecolorallocate($_img,255,255,255);//白色

$_black = imagecolorallocate($_img,0,0,0);//黑色

$rnd_cor = imagecolorallocate($_img,mt_rand(150,225),mt_rand(150,225),mt_rand(150,225));//较浅的随机色

$rnd_cor1 = imagecolorallocate($_img,mt_rand(30,180),mt_rand(30,180),mt_rand(30,180));//较深的随即色

imagefill($_img,0,0,$_white);//用白色填充图片;;

for($i = 0; $i < 10; $i++){

imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$rnd_cor);//随机画出一条颜色较浅的随机线条;;

}

for($i = 0; $i < 100;$i++){

imagestring($_img,2,mt_rand(0,$_width),mt_rand(0,$_height),'*',$rnd_cor);

}

for($i = 0; $i < $len; $i++){

imagestring($_img,6,$i*$_width/$len+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$rnd_cor1);

}

//imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);//给图片添加黑色的边框;

imagepng($_img);//将这张真彩色图片输出;

imagedestroy($_img);//销毁图像的句柄;

上面的步骤是生成一张验证码图片,那怎样使用起来呢?

这是使用的js代码,实现点击切换验证码,点击的时候把这张图片的src 重新赋给它,只是后面加上了一个随机数。

给要请求的资源路径后面加上问号和随机数数,就不会使用浏览器中的缓存,而是重新向服务器请求。

那如果在此之前将session中的内容进行修改,验证码中的内容有时读取的session中的,那我们岂不是得到了一张新的验证码。而且此时验证码已然存在session中,我们想在那里进行验证都是可以的。

/*实现 点击验证码实现自动切换的功能*/

$("#code").click(function(){

$.post(ciev,null,function(data){

cheCode = data;

$("#code").get(0).src = "code.php?tm"+Math.random();

},'json');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值