PHP验证码生成程序几种方法

例1,直接使用数组,此方法比较简单

 代码如下 复制代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php

$arr=array(2,3,4,5,8,1,9,7,"a","b","c","d","e","f","中","国","南","北","大","小","多","少");
$b=array_rand($arr,3);

?>
<form action="yz.php" method="post">
<input type="text" name="code" />
<input type="hidden" name="yanzhengma" value="<?php foreach($b  as $key)
         {
          echo $arr[$key];
         }
       ?>"
/>

<input type="submit" name="submit" value="do" />
</form>
<?php

echo “code:";
foreach($b  as $key)
{
 echo $arr[$key];
}
?>

</body>
</html>(以上语句另存为一个php文件)

<?php
header(“Content-Type:text/html;charset=utf-8");
echo $_POST["yanzhengma"];
echo $_POST["code"];
if($_POST["yanzhengma"]==$_POST["code"])
{
 echo “验证码正确";
}
else
{
 die(“<script>alert(‘验证码不正确");location="array_rand.php";</script>");
}
?>

(以上语句另存为yz.php)

例2,也是用数组只不是数据多了一点

 代码如下 复制代码

function UPCAbarcode($code) {
  $lw = 2; $hi = 100;
  $Lencode = array('0001101','0011001','0010011','0111101','0100011',
                   '0110001','0101111','0111011','0110111','0001011');
  $Rencode = array('1110010','1100110','1101100','1000010','1011100',
                   '1001110','1010000','1000100','1001000','1110100');
  $ends = '101'; $center = '01010';
  /* UPC-A Must be 11 digits, we compute the checksum. */
  if ( strlen($code) != 11 ) { die("UPC-A Must be 11 digits."); }
  /* Compute the EAN-13 Checksum digit */
  $ncode = '0'.$code;
  $even = 0; $odd = 0;
  for ($x=0;$x<12;$x++) {
    if ($x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; }
  }
  $code.=(10 - (($odd * 3 + $even) % 10)) % 10;
  /* Create the bar encoding using a binary string */
  $bars=$ends;
  $bars.=$Lencode[$code[0]];
  for($x=1;$x<6;$x++) {
    $bars.=$Lencode[$code[$x]];
  }
  $bars.=$center;
  for($x=6;$x<12;$x++) {
    $bars.=$Rencode[$code[$x]];
  }
  $bars.=$ends;
  /* Generate the Barcode Image */
  $img = ImageCreate($lw*95+30,$hi+30);
  $fg = ImageColorAllocate($img, 0, 0, 0);
  $bg = ImageColorAllocate($img, 255, 255, 255);
  ImageFilledRectangle($img, 0, 0, $lw*95+30, $hi+30, $bg);
  $shift=10;
  for ($x=0;$x    if (($x<10) || ($x>=45 && $x<50) || ($x >=85)) { $sh=10; } else { $sh=0; }
    if ($bars[$x] == '1') { $color = $fg; } else { $color = $bg; }
    ImageFilledRectangle($img, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color);
  }
  /* Add the Human Readable Label */
  ImageString($img,4,5,$hi-5,$code[0],$fg);
  for ($x=0;$x<5;$x++) {
    ImageString($img,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg);
    ImageString($img,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg);
  }
  ImageString($img,4,$lw*95+17,$hi-5,$code[11],$fg);
  /* Output the Header and Content. */
  header("Content-Type: image/png");
  ImagePNG($img);
}

UPCAbarcode('12345678901');

?>

例3,这个是一个比较完整的ajax刷新验证码实例

vcode.php

 代码如下 复制代码

<?php 
session_start();//开启session功能
header("Cache-Control: no-cache, must-revalidate");

$im = imagecreate(60,30);//定义图片宽度和高度
$vcode=getVCode();//获取要显示的字符
$bg = imagecolorallocate($im, 255, 255, 255);//定义图片背景
$txt = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));//定义要显示字符的颜色
imagestring($im, 8, 0, 0, $vcode, $txt);//写入字符串到图片
header(Content-type: image/jpeg);//定义Content-type
imagejpeg($im);//以JPEG格式显示图片
$_SESSION[vcode]=$vcode;//写入SESSION
 
function getVCode(){    //随机生成用户指定个数的字符串
  $codenum=4;
  $checkcode="";
  $string="";//要显示的可选字符串,请自行定义;
  for($i=0;$i<$codenum;$i  ) {  
  $number=rand(0,2);  
  switch($number){  //根据可选字符串可灵活定义;
       case 0 : $rand_number=rand(0,10);break;   
       case 1 : $rand_number=rand(11,36);break;  
       case 2 : $rand_number=rand(37,62);break;  
  }  
  $code=substr($string,$rand_number,1);
  $checkcode=$checkcode.$code;  
  } 
  return  $checkcode;
}     
?>

loginform.html

 代码如下 复制代码

<!--详细信息-->
<form name="loginform">
<table class="dtable">
        <tr>
          <td width="100"> 用户名 </td><td><input class="txtbox" name="loginname" type=text size="30"/></td>
        </tr>
        <tr>
          <td width="100"> 密码 </td><td><input class="txtbox" name="loginpwd" type=password size="30"/></td>
        </tr>
        <tr>
          <td width="100"> 验证码 </td>
          <td><input class="txtbox" name="loginvcode" type=text size="10"/>
          <img id="vcode" src="vcode.php" alt="验证码" align="absmiddle"/>
          <a href="javascript:getVCode();">换一张</a></td>
        </tr>
</table>
<table>
        <tr><td colspan="2">
          <input class="btn" name="ok" type="button" value="登录" onclick="setType('usr');usrVCode();">
          <input class="btn" name="reset" type="reset" value="重写">
          <input class="btn" name="exit" type="button" value="退出" onclick="Hide();">
        </td></tr>
