php验证码生成器
发布:smiling 来源: PHP粉丝网 添加日期:2018-08-06 17:33:57 浏览: 评论:0
现在很多网站都有实现用户集。然而为了防止机器人的网络攻击。限制登陆或者注册是有必要的。
在注册和登陆时强制要求输入一个机器难以识别的字符串集是一个不错的选择。虽然不能解决根本问题,但至少可以增加他们的成本。
利用PHP生成验证码需要用到GD2库。GD2库引用方法网络上有很多,不同操作系统导入方式也不同。
这段代码运行在WINDOS服务器平台。
- <?php
- $iC=newidCode(5,60,30);
- $iC->createPNG();
- classidCode{
- private$words=array('a','b',
- 'c','d','e','f','g','h','i','j','k','l',
- 'm','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','A','B','C','D','E','F',
- 'G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z',
- Ɔ',Ƈ',ƈ',Ɖ',Ɗ',Ƌ',ƌ',ƍ',Ǝ',Ə');
- private$fonts;
- private$count;//验证码字符数
- private$height;
- private$width;
- private$path='..\myfolder\fonts'
- private$keys;
- //构造函数
- publicfunction__construct($count,$width,$height){
- $this->count=$count;
- $this->getFonts();
- $this->height =$height;
- $this->width =$width;
- }
- privatefunctiongetFonts(){
- $dir= dir($this->path);
- while(false !== ($file=$dir->read())){
- if($file!='.'&&$file!='..'){
- $this->fonts[count($this->fonts)] =basename($file);
- }
- }
- $dir->close();
- }
- privatefunctioncreateKeys(){
- for($i= 0;$i<$this->count;$i++){<!--$this--->
- $this->keys[$i]['char'] =$this->words[rand(0,count($this->words)-1)];
- //使用字体路径标识
- $this->keys[$i]['filename'] =$this->path.'\\'.$this->fonts[rand(0,count($this->fonts)-1)];
- }
- }
- publicfunctioncreatePNG(){
- $this->createKeys();
- //创建画布以及颜色块儿
- $bg= imagecreatetruecolor($this->width + 10*2,$this->height + 3*2);//两边留10px空白,上下3px
- $grey= imagecolorallocate($bg,155,155,155);
- $blue= imagecolorallocate($bg,0x00,0x00,0xff);
- //填充背景
- imagefill($bg,0,0,$grey);
- //添加字符
- $pwidth=$this->width/$this->count;
- $x;$y;
- for($i= 0;$i<$this->count;$i++){<!--$this--->
- $rotation= rand(-40,40);//偏转角度±40°
- $fontsize= 33;
- $width_txt;
- $height_txt;
- do{
- $fontsize--;
- $bbox= imagettfbbox($fontsize,$rotation,$this->keys[$i]['filename'],$this->keys[$i]['char']);
- $width_txt=$bbox[2] -$bbox[0];//x 0 2 4 6,y1 3 5 7;左下,右下,右上,左上
- $height_txt=$bbox[7] -$bbox[1];
- }while($fontsize> 8 && ($height_txt>$this->height ||$width_txt>$pwidth));
- $fontcolor= imagecolorallocate($bg,rand(0,255),rand(0,255),rand(0,255));
- $x= 8 +$pwidth*$i+$pwidth/2 -$width_txt/2;//x坐标基本位置
- $y=$this->height/2 -$height_txt/2;
- imagettftext($bg,$fontsize,$rotation,$x,$y,$fontcolor,$this->keys[$i]['filename'],$this->keys[$i]['char']);
- }
- //绘制干扰线
- //根据字体酌情增加干扰线
- imageline($bg,0,15,40,10,$blue);
- //图像输出头文件
- header('Content-type:image/png');
- //输出png图像
- imagepng($bg);
- //清除缓存资源
- imagedestroy($bg);
- }
- publicfunctioncheckKeys($input){
- if(count($input)!=$this->count){
- return'ERROR:长度不正确.'
- }else{
- for($i=0;$i<$this->count;$i++){<!--$this--->
- //0 o O I l 1 校准,根据所选择的字体确定是否需要手动校准
- if($input[$i] !=$this->keys[$i]['char']){
- return'SUCCESS.'
- }else{ //phpfensi.com
- return'ERROR:请输入正确验证码.'
- }
- }
- }
- }
- }
- ?>
Tags: php验证码 php生成器
- 上一篇:PHP中for循环与foreach的区别
- 下一篇:PHP获取真实客户端的真实IP
相关文章
- ·php网页生成验证码实现程序(2014-07-30)
- ·简单实例php验证码代码(2014-08-17)
- ·PHP验证码生成与验证例子(2014-08-22)
- ·PHP验证码生成程序几种方法(2014-08-22)
- ·PHP验证码实现代码简单示例(2014-08-22)
- ·php验证码程序代码(2014-08-22)
- ·PHP验证码之Ajax验证实现方法(2014-08-22)
- ·php中文汉字验证码程序(2014-08-23)
- ·一个完整php验证码实例程序(2014-08-25)
- ·php 用户登录验证码的实现方法(2014-09-11)
- ·php jquery 验证码代码(2014-09-20)
- ·一个好用的PHP验证码类实例分享(2020-08-17)
- ·PHP+javascript制作带提示的验证码源码分享(2021-01-15)
- ·php程序总是提示验证码输入有误解决方案(2021-05-07)
- ·php验证码生成代码(2021-06-26)
- ·php验证码的制作思路和实现方法(2021-06-26)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)