1 class Validationcode{
  2     private $width;
  3     private $height;
  4     private $codeNum; //输出字符数量 默认是4
  5     private $checkCode;//输出的字符
  6     private $image;
  7     private $type;  //字串类型 0 字母 1 数字 4.中文字符 其它 混合
  8     private $addChars;// 额外字符
  9     //构造函数
 10     function __construct($width=60,$height=20,$codeNum=4,$type="",$addChars=''){
 11         $this->width=$width;
 12         $this->height=$height;
 13         $this->codeNum=$codeNum;
 14         $this->type=$type;
 15         $this->addChars=$addChars;
 16         $this->checkCode=$this->randString();
 17     }
 18     //随机生成字符
 19     private function createCheckCode(){
 20         $ascii_number="";
 21         for($i=0;$i<$this->codeNum;$i++){
 22             $number=rand(0,2);
 23             switch($number){
 24                 case 0:$rand_number=rand(48,57);break;
 25                 case 1:$rand_number=rand(65,90);break;
 26                 case 2:$rand_number=rand(97,122);break;
 27             }
 28             $a=sprintf("%c",$rand_number);
 29             $ascii_number=$ascii_number.$a;
 30         }
 31         return $ascii_number;
 32     }
 33
 34
 35      // 产生随机字串,可用来自动生成密码
 36
 37     private function randString() {
 38         $str ='';
 39         switch($this->type) {
 40             case 0:
 41                 $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.$this->addChars;
 42                 break;
 43             case 1:
 44                 $chars= str_repeat('0123456789',3);
 45                 break;
 46             case 2:
 47                 $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$this->addChars;
 48                 break;
 49             case 3:
 50                 $chars='abcdefghijklmnopqrstuvwxyz'.$this->addChars;
 51                 break;
 52             case 4:
 53                 $chars = "们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这主中人上为来分生对于学下级地个用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然如应形想制心样干都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借".$this->addChars;
 54                 break;
 55             default :
 56                 // 默认去掉了容易混淆的字符oOLl和数字01,要添加请使用addChars参数
 57                 $chars='ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$this->addChars;
 58                 break;
 59         }
 60         if($this->codeNum>10 ) {//位数过长重复字符串一定次数
 61             $chars= $this->type==1? str_repeat($chars,$this->codeNum) : str_repeat($chars,5);
 62         }
 63         if($this->type!=4) {
 64             $chars   =   str_shuffle($chars);
 65             $str     =   substr($chars,0,$this->codeNum);
 66         }else{
 67             // 中文随机字
 68             for($i=0;$i<$this->codeNum;$i++){
 69               $str.= $this->msubstr($chars, floor(mt_rand(0,mb_strlen($chars,'utf-8')-1)),1,'utf-8',false);
 70             }
 71         }
 72         return $str;
 73     }
 74     //字符串截取,支持中文和其他编码
 75     public function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
 76         if(function_exists("mb_substr"))
 77             $slice = mb_substr($str, $start, $length, $charset);
 78         elseif(function_exists('iconv_substr')) {
 79             $slice = iconv_substr($str,$start,$length,$charset);
 80         }else{
 81             $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
 82             $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
 83             $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
 84             $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
 85             preg_match_all($re[$charset], $str, $match);
 86             $slice = join("",array_slice($match[0], $start, $length));
 87         }
 88         return $suffix ? $slice.'...' : $slice;
 89     }
 90     //输出验证码
 91     public function showImage(){
 92         $this->getCreateImage();
 93         $this->setDisturbColor();
 94         $this->outputText();
 95         $this->outputImage();
 96     }
 97     //建立画布
 98     private function getCreateImage(){
 99
100         $this->image=imagecreate($this->width,$this->height);
101         $back=imagecolorallocate($this->image,255,255,255);
102         $border=imagecolorallocate($this->image,0,0,0);
103         imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
104
105     }
106     public function getCheckCode(){
107         return $this->checkCode;
108     }
109     //字符串添加到画布
110     public function outputText(){
111         //$bg_color=imagecolorallocate($this->image,rand(0,255),rand(0,128),rand(0,255));
112         //imagestring($this->image,5,0,0,$this->checkCode,$bg_color);
113         for($i=0;$i<$this->codeNum;$i++){
114             $bg_color=imagecolorallocate($this->image,rand(0,255),rand(0,128),rand(0,255));
115             $x=(floor($this->width/$this->codeNum))*$i+3;
116             $y=rand(0,$this->height-15);
117             imagechar($this->image,5,$x,$y,$this->checkCode[$i],$bg_color);
118         }
119
120
121
122
123     }
124     //设置图像干扰
125     private function setDisturbColor(){
126         for($i=0;$i<=100;$i++){
127             $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
128             imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
129
130         }
131     }
132     //输出图像判断
133     private function outputImage(){
134         if(imagetypes()& IMG_GIF){
135             header("Content-type:image/gif");
136             imagegif($this->image);
137         }elseif(imagetypes()& IMG_JPG){
138             header("Content-type:image/jpeg");
139             imagejpeg($this->image,"",0.5);
140         }elseif(imagetypes()& IMG_PNG){
141             header("Content-type:image/png");
142             imagepng($this->image);
143         }elseif(imagetypes()& IMG_WBMP){
144             header("Content-type:image/vnd.wap.wbmp");
145             imagewbmp($this->image);
146         }else{
147             die("php不支持图像创建");
148         }
149     }
150     function __destruct(){
151         imagedestroy($this->image);
152     }
153 }

