php编程每天必学之验证码

本文为大家分享了php图片验证码的实现代码,分享给大家供大家参考,具体内容如下

1.验证码图片生成
captcha.php

//1.生成100*30大小的图片,默认为黑色
$image = imagecreatetruecolor(100,30);
//创建白色底图
$bgcolor = imagecolorallocate($image,255,255,255);
//用白色填充黑色
imagefill ($image,0,0,$bgcolor);

//2.随机显示数字或字母
$captch_code = "";
for($i=0;$i<4;$i++){
 $fontsize=6;
 $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
 $data = "abcdefghijkmnpqrstuvwxy3456789";
 $fontcontent =substr($data,rand(0,strlen($data)),1);
 $captch_code .=$fontcontent;
 $x = ($i*100/4)+rand(5,10);
 $y = rand(5,10);

 imagestring($image, $fontsize, $x, $y, $fontcontent,$fontcolor);
}
$_SESSION["authcode"] = $captch_code;

//3.增加干扰
//干扰点
for($i=0;$i<100;$i++){
 $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
 imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);
}

//干扰线
for($i=0;$i<2;$i++){
 $linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
 imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}

header("content-type:image/png");
imagepng($image);

2.页面实现验证码功能
form.php

<?php
if(isset($_POST["authcode"])){
 session_start();
 if(strtolower($_POST["authcode"])==$_SESSION["authcode"]){
  echo "OK";
 }else{
  echo "NO";
 }
}

?>

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
<form action="form.php" method="post">
 <p>验证码图片: <img id="img" border="1" src="captcha.php?r=<?php echo rand()?>" alt="">
 <a href="javascript:void(0)" onclick="document.getElementById('img').src='captcha.php?r'+Math.random() ">换一个</a>
 </p>
 <p><input type="text" name="authcode"></p>
 <p><input type="submit" value="提交"></p>

</form>
</body>
</html>

以上就是本文的全部内容,帮助大家轻松实现php图片验证码。

(0)

