探讨如何在php168_cms中提取验证码


Posted in PHP onJune 08, 2013
<?php
function yzImg($nmsg){
 if (function_exists('imagecreatetruecolor')){
  $imstr[0]["s"]=$nmsg[0];
  $imstr[1]["s"]=$nmsg[1];
  $imstr[2]["s"]=$nmsg[2];
  $imstr[3]["s"]=$nmsg[3];
  //文件头...
  header("Content-type: image/png");
  //创建真彩色白纸
  $im = @imagecreatetruecolor(50, 20) or die("建立图像失败");
  //获取背景颜色
  $background_color = imagecolorallocate($im, 255, 255, 255);
  //填充背景颜色(这个东西类似油桶)
  imagefill($im,0,0,$background_color);
  //获取边框颜色
  $border_color = imagecolorallocate($im,200,200,200);
  //画矩形,边框颜色200,200,200
  imagerectangle($im,0,0,49,19,$border_color);
  //逐行炫耀背景,全屏用1或0
  for($i=2;$i<28;$i++){
  //获取随机淡色
  $line_color = imagecolorallocate($im,rand(180,255),rand(180,255),rand(180,255));
  //画线
  imageline($im,2,$i,47,$i,$line_color);
  }
  //设置字体大小
  $font_size=12;
  //设置印上去的文字
  $Str[0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $Str[1] = "abcdefghijklmnopqrstuvwxyz";
  $Str[2] = "01234567891234567890123456";
  //获取第1个随机文字
  //$imstr[0]["s"] = $Str[rand(0,2)][rand(0,25)];
  $imstr[0]["x"] = rand(2,5);
  $imstr[0]["y"] = rand(1,4);
  //获取第2个随机文字
  //$imstr[1]["s"] = $Str[rand(0,2)][rand(0,25)];
  $imstr[1]["x"] = $imstr[0]["x"]+$font_size-1+rand(0,1);
  $imstr[1]["y"] = rand(1,3);
  //获取第3个随机文字
  //$imstr[2]["s"] = $Str[rand(0,2)][rand(0,25)];
  $imstr[2]["x"] = $imstr[1]["x"]+$font_size-1+rand(0,1);
  $imstr[2]["y"] = rand(1,4);
  //获取第4个随机文字
  //$imstr[3]["s"] = $Str[rand(0,2)][rand(0,25)];
  $imstr[3]["x"] = $imstr[2]["x"]+$font_size-1+rand(0,1);
  $imstr[3]["y"] = rand(1,3);
  //写入随机字串
  for($i=0;$i<4;$i++){
   //获取随机较深颜色
   $text_color = imagecolorallocate($im,rand(80,180),rand(80,180),rand(80,180));
   //画文字
   imagechar($im,$font_size,$imstr[$i]["x"],$imstr[$i]["y"],$imstr[$i]["s"],$text_color);
  }
  //显示图片
  imagepng($im);
  //销毁图片
  imagedestroy($im);
  exit;
 } else {
  header("Pragma:no-cache");
  header("Cache-control:no-cache");
  header("ContentType: Image/BMP");
  $Color[0] = chr(0).chr(0).chr(0);
  $Color[1] = chr(255).chr(255).chr(255);
  $_Num[0]  = "1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111";
  $_Num[1]  = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111";
  $_Num[2]  = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011";
  $_Num[3]  = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111";
  $_Num[4]  = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011";
  $_Num[5]  = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111";
  $_Num[6]  = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111";
  $_Num[7]  = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111";
  $_Num[8]  = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111";
  $_Num[9]  = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111";
  echo chr(66).chr(77).chr(230).chr(4).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(54).chr(0).chr(0).chr(0).chr(40).chr(0).chr(0).chr(0).chr(40).chr(0).chr(0).chr(0).chr(10).chr(0).chr(0).chr(0).chr(1).chr(0);
  echo chr(24).chr(0).chr(0).chr(0).chr(0).chr(0).chr(176).chr(4).chr(0).chr(0).chr(18).chr(11).chr(0).chr(0).chr(18).chr(11).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0);
  for ($i=9;$i>=0;$i--){
    for ($j=0;$j<=3;$j++){
      for ($k=1;$k<=10;$k++){
        echo $Color[substr($_Num[$nmsg[$j]], $i * 10 + $k, 1)];
      }
    }
  }
  exit;
 }
}
$string_yzimg=yzImgNumRand(4);

yzImg($string_yzimg);
function yzImgNumRand($lenth){
 mt_srand((double)microtime() * 1000000);
 for($i=0;$i<$lenth;$i++){
  $randval.= mt_rand(1,9);
 }
 return $randval;
}
/*==隐逸鸟==*/
?>

这个生成的验证码只是单纯的数字,背景填充很简单了只是26根直线填充的。前边看到他是想要4为随机字母加数字的序列,可是后来生成序列的时候却仅仅用了数字,字母却并没有用。下面重新修改为4位字母加数字的序列:
function yzImgNumRand($lenth){
 mt_srand((double)microtime() * 1000000);
$Str[0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $Str[1] = "abcdefghijklmnopqrstuvwxyz";
 $Str[2] = "01234567891234567890123456";
for($i=0;$i<$lenth;$i++){
  $randval.= $Str[rand(0,2)][rand(0,25)];
}
 return $randval;
}

PHP 相关文章推荐
PHP脚本的10个技巧(8)
Oct 09 PHP
php下通过POST还是GET来传值
Jun 05 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 #PHP
基于php常用正则表达式的整理汇总
Jun 08 #PHP
PHP计数器的实现代码
Jun 08 #PHP
使用cookie实现统计访问者登陆次数
Jun 08 #PHP
使用session判断用户登录用户权限(超简单)
Jun 08 #PHP
深入php常用函数的使用汇总
Jun 08 #PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 #PHP
You might like
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
微信小程序实现弹出层效果
2020/05/26 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Python 连连看连接算法
2008/11/22 Python
Python中的两个内置模块介绍
2015/04/05 Python
python中的计时器timeit的使用方法
2017/10/20 Python
详解python中list的使用
2019/03/15 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
李敖北大演讲稿
2014/05/24 职场文书
选秀节目策划方案
2014/06/06 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
预备党员入党感言
2015/08/01 职场文书
SQL Server中的游标介绍
2022/05/20 SQL Server