探讨如何在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和XSL stylesheets转换XML文档
Oct 09 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
PHP文件缓存类示例分享
Jan 30 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
Mac系统下安装PHP Xdebug
Mar 30 PHP
php实现单笔转账到支付宝功能
Oct 09 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 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
Python实现批量转换文件编码的方法
2015/07/28 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python Shapely使用指南详解
2020/02/18 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
金融系毕业生自荐书
2014/07/08 职场文书
关键在于落实心得体会
2014/09/03 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
旷工检讨书1000字
2015/01/01 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