探讨如何在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学习之变量的使用
May 29 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
基于PHP对XML的操作详解
Jun 07 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
Mar 07 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
PHP获取学生成绩的方法
Nov 17 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
编程语言Python的发展史
2014/09/26 Python
Python去除列表中重复元素的方法
2015/03/20 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
Python中print函数简单使用总结
2019/08/05 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
教师实习自我鉴定
2013/12/11 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
就业协议书范本
2014/10/08 职场文书
绿色校园广播稿
2014/10/13 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers