1. 程式人生 > >圖片驗證碼生成以及前端驗證

圖片驗證碼生成以及前端驗證

第一種是session 驗證方式
<?php
session_start();
//開啟session記錄驗證碼資料
vCode(4, 15);//設定驗證碼的字元個數和圖片基礎寬度  
//vCode 字元數目,字型大小,圖片寬度、高度
function vCode($num = 4, $size = 20, $width = 0, $height = 0) {
 !$width && $width = $num * $size * 4 / 5 + 15;
 !$height && $height = $size + 10;
 //設定驗證碼字元集合
 $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";
 //儲存獲取的驗證碼
 $code = '';
 //隨機選取字元
 for ($i = 0; $i < $num; $i++) {
  $code .= $str[mt_rand(0, strlen($str)-1)];
 }
 //建立驗證碼畫布
 $im = imagecreatetruecolor($width, $height);
 //背景色
 $back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100));  
 //文字色
 $text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255));

 imagefilledrectangle($im, 0, 0, $width, $height, $back_color);
  // 畫干擾線
 for($i = 0;$i < 5;$i++) {
  $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);
 }

  // 畫干擾點
 for($i = 0;$i < 50;$i++) {
  $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color);
 }

 //隨機旋轉角度陣列
 $array=array(5,4,3,2,1,0,-1,-2,-3,-4,-5);

  // 輸出驗證碼
 // imagefttext(image, size, angle, x, y, color, fontfile, text)
 @imagefttext($im, $size , array_rand($array), 12, $size + 6, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code);
 $_SESSION["VerifyCode"]=$code;
 //no-cache在每次請求時都會訪問伺服器
 //max-age在請求1s後再次請求會再次訪問伺服器,must-revalidate則第一發送請求會訪問伺服器,之後不會再訪問伺服器
 // header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");
 header("Cache-Control: no-cache");
 header("Content-type: image/png;charset=gb2312");
 //將圖片轉化為png格式
 imagepng($im);
 imagedestroy($im);
}
?>
第二種是cookie驗證
<?php
//session_start();
header("Content-type: image/png");//生成驗證碼圖片
// 全數字
$str = "2,3,4,5,6,7,8,a,b,c,d,e,f,h,i,j,k,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,V,W,X,Y";      //要顯示的字元,可自己進行增刪
$list = explode(",", $str);
$cmax = count($list) - 1;
$verifyCode = '';
for ( $i=0; $i < 4; $i++ ){
      $randnum = mt_rand(0, $cmax);
      $verifyCode .= $list[$randnum];           //取出字元,組合成為我們要的驗證碼字元
}
$im = imagecreate(58,28);    //生成圖片
$black = imagecolorallocate($im, 0,0,0);     //此條及以下三條為設定的顏色
$white = imagecolorallocate($im, 255,255,255);
$gray = imagecolorallocate($im, 200,200,200);
$red = imagecolorallocate($im, 255, 0, 0);
imagefill($im,0,0,$white);     //給圖片填充顏色
//將驗證碼繪入圖片
imagestring($im, 5, 10 , 8, $verifyCode, $black);    //將驗證碼寫入到圖片中

setCookie("code", $verifyCode, time() + 3600, "/");
//$_SESSION['code']=$verifyCode;
 //$_SESSION['code'] = $verifyCode;  //將字元放入SESSION中 
for($i=0;$i<50;$i++)  //加入干擾象素
{
     imagesetpixel($im, rand(0,100) , rand(0,100) , $black);   //加入點狀干擾素
     imagesetpixel($im, rand(0,100) , rand(0,100) , $red);
     imagesetpixel($im, rand(0,100) , rand(0,100) , $gray);
     imagearc($im,  rand(0,200),  rand(0,200), '5', '10', '75', '170', rand(0,300));    //加入弧線狀干擾素
    //imageline($im, rand(0,200), rand(0,200), rand(0,200), rand(0,200), $red);    //加入線條狀干擾素
}
imagepng($im);
imagedestroy($im);

分別驗證

session驗證方式 在驗證前端頁面php 在生成圖片驗證碼端

 //頁面提交資料 $varye 開啟session_start();
 session_start();
 $_SESSION["VerifyCode"]=$code;
 strtolower($code)==strtolower($varye);

cookie 驗證方式 注意時間限制

//設定cookie值
setCookie("code", $verifyCode, time() + 3600, "/");
//接收到生成的驗證碼 和頁面提交的驗證碼作對比
//$params['code']頁面提交資料
$user_code=$params['code'];
//$_COOKIE["code"]取出cookie中驗證碼 統一字元大小格式
if(strtolower($user_code)==strtolower($_COOKIE["code"])){
    echo "驗證成功!";
}

strtolower 返回轉換為小寫的字串。

相關推薦

圖片驗證生成以及前端驗證

第一種是session 驗證方式 <?php session_start(); //開啟session記錄驗證碼資料 vCode(4, 15);//設定驗證碼的字元個數和圖片基礎寬度 //vCode 字元數目,字型大小,圖片寬度、高度 functio

