手机版

php制作的简单验证码

时间:2021-09-18 来源:互联网 编辑:宝哥软件园 浏览:

一直想写这个,但是时间久了,今天兴趣来了,就直接写了下来。

验证码

完全自动的公共图灵测试区分计算机和人类(验证码),俗称验证码,是一个公共的自动程序,将用户与计算机和人类区分开来。在验证码测试中,作为服务器的计算机会自动生成一个问题供用户回答。这个问题可以由计算机生成和判断,但只有人类才能解决。因为电脑不能回答验证码的问题,所以回答问题的用户可以被视为人类。百科全书介绍

简单来说就是在一张图片上输出随机生成的字符[这里不考虑其他形式的拖拽/短信验证码]。

常见类型

思考

本文仅供演示,以第一张图片验证码为例。

图片上的每个点都有它的RGB值,可以通过拾色器得到。肉眼可见,图片验证码为纯数字纯色背景。

通过颜色选择器,验证码背景颜色的RGB值为(212,214,204)。

实现

让我们使用PHP的imagecolorsforindex函数来获取图片中所有点的RGB值:

$ URL=' http://210 . 32 . 33 . 91:8080/reader/captcha . PHP ';$ im=imagecreatefrom gif($ URL);imagegif($im,' 1 . gif ');$ rgbArray=array();$ res=$ im$ size=getimagesize($ URL);$ wid=$ size[' 0 '];$ hid=$ size[' 1 '];for($ I=0;$ i $ hid$ I){ for($ j=0;$ j $ wid$j) { $rgb=imagecolorat($res,$j,$ I);$ RGBarray[$ I][$ j]=imagecolorsforindex($ RES,$ RGB);}}结果如下:

你可能想知道这有什么用?让我们以另一种方式显示数据,即为背景色,为验证码区,然后看:

for($ I=0;$ i $ hid$ I){ for($ j=0;$ j $ wid$ j){ if($ rgbArray[$ I][$ j][' red ']==212){ echo ' ;} else { echo '';} } echo“br”;}效果:

这个不是很清楚。

但你可能还有疑问。虽然你能看到它们,但你怎么知道它们有多少?

下面我们来分析一下:

每个验证码直接间距4格,左右间距6/10格,上下间距16/10格。

让我们去掉这些干扰点,我们可以更清楚地看到它们。

不清楚吗?有人可能会问,你到底是怎么知道图片上的数字的?

好吧,让我们谈谈我的想法。我们将刚才的和替换为0和1,这些数字的形状是固定的,这样我们就可以得到0-9。每个单词8*10的每个区域都由0和1组成。

让我们每8段做一次,去掉4格间距,循环得到01组合值0-9,

$ DIC=array(' 000110000011111000011011000001111000000111000011100000110110001100000001111000000011100000000 '=0,' 0000110000000001110000000000111100000000011110000000000011000000000000000得到这10个后,组合成一个数组,每次分析图像的RGB时得到验证码值,并用对应的数组值替换。下面我们来演示一下:

最后,为了精确,需要100个周期才能看到:

哈哈,准确率100%。

写在最后。

本文旨在让WEB开发人员在生成验证码时注意安全,不要将验证码用于非法目的。

代码已经在github:中。

版权声明:php制作的简单验证码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。