`
y1d2y3xyz
  • 浏览: 257089 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PHP校验码生成--备忘

    博客分类:
  • php
PHP 
阅读更多
<?php 
session_start();//保存生成值,以与用户输入比较
//-------------------------------------------------------------------------
$img_w       = 80;// 设置图片宽
$img_h       = 20;// 设置图片高
$pixel_num   = 200;//点越多干扰越大
$is_set_line = true;// 启用干扰线
$pixel_mode  = 2;// 干扰点模式,1,同色;2,杂色
//-------------------------------------------------------------------------

// 随机数产生器
function make_seed()
{
    list($usec, $sec) = explode(' ', microtime());
    return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());//4.2.0以下版本适用
$authnum = mt_rand(100, 99999);
// 加入session
$_SESSION['verifycode']=$authnum;
//echo $authnum;

//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreatetruecolor($img_w, $img_h);

$bg_color = ImageColorAllocate($im, mt_rand(250,255),mt_rand(250,255),mt_rand(250,255));

// 绘制背景
imagefill($im,0,0,$bg_color);

$total_width = 0;
$word_info = array();

// 循环,获取文字信息
$word_length = strlen($authnum);
for($ii=0; $ii<$word_length; $ii++)
{
    $word_space = mt_rand(1,5);
    $font = rand(3,5);
    mt_rand(1,9)%2 == 0?$top = 1:$top = 3;
    $word_info[$ii]['char']   = substr($authnum,$ii,1);
    $word_info[$ii]['font']   = $font;
    $word_info[$ii]['offset'] = $top;
    if($ii == 0)
    {
        $word_info[$ii]['width'] = 0;
    }
    $word_info[$ii]['width']  = imageFontWidth($font)+$word_space;
    $word_info[$ii]['height'] = imageFontHeight($font);
    $word_info[$ii]['color']  = imageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));

    // 文字总宽度
    $total_width += $word_info[$ii]['width'];

    // 取第一个字体的高度
    if($ii == 0)
    {
        $total_height = imagefontHeight($font);
    }
}

// 计算偏移
$offset_x = floor(($img_w - $total_width)/2);
$offset_y = floor(($img_h - $total_height)/2);

// 填充验证码
$wid = 0;
$i = 0;
foreach($word_info as $key=>$val)
{
    if($i>0)
    {
        $wid += $val['width'];
    }
    imagestring($im, $val['font'], $offset_x + $wid, $val['offset'] + $offset_y, $val['char'], $val['color']);
    $i++;
}
switch($pixel_mode)
{
    case 1:
        $pixel_color  = ImageColorAllocate($im,
                                        mt_rand(50,255),
                                        mt_rand(50,255),
                                        mt_rand(50,255));
        // 干扰象素
        for($i=0;$i<$pixel_num;$i++)
        {
            imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);
        }
        break;
    case '2':
        // 干扰象素
		for ($i=0;$i<=128;$i++)
		 {
		 $pixel_color = imagecolorallocate ($im, rand(0,255), rand(0,255), rand(0,255));
		 imagesetpixel($im,mt_rand(2,128),mt_rand(2,38),$pixel_color);
		 }
        break;

    default:
        $pixel_color  = ImageColorAllocate($im,
                                        mt_rand(50,255),
                                        mt_rand(50,255),
                                        mt_rand(50,255));
        // 干扰象素
        for($i=0;$i<$pixel_num;$i++)
        {
            imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);
        }
        break;
}
ImagePNG($im);
?> 

分享到:
评论

相关推荐

    CRC校验码生成工具

    CRC校验码生成工具,CRC校验码生成工具,CRC校验码生成工具

    Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3 最新版

    **Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3详解** 在工业自动化领域,数据通信的正确性和可靠性至关重要。其中,Modbus RTU(远程终端单元)是一种广泛应用的通信协议,它依赖于错误检测机制来确保数据在传输...

    C# CRC 16 校验码生成

    在C#中实现CRC16校验码生成,主要涉及以下几个核心知识点: 1. **CRC原理**:CRC的基本思想是通过附加一个固定长度的校验码来检测数据中的错误。这个校验码是根据数据按位运算后得到的,其计算过程类似于一种除法...

    海明校验码--计算机组成原理

    ### 海明校验码详解 #### 一、海明校验码简介 海明校验码是一种在数据传输过程中用于检测并纠正单比特错误的校验方法,在计算机组成原理中占据重要地位。该方法由Richard Hamming在1950年代初提出,其主要特点是...

    CRC校验码生成器(exe文件)

    CRC校验码生成器是实现这一功能的工具,通常以可执行文件(exe文件)的形式存在,用户可以简单地双击运行,对输入的报文进行加密和校验。 CRC的工作原理基于多项式除法,具体步骤如下: 1. **选择生成多项式**:...

    LRC校验码生成器_LRC校验码生成器_

    在本文中,我们将深入探讨LRC校验码的原理、生成方法以及C++实现的细节。 LRC校验码的原理: LRC校验码是一种逐位校验的方式,其主要目的是检测数据传输或存储过程中可能出现的一位错误。它通过将数据流中的每一位...

    CRC校验码生成说明

    CRC 校验码生成详解 CRC 校验码是一种常用的数据校验方式,用于检测数据传输过程中的错误。CRC 校验码生成过程涉及到多项式运算、移位操作和异或运算等。下面是对CRC 校验码生成过程的详细解释。 多项式和CRC 校验...

    LRC校验码生成工具

    VB(Visual Basic)是一种由微软公司开发的面向对象的编程语言,它允许开发者创建各种类型的应用程序,包括用于生成LRC校验码的工具。 在VB中编写LRC校验码生成器,主要是通过编程实现LRC计算算法。LRC的基本原理是...

    身份证校验码方法-Java

    根据提供的信息,我们可以总结出以下关于“身份证校验码方法-Java”的知识点: ### 一、身份证号码结构 中国的第二代居民身份证号码由18位组成,包括了以下几个部分: - **前6位**:行政区划代码。 - **第7至14位*...

    CheckSum校验码生成工具

    将十六进制字符串中的数(长度不限)累加求和,取累加和最低一个字节,生成CheckSum校验码。例如十六进制字符串:01 03 00 10 00 4D 31 30 30 20 32 36 64 42 6D 20 56 31 2E 30,生成CheckSum校验码为92(十六进制)...

    CRC16校验码生成器

    crc16校验码生成工具,MFC可执行程序

    车辆vin校验码生成器.xls

    用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,用于汽车等机械第九位校验码的生成,只需要输入前8位和后8位即可。第九位可以自动生成,

    Modbus RTU CRC-16校验码生成器CRC_Calc v0.2

    **Modbus RTU CRC-16校验码生成器CRC_Calc v0.2** Modbus RTU(Remote Terminal Unit)是一种广泛应用于工业自动化领域的通信协议,它基于串行通信,提供了一种设备间交换数据的标准方法。在Modbus RTU通信中,为了...

    校验码生成工具软件包

    校验码生成工具软件包

    组织机构代码校验码--生成/社会信用代码校验码

    详细的代码

    CRC16校验码生成工具

    一款CRC16的校验码生成工具,可以自己设置校验码生成多项式,可以对十六进制序列和文件进行校验,得出16位CRC校验码。字符串需要输入ASCii码形式,例如:AE 13 4F 78 0C 90 A0 B1,每两个中间要加空格,当校验多项式...

    C# 校验码生成程序

    在“C# 校验码生成程序”这个项目中,开发者使用了C#编程语言在Visual Studio 2008环境下创建了一个能够自动生成校验码的工具。这个工具不仅能够生成校验码,还能将生成的校验码转化为图片格式,方便在网页或应用中...

    Mudbus数据帧CRC校验码生成.zip

    3. **主函数**:主函数是整个程序的控制中心,它调用前面两个函数,将随机生成的数据帧传递给CRC检验码生成函数,然后比较生成的CRC校验码与数据帧中携带的校验码,以验证数据的完整性。这里,主函数的编写需谨慎...

Global site tag (gtag.js) - Google Analytics