<script type=”text/javascript”>OA_show(25);</script>
一直想写这个,过了很久今天兴趣来了索性记录下。
验证码
全自动区分计算机和人类的公开图灵测试(英语:Completely%20Automated%20Public%20Turing%20test%20to%20tell%20Computers%20and%20Humans%20Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
百科介绍
说的简单点就是随机生成的字符,输出在一张图片上[这里不考虑其他形式的拖拽/短信验证码等等]。
常见类型
思路
本文只做演示使用,故取第一张图片验证码作为讲解示例。
图片上的每一点都有其RGB值,通过取色器可以获取到,肉眼观察可以看出该图验证码是纯数字纯色背景
通过取色器看出该验证码背景色RGB值为(212,214,204)
实现
下面我们来用PHP的imagecolorsforindex
函数取得图片所有点的RGB值:
$url = 'http://210.32.33.91:8080/reader/captcha.php'; $im = imagecreatefromgif($url); imagegif($im, <strong style="color:transparent">来2源gaodaima#com搞(代@码&网</strong><label>搞gaodaima代码</label>'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>"; }
效果: