php实现随机数字、字母的验证码
php实现随机数字、字母的验证码
可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。
废话不多说,直接上代码:
1、classgd.class.php
<?php
Class Captcha{
private $_fontfile='';
private $_size=36;
private $_width=200;
private $_height=100;
private $_length=4;
private $_image=null;
private $_snow=0;
private $_pixel=0;
private $_line=0;
public function __construct($config=array()){
if(is_array($config)&&count($config)>0){
if(isset($config['fontfile'])&&is_file($config['fontfile'])&&is_readable($config['fontfile'])){
$this->_fontfile=$config['fontfile'];
}else{
return false;
}
if(isset($config['size'])&&$config['size']>0){
$this->_size=(int)$config['size'];
}
if(isset($config['width'])&&$config['width']>0){
$this->_width=(int)$config['width'];
}
if(isset($config['height'])&&$config['height']>0){
$this->_height=(int)$config['height'];
}
if(isset($config['length'])&&$config['length']>0){
$this->_length=(int)$config['length'];
}
if(isset($config['snow'])&&$config['snow']>0){
$this->_snow=(int)$config['snow'];
}
if(isset($config['pixel'])&&$config['pixel']>0){
$this->_pixel=(int)$config['pixel'];
}
if(isset($config['line'])&&$config['line']>0){
$this->_line=(int)$config['line'];
}
$this->_image=imagecreatetruecolor($this->_width,$this->_height);
return $this->_image; }
else{
return false;
}
}
public function getCaptcha(){
$white=imagecolorallocate($this->_image,255,255,255);
imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white);
$str=$this->_generateStr($this->_length);
if(false===$str){
return false;
}
$fontfile=$this->_fontfile;
for($i=0;$i<$this->_length;$i++){
$size=$this->_size;
$angle=mt_rand(-30,30);
$x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10);
$y=ceil($this->_height/1.5);
$color=$this->_getRandColor();
//针对中文字符截取
//$text=mb_substr($str,$i,1,'utf-8');
$text=$str{$i};
imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text);
}
if($this->_snow){
$this->_getSnow(); }else{
if($this->_pixel){
$this->_getPixel(); }
if($this->_line){
$this->_getLine();
}
}
header('content-type:image/png');
imagepng($this->_image);
imagedestroy($this->_image);
return strtolower($str);
}
private function _getSnow(){
for($i=1;$i<=$this->_snow;$i++){
imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),'*',$this->_getRandColor());
}
}
private function _getPixel(){
for($i=1;$i<=$this->_pixel;$i++){
imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());
}
}
private function _getLine(){
for($i=1;$i<=$this->_line;$i++){
imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor()); }
}
private function _generateStr($length=4){
if($length<1 || $length>30){
return false;
}
$chars=array(
'a','b','c','d','e','f','g','h','k','m','n','p','x','y','z',
'A','B','C','D','E','F','G','H','K','M','N','P','X','Y','Z',
1,2,3,4,5,6,7,8,9
);
$str=join('',array_rand(array_flip($chars),$length));
return $str;
}
private function _getRandColor(){
return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
}
}
?>
2、testCaptcha.php
<?php
require_once 'classgd.class.php';
$config=array(
'fontfile'=>'fonts/simfang.ttf', //引入字体文件
//'snow'=>50,
'pixel'=>100,
'line'=>10
);
$captcha=new Captcha($config);
$captcha->getCaptcha();
?>
php实现随机数字、字母的验证码的更多相关文章
- 随机发送n位数字+字母的验证码
''' 随机发送n位数字+字母的验证码 ''' import random def get_verified(length): code = '' for i in range(length): nu ...
- javascript原生 实现数字字母混合验证码
实现4位数 数字字母混合验证码(数字+大写字母+小写字母) ASCII 字符集中得到3个范围: 1. 48-57 表示数字0-9 2. 65-90 表示大写字母 3. 97-122 表示小写字母 范围 ...
- QTP生成随机数字+字母
以下函数实现随机生成17位数(包括字母和数字),仍有改进的空间,可根据具体要求适当修改 Dim targetstring '调用返回函数给变量.Function过程通过函数名返回一个值 targets ...
- C# 生成四位数字字母混合验证码
private static void Rand() { var arr = new List<string>(); ; i < ; i++) { arr.Add(i.ToStrin ...
- 用js做数字字母混合的随机四位验证码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Servlet实现数字字母验证码图片(二)
Servlet实现数字字母验证码图片(二): 生成验证码图片主要用到了一个BufferedImage类,如下:
- js随机生成字母数字组合的字符串 随机动画数字
效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...
- Java随机生成定长纯数字或数字字母混合数
(转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码
- 绘制字母和数字组合的验证码(原生php)
<?php $font = array('font/FZZQJW.TTF','font/STHUPO.TTF');//字体 $str = '689acdefhjkmnpqrtuvwxyACDEF ...
随机推荐
- 通向全栈之路——(4)nginx反向代理配置
1.安装nginx:sudo apt-get install nginx2.新建配置文件:cd /etc/nginx/conf.dsudo vi XXX-cn-8080.conf内容如下:upstre ...
- Node.js学习笔记(八) --- Node.js的路由模块封装
1 .模块化的方式封装 整理中… 2 .封装仿照 express 的路由整理中…
- C# 中的委托和事件 --转载
作者:张子阳 转载源: http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx C# 中的委托 ...
- JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...
- 理解 RESTful 架构(转)
前言:REST指的是一组架构约束条件和原则." 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构. 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种& ...
- Spring boot 入门四:spring boot 整合mybatis 实现CRUD操作
开发环境延续上一节的开发环境这里不再做介绍 添加mybatis依赖 <dependency> <groupId>org.mybatis.spring.boot</grou ...
- K先生
每天多一点点的努力,不为别的,只为了日后能够多一些选择,选择云卷云舒的小日子,选择自己说了算的生活,选择自己喜欢的人. 加油,记K先生之名!
- angualrJs实现图片上传功能
整体逻辑:service提供FileReader函数,directive提供点击事件的绑定和监听,controller用来修改html上的ng-src属性值 1.HTML <input type ...
- elixir 模块
模块定义 defmodule 函数定义 def 私有函数 defp --相当于其他语言 private iex(29)> defmodule Math do...(29)> def ...
- Linux sar命令工具详细介绍
sar命令工具详细介绍 by:授客 QQ:1033553122 由于篇幅限制,采用网盘分享, 下载地址: sar命令工具详细介绍.pdf