探讨如何在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输出缓存ob系列函数详解
Mar 11 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
PHP实现提取多维数组指定一列的方法总结
Dec 04 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
PHP底层运行机制与工作原理详解
Jul 31 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中SESSION的注销与清除
2015/04/16 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
django表单的Widgets使用详解
2019/07/22 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
《分一分》教学反思
2014/04/13 职场文书
初中物理教学反思
2016/02/19 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
python基础之类方法和静态方法
2021/10/24 Python