php原生自定义验证码,5分钟搞定你的问题
当然现在很多php的框架里面自带了很多很多验证码,我的这个验证码,也是当初刚刚入行的时候学习模仿的。现在照搬出来,希望对刚入门的朋友有所帮助。
************************************************************************************************************
<?php
class CaptchaLib extends Base{
private $length; //验证码长度
private $font; //设置字体1-5
public function __construct($length=4,$font=5){
$this->length = $length;
$this->font = $font;
}
/**
* @intro 生成随机字符串
*
* @param
*
* @author 十月桂花香十里
*
* @return
*/
private function generalCode(){
$char_array = array_merge(range('A','Z'),range(0,9));
$index = array_rand($char_array,$this->length);
shuffle($index);
//拼接验证码字符串
$str = '';
foreach($index as $i){
$str .= $char_array[$i];
}
//将生成的随机字符串保存到会话中
session_start();
$_SESSION['code'] = $str;
return $str;
}
/**
* @intro 生成验证码
*
* @param
*
* @author 十月桂花香十里
*
* @return
*/
public function generalCaptcha(){
$str = $this->generalCode();
//打开图片路径
$bg ='http://www.xxx.com/images/captcha/captcha_bg'.rand(1,5).'.jpg'; //这里引用你图片的存放的位置,记得注意不要被盗链了
$img = imagecreatefromjpeg($bg);
//定义字符串颜色,黑白概率为50%
$color = imagecolorallocate($img,0,0,0);
if(rand(1,2)==2){
$color=imagecolorallocate($img,255,255,255);
}
$x=(imagesx($img)-imagefontwidth($this->font)*strlen($str))/2;
$y=(imagesy($img)-imagefontheight($this->font))/2;
imagestring($img,$this->font,$x,$y,$str,$color);
//浏览器输出
header('content-type:image/png');
imagepng($img);
imagedestroy($img);
}
/**
* @intro 验证输入的验证码是否正确
*
* @param $code string 用户输入的验证码
*
* @author 十月桂花香十里
*
* @return bool 成功返回true,失败返回false
*/
public function checkCode($code){
return strtolower($code) == strtolower($_SESSION['code'])?true:false;
}
}
*******************************************************************
封装好的,直接复制就行,改一下背景图片地址就ok了,至于背景图片,我云盘分享一下就行。
(链接:http://pan.baidu.com/s/1i47wWKl 密码:sfvg)
php原生自定义验证码,5分钟搞定你的问题的更多相关文章
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- 五分钟搞定Go.js
五分钟搞定Go.js 1.基于html5~因为Go.js是一个依赖于HTML5特性的JavaScript库,所以需要确保您的页面声明它是一个HTML5文档,当然需要加载库 <!DOCTYPE ...
- Spring Boot 返回 XML 数据,一分钟搞定!
Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...
- zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
本篇文章阅读时间5分钟左右 点击看<每日五分钟搞定大数据>完整思维导图 zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同 ...
- 一分钟搞定AlloyTouch图片轮播
一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,A ...
- zookeeper核心-zab协议-《每日五分钟搞定大数据》
上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...
- windows+mysql集群搭建-三分钟搞定集群
注:本文来源: 陈晓婵 < windows+mysql集群搭建-三分钟搞定集群 > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...
- 十分钟搞定pandas内容
目录 十分钟搞定pandas 一.创建对象 二.查看数据 三.选择器 十二.导入和保存数据 参考:http://pandas.pydata.org/pandas-docs/stable/whatsne ...
- HDFS-异常大全-《每日五分钟搞定大数据》
点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>d ...
- 转载-30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)
原文:30分钟搞定后台登录界面(103个后台PSD源文件.素材网站) 目录 一.界面预览 二.PSD源文件预览 三.工具分享 四.资源说明 五.素材下载网站 六.下载 去年八月时要做一个OA系统为 ...
随机推荐
- Android IPC机制全解析<一>
概要 多进程概念及多进程常见注意事项 IPC基础:Android序列化和Binder 跨进程常见的几种通信方式:Bundle通过Intent传递数据,文件共享,ContentProvider,基于Bi ...
- Activity的切换动画
Activity在切换或者退出的时候可以自定义动画的,比如AlphaAnimation.TranslateAnimation.ScaleAnimation等自定义的动画.我们在Activity启动的时 ...
- Statistical Models and Social Science
1.1 Statistical Models and Social Reality KEY: complex society v.s statistical models relationship,d ...
- Linux 入门笔记
一开始对linux总有些抵触,黑黑的命令框不知道如何下手,这次因为工作交接的缘故需要负责之前同事的Node后端部分,node,redis这些都是部署在Linux上的,看了几次运维的同学噼里啪啦的敲命令 ...
- 跟着刚哥梳理java知识点——多线程(十六)
创建多线程第一种方式:① 继承:继承Thread.② 重写:重写Thread类的run()方法③ 创建:创建一个子类的对象④ 调用:调用线程的start()方法,启动此线程,调用run()方法 cla ...
- 自己实现的string的库函数
为了更好地理解string的各个库函数,现将几个常用的库函数用自己的方式实现如下: #include<iostream> using namespace std; #include< ...
- iOS 让View始终在屏幕最上层
UIView层次管理 放到最上层 放到最下层 将一个UIView显示在最前面只需要调用其父视图的 bringSubviewToFront()方法. 将一个UIView层推送到背后只需要调用其父视图的 ...
- Python数据处理——numpy_3
通过前面两次的学习,基本上对numpy有了一定的认识,所以,接下来进一步对numpy学习.同时,最后以一个有趣的例子加深对numpy的理解. import numpy as np xarr = np. ...
- 关于使用mybatis的几点总结
mybatis的几点总结 1.关于resultType和resultMap的使用 查询结果集统一采用resultType,不要采用resultMap,因为resultMap需要写许多的表字段和实体类的 ...
- Understanding a Kernel Oops!
Understanding a kernel panic and doing the forensics to trace the bug is considered a hacker's job. ...