PHP算式驗證碼和漢字驗證碼的實現方法

2022-06-11 20:30:16 字數 2463 閱讀 3939

在php**開發中,驗證碼可以有效地保護我們的表單不被惡意提交,但是如果不使用算式驗證碼或者漢字驗證碼,僅僅使用簡單的字母或者數字驗證碼,這樣的驗證碼方案真的安全嗎?

大家知道簡單數字或者字母驗證碼很容易被破解,但是算式驗證碼或者中文漢字驗證碼不容易被破解,所以建議大家在使用驗證碼的時候,盡量用算式驗證碼或者中文漢字驗證碼。

1.算式驗證碼:

<?php

session_start();

header("content-type: image/png");

$num1 = mt_rand(0,9);//第一位數

$num2 = mt_rand(1,9);//第二位數

$type_str = "+-*";//方法字串集合

$type = substr($type_str,rand(0,2),1);//隨機方法

$change = mt_rand(1,3);

if($change==1)elseif($change==2)elseif($change==3)

$im = imagecreate(68,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, $code, $black);

for($i=0;$i<70;$i++)

imagepng($im);

imagedestroy($im);

?>

2.中文漢字驗證碼:

<?php

session_start();

$len = mb_strlen($ch_str,"utf-8");//漢字長度

$str = array();

for($i=0;$i<4;$i++)

$authnum_session = implode("",$str);

$_session['authnum_session'] = $authnum_session; //記錄到session

header("content-type: image/png");

//的長和高

$image_x=100;

$image_y=50;

$im = imagecreate($image_x,$image_y);

//這裡取底色為白色

$bkg = imagecolorallocate($im,255,255,255);

//顯示的字型樣式,這個要把檔案放到對應的目錄中,如果你沒有檔案就去window的字型檔案中找乙個吧。

$fnt = "simhei.ttf";

//為影象分配一些顏色

$white=imagecolorallocate($im,234,185,95);

//在上畫橢圓弧,指定下座標點

imagearc($im, 150, 8, 20, 20, 75, 170, $white);

imagearc($im, 180, 7,50, 30, 75, 175, $white);

//在上畫一條線段,指定下座標點

imageline($im,20,20,180,30,$white);

imageline($im,20,18,170,50,$white);

imageline($im,25,50,80,50,$white);

//亂點的數量

$noise_num=3000;

$line_num=50;

//各種混亂字元的顏色

$rectangle_color=imagecolorallocate($im,0xaa,0xaa,0xaa);

$noise_color=imagecolorallocate($im,0x00,0x00,0x00);

$font_color=imagecolorallocate($im,0x00,0x00,0x00);

for($i=0;$i<$noise_num;$i++)

for($i=0;$i<$line_num;$i++)

for ($i=0;$i<4;$i++)

imagepng($im);

imagedestroy($im);

?>

注意:

中文漢字驗證碼單獨執行,然後獲取session會發現驗證碼和session內容不一致。但是在img 標籤中src屬性中引用這個中文漢字驗證碼檔案時,然後獲取session,這時兩者內容時一致的。

漢字驗證碼演算法

例如 好 字的十六進製制區位碼是ba c3,前兩位是區域,後兩位代表位置,ba處在第26區,好 處在此 區漢字的第35位也就是c3位置,所以數字 就是2635。這就是gb2312漢字區位原理。根據 漢字區位碼表 我們可以發現 第15區也就是af區以前都沒有漢字,只有少量符號,漢字都從第16區b0開始...

php驗證碼zhuc php實現驗證碼製作

php實現驗證碼製作 首先,看一張圖了解驗證碼生成的過程。1 生成驗證碼底圖 2 驗證碼內容 3 生成驗證碼 4 對比校驗 驗證碼實現的核心技術分析 a 底圖的 實現,並新增干擾元素 b 生成驗證內容 c 驗證內容儲存在服務端 d 驗證內容的校驗 下面看 實現的過程 這段 實現了產生 隨機數字,隨機...

驗證碼 簡單驗證碼識別

這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 興之所至之所以說簡單,我覺得是這樣的 抽了五張驗證碼扔進ps,50 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...