PHP GD 生成圖片驗證+session獲取儲存驗證

mark ast rac alloc orm ext random col nbsp 以下分享一個PHP制作的圖片驗證碼案例:案比例如以下圖: 運用PHP GD具體請看:http://www.php.net/manual/zh/book.im

用Canvas生成隨機驗證(後端前端都可以)

ntb inf pre text contex back data listen nload 一 、使用前端生成驗證碼 <!DOCTYPE html> <html> <head> <meta charse

Flask實戰第40天:圖片驗證生成技術

all see pillow 字體大小 src print new line 訪問 安裝pillow pip install pillow 在utils下新建python package命名為captcha 把需要需要用到的字體放在captcha下 編輯

Node.js圖片驗證生成svg-captcha

var option = { size: 6, // 驗證碼長度 ignoreChars: '0o1ilI', // 驗證碼字元中排除 0o1i noise: 2, // 干擾線條的數量 color: true, // 驗證碼的字元是否有顏色,預設沒有,如果設

Java的驗證生成工具類程式碼以及控制器程式碼

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import jav

[轉]php 圖片驗證生成 前後臺驗證

本文轉自:https://www.cnblogs.com/xiaoyezi/p/3541195.html 自己從前一段時間做了個php小專案,關於生成圖片驗證碼生成和後臺的驗證,把自己用到的東西總結一下,希望大家在用到相關問題的時候可以有一定的參考性。 首先,php驗證碼生成。 程式碼如下: 1.生成

Java生成圖片驗證(有點仿QQ驗證的意思)

看了挺多圖片驗證碼的程式碼,感覺沒什麼長的好看點的,就自己動手寫了個,寫完發現跟QQ的有幾分相似,比較滿意。 功能包括:自定義圖片尺寸和字元長度,隨機背景顏色和字元顏色,隨機字元偏移角度,字元平滑邊緣,干擾線,噪點,背景扭曲。 本來想做字元扭曲的,不知道怎的先生成文字再扭曲

Web---圖片驗證生成教程詳解-從簡單到複雜-從本地到前後臺

首先,我們先來看本地如何生成圖片驗證碼的,再來寫輸出到網頁的驗證碼如何實現。 先來看最簡單的—實現的功能是,將一個字串變成圖片寫入到檔案中 實現程式碼: package cn.hncu.img; import java.awt.Graphics;

學習筆記-圖片驗證生成

/** * 圖片驗證碼 * @param request * @param response */ @RequestMapping("/verifyImage") public void verifyImage(HttpServletRequest re

驗證生成驗證

+= pan onclick eat insert round tty ntb 驗證碼生成 js /**從b * */ var code ; //在全局定義驗證碼 //產生驗證碼 window.onload = function createCode(){

驗證生成工具

ray 位置 next create web hist awt public let CaptchaUnit.javapackage com.jason.www.common;import java.awt.*;import java.awt.image.BufferedI

java圖形驗證生成工具類及web頁面校驗驗證

組合 line des resp word buffere 需要 case ali 最近做驗證碼,參考網上案例,發現有不少問題,特意進行了修改和完善。驗證碼生成器:[ht

強大的驗證生成模塊

繁體字 new ase import ini lse 圖片 codes ID # 首先要安裝PIL庫 pip3 install pillow from PIL import Image, ImageDraw, ImageFont, ImageFilter import

登陸頁面的驗證生成驗證

數字 name ron als ntc per null 註冊 errorlog 登陸頁面的驗證碼生成與驗證 特點:基於strurs2框架 減少對數據庫的訪問次數 避免無效的訪問 提高服務器的性能 1 登陸界面:基於struts2框架 <s:src actio

JS驗證生成(入門級別)

mage default etc 更換 默認 function asc col lineto 練手項目:JavaScript驗證碼 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5

Django框架之驗證生成示例

console 函數 with sta fse == urn str ucc 一、生成隨機顏色的圖片 1)前端代碼展示 <!DOCTYPE html> <html lang="en"> <head> <meta char

四則運算實驗 驗證生成實驗

imu 填充 宋體 util image() 小孩 label create mage 程序設計要求: 編寫一個程序,寫一個能自動生成30道小學四則運算題目的 “軟件”。 實驗要求: 1) 按照題目內容要求編寫程序實現功能。 2) 實驗報告中要求包括程序設計思想、程

WEB——驗證生成、IO儲存、二進位制傳輸

執行下段程式,瀏覽器訪問127.0.0.1:8000 即可在頁面展現驗證碼 程式碼包含了驗證碼的生成 io儲存 二進位制資料傳輸等知識點 # coding=utf-8 # wsgi_server.py import random import string import base64

SpringCloud工作筆記063---Java 手機驗證生成_儲存到redis

    JAVA技術交流QQ群:170933152  List: 1.需求 2.實現 3.總結 ……1.需求…… 使用者提交訂單申請,需要輸入手機號,驗證二維碼。然後再判斷使用者輸入的手機號是否正確,正確則生成訂單資訊入庫