zoukankan      html  css  js  c++  java
  • PHP 动态生成验证码

    ……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为。这些机器人效率极高,完全不关心所攻击的表单的本来用途。它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为它们的主人谋取广告收入。

    要检验一个表单所面对的是一个真正的人,这种测试称为CAPTCHA(完全自动化公共图灵测试)。目前最有效的方法是生成一个要求用户输入的随机通行短语,为了防止支持OCR(光学字符识别)的机器人破解系统,通行短语字母必须变形,或者用随机的直线和点进行部分模糊处理。

    /* 生成验证码序列 */
    define("CAPTCHA_NUMCHARS", 6);  //验证码长度
    $pass_phrase = "";              //验证码内容
    for ($i = 0; $i < CAPTCHA_NUMCHARS; $i++) {
        //随机生成字母添加至验证码
        $pass_phrase .= chr(rand(97, 122));
    }
    
    /* 生成验证码图像 */
    define("CAPTCHA_WIDTH", 300);    //验证码宽度
    define("CAPTCHA_HEIGHT", 100);    //验证码高度
    //创建空白画布
    $img = imagecreatetruecolor(CAPTCHA_WIDTH, CAPTCHA_HEIGHT);
    //设置主题颜色
    $bg_color = imagecolorallocate($img, 225, 225, 225);       //白色背景
    $text_color = imagecolorallocate($img, 0, 0, 0);           //黑色字体
    $graphic_color = imagecolorallocate($img, 64, 64, 64);     //灰色图像
    //填充背景
    imagefilledrectangle($img, 0, 0, CAPTCHA_WIDTH, CAPTCHA_HEIGHT, $bg_color);
    //绘制随机直线
    for ($i = 0; $i < 10; $i++) {
        imageline($img, 0, rand() % CAPTCHA_HEIGHT, CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graphic_color);
    }
    //绘制随机点
    for ($i = 0; $i < 20; $i++) {
        imagefilledellipse($img, rand() % CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, 10, 10, $graphic_color);
    }
    //绘制验证码
    imagettftext($img, 60, 0, 20, CAPTCHA_HEIGHT - 20, $text_color, "C:/Windows/Fonts/SketchFlow Print.ttf", $pass_phrase);
    //作为PNG图像输出
    header("Content-type: image/png");
    imagepng($img);
    //从内存从撤销图像
    imagedestroy($img);

    使用PHP动态生成的图像并不存储在一个文件中,实际上,imagepng() 函数会在服务器的内存中生成一个二进制PNG图像,然后把它直接通过一个首部传送到浏览器。

    正因如此可以直接把PHP脚本放置在 <img> 标记的 src 属性中:<img src = "CAPTCHA.php"/>

  • 相关阅读:
    一步步学习SPD2010--第八章节--理解工作流(3)--使用操作和条件
    《python深度学习》笔记---9.1、深度学习知识回顾
    《python深度学习》笔记---8.5、生成式对抗网络简介
    《python深度学习》笔记---8.4、用变分自编码器生成图像
    《python深度学习》笔记---8.3、神经风格迁移
    Git 里面的 origin 到底代表啥意思?
    《python深度学习》笔记---8.2、DeepDream
    《python深度学习》笔记---8.1、使用LSTM生成文本
    《python深度学习》笔记---7.3.3、模型集成
    2021年1月份中国浏览器份额
  • 原文地址:https://www.cnblogs.com/woider/p/5491662.html
Copyright © 2011-2022 走看看