</table>
<table>
        <tr><td colspan="2">
          还没有注册? <a href="javascript:setType('usr');Show('0','addform');">马上注册</a>
          忘记密码? <a href="javascript:setType('usr');Show('0','pwdform');">取回密码</a>
        </td></tr>
</table>
</form>

vcode.js

 代码如下 复制代码

//该函数用来获取验证码

function getVCode() {
        var vcode=document.getElementById('vcode');
        vcode.src = 'vcode.php?nocache='+new Date().getTime();
}

//该函数用来验证验证码
function usrVCode() {
        if(!checkLogin())return false;
        var loginvcode=document.loginform.loginvcode.value;
        var xmlhttp1=createAjax();
        var data='&loginvcode='+loginvcode;
if (xmlhttp1) {
  var state=document.getElementById('state');
          xmlhttp1.open('get',?do=vcodedo'+data,true);
  xmlhttp1.send(null);
  xmlhttp1.onreadystatechange=function() {
    if (xmlhttp1.readyState==4 && xmlhttp1.status==200) {
             setTimeout("state.style.display = 'none';",1000);
     var myres=xmlhttp1.responseText;
             var result=(myres==1)?"恭喜您,验证码输入正确!":"很抱歉,验证码输入错误!";
             if(myres==0)alert(result);
             if(myres==1)usrLogin();
            }
    else {
             state.style.display = "";
     state.style.left=(document.body.offsetWidth-350)/2;
             state.style.top=(document.body.offsetHeight-235)/2+document.body.scrollTop;
    }
          }
}
}

时间: 2024-10-24 05:02:42

PHP验证码生成程序几种方法的相关文章

jsp验证码生成程序与调用方法

jsp教程验证码生成程序与调用方法 package com.city.sxzlc.servlet; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Random; impo

验证码生成程序与使用方法

//调用此页面,如果下面的式子成立,则生成验证码图片  代码如下 复制代码 if($_get['action']=='verifycode'){     rand_create(); } //验证码图片生成 function rand_create(){     //通知浏览器将要输出png图片     header('content-type: image/png');     //准备好随机数发生器种子     srand((double)microtime()*1000000);    

在Windows 8 PC上安装Linux的四种方法

微软RTM版本的Windows 8相信已经有很多人试用过了,如果在Windows 8 PC上安装Linux很困难,那我们该怎么办呢?下面提供四种方法. 在UEFI上启动Linux 首先,需要在UEFI上启动Linux.因为除了Mac,很少有PC使用UEFI替换BIOS,所以大家都不怎么关心从UEFI启动Linux. 现在,很多想在Mac上运行Linux的人使用兼容支持模块CSM,提供Mac上BIOS的仿真.这种方式很麻烦,运行得不好,在Secure Boot Windows 8 PC上可能会更糟

顶级黑客欢乐解析:宝宝事件中人肉搜索的七种方法

    作为敢抢奥运会头条的男人,宋喆遭遇了围追堵截.这次全民捉奸不仅是娱乐圈的狂欢,科技圈也神乱入了一下: 如果没有广大黑客技术爱好者的参与,狗仔们似乎也无法在几天之内扒出宋喆的身世.爱好.住址.开房记录,用体无完肤来形容毫不为过. [网友总结的宋喆个人信息(保护公民隐私,敏感信息已被打码)] 实际上,黑客们认真捉起奸来,可以获得诸多让人惊讶掉下巴的奇异信息.雷锋网决定向顶级黑客请教一下,暂时抛开法律和道德因素,究竟怎样人肉一个人呢?或者从反面来说,如果你不小心爱上了明星的媳妇而成为了全民公敌

php生成图片验证码-附五种验证码_php实例

以前输出验证码的时候用过一个方法,在前台用JS生成验证码字符串,再传递到后台用PHP输出验证码图像.这样在验证时就不需要使用$_SESSION传递验证码的值,直接用JS比较生成的字符串和输入的字符串是否相等即可. 本文以实例演示5种验证码,并介绍生成验证码的函数.PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session中. 1.HTML 5中验证码HTML代码如下: <div class="demo"> <h3>1.数字验证码&

asp.net 生成随机数的几种方法

我们可以使用两种方式初始化一个随机数发生器: ??第一种方法不指定随机种子,系统自动选取当前时间作为随机种子: ??random ro = new Random();     实例 private static char[] constant = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',

实战微博网赚的两种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近微博很火,其实如果能好好利用web2.0,即时不靠seo操作,小网站也能轻松获取几千的流量.国内最火的微博是新浪,今天就来分享下,如何利用新浪微博进行网赚.首先是代刷业务,这个是很常见的操作手法了.刷粉丝和评论,一些小商家会在抓八戒等平台上面发布任务,接任务做就是了.我看有的个人手里握着几千几万个账号,这样的数量做代刷业务不成问题.当然,

使用Java设计验证码生成程序

    我们来设计一个简单的验证码生成程序:验证码一个由4位的数字.字母随机组合而成图像,为了避免被光学字元识别(OCR,Optical Character Recognition)之类的程序识别出图片中的数字而失去效果,我们给图像中添加上几条干扰线. 1 package password; 2 /** 3 * 使用Java设计验证码生成程序 4 * @author hellokitty燕 5 */ 6 import java.awt.Color; 7 import java.awt.Font;

mysql 复制表数据,表结构的3种方法

 什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份.如果用mysqldump比较麻烦,备份.MYD,.MYI这样的文件呢,操作起来也还是麻烦. 一,复制表结构 方法1: mysql> create table a like users; //复制表结构 Query OK, 0 rows affected (0.50 sec)   mysql> show tables; +------+ | Tables_i