转载于:https://www.cnblogs.com/hylaz/archive/2012/12/16/2820153.html

php验证码类Validationcode相关推荐

  1. php验证码的封装,PHP实现的封装验证码类详解

    用PHP写一个验证码类,并进行封装. 类名: validationcode.class.php代码如下: class ValidationCode { private $width; private ...

  2. php最简单验证码代码,简单好用的PHP验证码类

    /** * @PHP验证码类 * 使用方法: * $image=new Captcha(); * $image->config('宽度','高度','字符个数','验证码session索引'); ...

  3. ThinkPHP验证码类

    //ThinkPHP验证码类使用$config = array('fontSize' => 30, // 验证码字体大小'length' => 3, // 验证码位数'useNoise' ...

  4. php面向对象(OOP)---- 验证码类

    验证码是众多网站登陆.注册等相关功能不可以或缺的功能,实现展示验证码的方式有很多,这篇文章作者以工作中比较常用的方法进行了封装. 逻辑准备 要实现一个完整的验证码,需要包含以下属性和功能 验证码类 { ...

  5. PHP使用GD库封装验证码类

    调试小技巧:当图片无法显示时,将header函数注释掉就可以看到报错信息了 字体文件放在当前文件目录的font文件夹中,windows的字体可以到C:\Windows\Fonts目录下复制过来,处理好 ...

  6. 3dcaptcha php,php实现的Captcha验证码类实例

    本文实例讲述了php实现的Captcha验证码类,在php程序设计中有着极其广泛的应用.分享给大家供大家参考.具体方法如下: 验证码类文件如下: /** Captcha 验证码类 * Date: 20 ...

  7. 一个好用的PHP验证码类

    一个好用的PHP验证码类 分享一个好用的php验证码类,包括调用示例. 说明: 如果不适用指定的字体,那么就用imagestring()函数,如果需要遇到指定的字体,就要用到imagettftext( ...

  8. php clicaptcha,php实现的Captcha验证码类实例

    这篇文章主要介绍了php实现的Captcha验证码类,实例展示了一个验证码类程序并附有用法演示实例,有着非常好的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php实现的Captcha验证码类,在 ...

  9. php验证码类(分享)

    //验证码类 class ValidateCode {private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';/ ...

最新文章

  1. 关于Java为什么配置好环境变量但是不能在命令行cmd运行javac的问题
  2. 13委托和事件在观察者模式中的应用
  3. 死磕Java并发:J.U.C之AQS:CLH同步队列
  4. Gradle在IDEA中创建web项目
  5. ios 多线程 -- NSOperation 常用方法
  6. 云鲸扫拖一体机器人说明书_比老公更好用的扫拖一体机—自动洗拖布的云鲸扫拖机器人使用体验...
  7. 2021牛客暑期多校训练营4 B-Sample Game(概率DP)
  8. 在WildFly和OpenShift上的WebSocket聊天
  9. 博士在读时,把暗恋的师兄变成了老公是种怎样的体验?
  10. vue-router配置介绍和使用方法(二)
  11. JAVA设计模式 - 单例模式
  12. adobe blueprint
  13. 逻辑回归与梯度下降法
  14. docker学习-狂神视频
  15. HTML 多选框
  16. 求正方形和长方形的个数
  17. 2018DeeCamp笔试题目第二套B卷
  18. python 计算众数、中位数、分位数、偏度、峰度
  19. 89c51c语言程序,AT89C51单片机流水灯c语言程序及详解
  20. gbd调试器及静态库/动态库的制作

热门文章

  1. ser crt linux 乱码,大师为你解决securecrt中文乱码【处理指南】
  2. 根据Ibatis的SqlMap配置文件生成表结构
  3. 使用Mockito对类成员变量进行Mock
  4. Spring Boot热部署
  5. win7怎么修改服务器端口,win7服务器端口设置方法
  6. 【Level 08】U07 Mixed Feelings L5 Front page news
  7. windows模拟微信小程序_Windows 版微信新版本内测!小程序可以直接添加到电脑桌面了...
  8. visual studio code安装_Deepin系统中如何安装Visual Studio Code
  9. mysql源码分析书籍_从源码分析 MySQL 死锁问题入门
  10. Mosquitto安装及使用简介