相关推荐

  • php编程中echo用逗号和用点号连接的区别

    里面提到了echo 字符串用,比用.连接要好.原因先不说,先来看以下两句 <?php // 逗号比.更节省时间? echo '1+5=' . 1+5; echo '1+5=' . 5+1; 结果是什么? 1+5=6? 1+5=6? ------ 6? 2? ------ 6.6? 6.6? ------ 我只能说echo '5+1=' . 1+5;的结果是10,所以结果是6和2. 为什么会这样.难道在PHP中加法是没有交换律的?当然不是.. 我们先不去想为什么.如果我把上面的点号换成逗号试下.

  • PHP编程中尝试程序并发的几种方式总结

    本文大约总结了PHP编程中的五种并发方式: 1.curl_multi_init 文档中说的是 Allows the processing of multiple cURL handles asynchronously. 确实是异步.这里需要理解的是select这个方法,文档中是这么解释的Blocks until there is activity on any of the curl_multi connections..了解一下常见的异步模型就应该能理解,select, epoll,都很有名

  • 简单理解PHP的面向对象编程方式

    与大多数可以面向对象的编程语言不一样, PHP 是同时支持面向过程和面向对象的编程方式, PHP 开发者可以在面向过程和面向对象二者中自由选择其一或是混合使用,不过由于在 PHP5 之前的版本中, PHP 主要还是面向过程的编程语言,因此大多时候 PHP 开发者应该还是选择面向过程的方式进行开发,事实上, Kayo 认为即使一个 PHP 开发者完全不使用面向对象,他也能开发出很出色的 PHP 程序,我们可以想象, Web 页面的解析本身就很过程化,在 HTML 中嵌入面向过程处理的代码是非常自然

  • php面向对象编程self和static的区别

    在php的面向对象编程中,总会遇到 class test{ public static function test(){ self::func(); static::func(); } public static function func(){} } 可你知道self和static的区别么? 其实区别很简单,只需要写几个demo就能懂: Demo for self: class Car { public static function model(){ self::getModel(); }

  • 深入分析PHP优化及注意事项

    1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存. 任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同.静态内存是连续的,

  • php编程每天必学之验证码

    本文为大家分享了php图片验证码的实现代码,分享给大家供大家参考,具体内容如下 1.验证码图片生成 captcha.php //1.生成100*30大小的图片,默认为黑色 $image = imagecreatetruecolor(100,30); //创建白色底图 $bgcolor = imagecolorallocate($image,255,255,255); //用白色填充黑色 imagefill ($image,0,0,$bgcolor); //2.随机显示数字或字母 $captch_

  • php编程每天必学之表单验证

    本文实例讲解了php表单验证的实现方法,分享给大家供大家参考,具体内容如下 1.PHP表单处理 welcome.html <html> <body> <form action="welcome.php" method="post"> Name: <input type="text" name="name"><br> E-mail: <input type=&qu

  • 前端必学之PHP语法基础

    写在前面的话 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言.PHP能够包含文本.HTML.CSS以及PHP代码,在服务器上执行,结果以纯文本返回浏览器 代码标识 PHP代码以<?php 开头,以?>结尾,且可以放置在文档中的任何位置 <?php // ?> PHP语句以分号(;)结尾,PHP代码块的关闭标签也会自动表明分号 <?php echo "Hello World!"; ?> 注释 PHP支持三种注释,包括两种单行注释和一种多行注释

  • JavaScript中数组的22种方法必学(推荐)

    前面的话 数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细介绍 对象继承方法 数组是一种特殊的对象,继承了对象Object的toString().toLocaleString()和valueOf()方法 [toString()] toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串 [注意]该方法的返回值与不使用任何参数

  • PyQt5每天必学之关闭窗口

    最简单的关闭一个窗口的方法是点击标题栏上的 x 标志.但是,在下面的例子中,我们将展示如何通过编程来控制关闭窗口.我们将使用PyQt5的信号/槽. 以下是我们在例子中使用到的 QPushButton 控件的构造方法. QPushButton(string text, QWidget parent = None) text 参数是在按钮上显示的文本.parent 要将按钮控件放在哪里.在下面的例子中我们要将按钮控件放到 QWidget里.一个应用程序的窗口控件可以形成一个分层结构,在这个层次,大多

  • PyQt5每天必学之布局管理

    在GUI编程中有一个不容忽视的部分,那就是布局管理.布局管理掌控着我们的控件在应用程序窗口如何摆放.布局管理可以通过两种方式来完成.我们可以使用绝对定位或布局类两种方法控制程序窗口中的控件位置. 绝对定位 每个控件按程序员指定的位置放置.当您使用绝对定位,我们要了解以下限制: 如果我们调整窗口的大小控件的大小和位置保持不变 在不同平台上应用程序看起来可能会不同 更改字体可能会破坏应用程序的布局 如果决定改变布局,我们必须每个控件彻底的加以修改,这是繁琐和耗时的 下面的例子就是控件的绝对坐标定位方

  • 新手小白入门必学JAVA面向对象之多态

    目录 1. 概念 2 . 特点 3. 练习:多态入门案例 4. 多态的好处 5. 多态的使用 6. 练习:多态成员使用测试 7 拓展 7.1 设计汽车综合案例 7.2 多态为了统一调用标准 7.3 静态变量和实例变量的区别 7.4 向上转型和向下转型 总结 1. 概念 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态. 可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,

  • java必学必会之线程(2)

    一.线程的优先级别 线程优先级别的使用范例: package cn.galc.test; public class TestThread6 { public static void main(String args[]) { MyThread4 t4 = new MyThread4(); MyThread5 t5 = new MyThread5(); Thread t1 = new Thread(t4); Thread t2 = new Thread(t5); t1.setPriority(Th

  • Bootstrap每天必学之导航条(二)

    一.基础导航条 在制作一个基础导航条时,主要分以下几步: 第一步:首先在制作导航的列表(<ul class="nav">)基础上添加类名"navbar-nav" 第二步:在列表外部添加一个容器(div),并且使用类名"navbar"和"navbar-default" <div class="navbar navbar-default"> <!-- 导航条标题--> <

  • PyQt5每天必学之创建窗口居中效果

    本文实例为大家分享了PyQt5如何能够创建在桌面屏幕上居中窗口的具体代码,供大家参考,具体内容如下 下面的脚本说明我们如何能够创建在桌面屏幕上居中的窗口. #!/usr/bin/python3 # -*- coding: utf-8 -*- """ PyQt5 教程 这个程序是将一个窗口显示在屏幕的中心. 作者:我的世界你曾经来过 博客:http://blog.csdn.net/weiaitaowang 最后编辑:2016年7月30日 """ i

随机推荐