php制作的简单验证码
一直想写这个,但是时间久了,今天兴趣来了,就直接写了下来。
验证码
完全自动的公共图灵测试区分计算机和人类(验证码),俗称验证码,是一个公共的自动程序,将用户与计算机和人类区分开来。在验证码测试中,作为服务器的计算机会自动生成一个问题供用户回答。这个问题可以由计算机生成和判断,但只有人类才能解决。因为电脑不能回答验证码的问题,所以回答问题的用户可以被视为人类。百科全书介绍
简单来说就是在一张图片上输出随机生成的字符[这里不考虑其他形式的拖拽/短信验证码]。
常见类型
思考
本文仅供演示,以第一张图片验证码为例。
图片上的每个点都有它的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或者邮箱删除。