PHP 無組件產生BMP驗證碼來源程式

來源:互聯網
上載者:User

<?php
//This is a PHP 無組件產生BMP驗證碼來源程式,改自ASP無組件BMP驗證碼產生程式
//  Author: Wilson Chen
//  QQ: 36935338
//  Email: oeichenwei@yahoo.com

//  通過程式內嵌的"0-9A-Z"的BMP字型庫產生真彩色BMP(當然也非常的小)
//  為了儘可能的避免被crack,建議動態改變背景色,下載後適當變換字形庫。
//  為了便於處理,驗證碼的位元必須為偶數位,比如4、6、8....
//  使用的時候把該檔案儲存為test.php, 引用<img src="test.php" alt="my picture">即可
//  Original Author: Layen
//       QQ: 84815733
//       E-mail: support@ssaw.net
function validation($pSN)
{
     // 禁止緩衝
     header("Expires: -9999");
     header("Pragma: no-cache");
     header("cache-ctrol: no-cache");
//     header("ContentType: Image/BMP");
     header("ContentType: Image/BMP");

     $cOdds = 8; //雜點出現的機率
     $cAmount = 36;//文字數量
     $cCode = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

     // 顏色的資料(字元,背景)
     $vColorData[0] = "/x0/x0/x0"; //藍0,綠0,紅0(黑色)
     $vColorData[1] = "/xfa/xec/xd3"; //藍250,綠236,紅211(淺藍色)
     $num = strlen($pSN);

     //隨機產生字元
     for($i = 0; $i < $num; $i++)
     {
    $vCode[$i] = strpos($cCode, $pSN{$i});
     }

     // 字元的資料
     $vNumberData[0] = "1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111";
     $vNumberData[1] = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111";
     $vNumberData[2] = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011";
     $vNumberData[3] = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111";
     $vNumberData[4] = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011";
     $vNumberData[5] = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111";
     $vNumberData[6] = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111";
     $vNumberData[7] = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111";
     $vNumberData[8] = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111";
     $vNumberData[9] = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111";
     $vNumberData[10] = "1111011111111101111111101011111110101111111010111111101011111100000111110111011111011101111000100011";
     $vNumberData[11] = "1000000111110111101111011110111101110111110000111111011101111101111011110111101111011110111000000111";
     $vNumberData[12] = "1110000011110111101110111110111011111111101111111110111111111011111111101111101111011101111110001111";
     $vNumberData[13] = "1000001111110111011111011110111101111011110111101111011110111101111011110111101111011101111000001111";
     $vNumberData[14] = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011110111000000111";
     $vNumberData[15] = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011111111000111111";
     $vNumberData[16] = "1110000111110111011110111101111011111111101111111110111111111011100011101111011111011101111110001111";
     $vNumberData[17] = "1000100011110111011111011101111101110111110000011111011101111101110111110111011111011101111000100011";
     $vNumberData[18] = "1100000111111101111111110111111111011111111101111111110111111111011111111101111111110111111100000111";
     $vNumberData[19] = "1110000011111110111111111011111111101111111110111111111011111111101111111110111110111011111000011111";
     $vNumberData[20] = "1000100011110111011111011011111101011111110001111111010111111101101111110110111111011101111000100011";
     $vNumberData[21] = "1000111111110111111111011111111101111111110111111111011111111101111111110111111111011110111000000011";
     $vNumberData[22] = "1000100011110010011111001001111100100111110101011111010101111101010111110101011111010101111001010011";
     $vNumberData[23] = "1000100011110011011111001101111101010111110101011111010101111101100111110110011111011001111000110111";
     $vNumberData[24] = "1110001111110111011110111110111011111011101111101110111110111011111011101111101111011101111110001111";
     $vNumberData[25] = "1000000111110111101111011110111101111011110000011111011111111101111111110111111111011111111000111111";
     $vNumberData[26] = "1110001111110111011110111110111011111011101111101110111110111011111011101001101111011001111110001011";
     $vNumberData[27] = "1000001111110111011111011101111101110111110000111111010111111101101111110110111111011101111000110011";
     $vNumberData[28] = "1110000011110111101111011110111101111111111001111111111001111111111011110111101111011110111100000111";
     $vNumberData[29] = "1000000011101101101111110111111111011111111101111111110111111111011111111101111111110111111110001111";
     $vNumberData[30] = "1000100011110111011111011101111101110111110111011111011101111101110111110111011111011101111110001111";
     $vNumberData[31] = "1000100011110111011111011101111101110111111010111111101011111110101111111010111111110111111111011111";
     $vNumberData[32] = "1001010011110101011111010101111101010111110101011111001001111110101111111010111111101011111110101111";
     $vNumberData[33] = "1000100011110111011111101011111110101111111101111111110111111110101111111010111111011101111000100011";
     $vNumberData[34] = "1000100011110111011111011101111110101111111010111111110111111111011111111101111111110111111110001111";
     $vNumberData[35] = "1100000011110111011111111101111111101111111110111111110111111111011111111011111111101110111100000011";

     // 輸出影像檔頭
     $nFileSize = 54 + $num*300;
     print("/x42/x4d".chr(($nFileSize & 0xff)).chr($nFileSize >> 8));
     print("/x0/x0/x0/x0/x0/x0/x36/x0/x0/x0/x28/x0/x0/x0".chr($num*10)."/x0/x0/x0/xa/x0/x0/x0/x1/x0");

     //輸出映像資訊頭
     print("/x18/x0/x0/x0/x0/x0/xb0/x4/x0/x0/x12/xb/x0/x0/x12/xb/x0/x0/x0/x0/x0/x0/x0/x0/x0/x0");

     for($i = 9; $i >= 0; $i--) // 曆經所有行
     {
           for($ii = 0; $ii < $num; $ii++)  //曆經所有字
           {
                 // 逐行、逐字、逐像素地輸出映像資料
                 for($iii = 0; $iii < 10; $iii++) //曆經所有像素
                 {
                     if(rand(0, 100) < $cOdds)
                     {
                       //隨機產生雜點
                       print($vColorData[0]);
                     }
                     else
                     { 
                       print($vColorData[$vNumberData[$vCode[$ii]]{$i * 10 + $iii}]);
                     }
                 }
           }
     }
}
validation("123HEM");
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.