• 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"/>

  • 相关阅读:
    luogu1197 [JSOI2008]星球大战
    luogu2085 最小函数值
    Vijos 1144 小胖守皇宫 【树形DP】
    洛谷 P1941 飞扬的小鸟 【DP+众多特判】
    codevs 1516 平均分数 【数学推理+求逆序对】
    tyvj 1936 太空战队 【强连通分量】
    USACO 2.4 Overfencing 【种子染色法+递推】
    code[vs] 2488 绿豆蛙的归宿【反向拓扑+DP】
    USACO 2.3 Zero Sum 【搜索+字符串处理+模拟计算】
    USACO 2.3 Cow Pedigrees 【DP+前缀和优化】
  • 原文地址:https://www.cnblogs.com/woider/p/5491662.html
Copyright © 2020-2023  润新知