Heim Backend-Entwicklung PHP-Tutorial PHP-QR-Code-Generierung

PHP-QR-Code-Generierung

Aug 08, 2016 am 09:32 AM
array gt public return this

Es gibt mehrere Möglichkeiten, einen QR-Code zu generieren. Der schnellste Weg ist die Verwendung der Google-API. Schade, dass Google blockiert ist und es in vielen Fällen nicht so gut funktioniert. Lassen Sie uns nun über eine nützlichere Methode sprechen.

Ausführliche Dokumentation und Code finden Sie unter http://phpqrcode.sourceforge.net/.

Das Folgende ist eine vereinfachte Version, die automatisch einen QR-Code basierend auf den geschriebenen Informationen generiert. und speichern Sie es im angegebenen Verzeichnis.

Hauptprogrammcode

		<?php
       
		include "./phpqrcode/qrcode.php";   //导入主文件 
	    $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.&#39;qrcode&#39;.DIRECTORY_SEPARATOR;//文件保存目录
    	$PNG_WEB_DIR = &#39;qrcode/&#39;;//用于预览
    	if (!file_exists($PNG_TEMP_DIR))
        	mkdir($PNG_TEMP_DIR);
        $data = "test";//二维码写入内容
        
        $errorCorrectionLevel = &#39;L&#39;;//错误处理级别
        
        $matrixPointSize = 6;//二维码尺寸大小
        //md5加密生成文件名,data可以使用数据库id或者其他唯一标识符
        $filename = $PNG_TEMP_DIR.md5($data.&#39;|&#39;.$errorCorrectionLevel.&#39;|&#39;.$matrixPointSize).&#39;.png&#39;;
        //使用QRcode类生成二维码,文件保存在PNG_TEMP_DIR下
        QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, 2); 
        //图片预览
         echo &#39;<img src="&#39;.$PNG_WEB_DIR.basename($filename).&#39;" /><hr/>';  
        ?>
Nach dem Login kopieren

Anhänge können nicht hinzugefügt werden, was mich zwingt, den folgenden Code einzufügen. . . Kopieren Sie den folgenden langen Code in eine neue Datei und nennen Sie sie qrcode.php. Führen Sie den obigen Code aus, um einen QR-Code zu generieren. . . .

Zwei generierte QR-Codes veröffentlichen


PHP-Klassendateien (von http://phpqrcode.sourceforge.net /)

<?php

/*
 * PHP-QR-Code-Encoder
 *
 * Diese Datei enthält die MERGED-Version der PHP-QR-Code-Bibliothek.
 * Zur Vereinfachung wurde es automatisch aus der Vollversion generiert.
 *
 * Diese zusammengeführte Version wurde so konfiguriert, dass keine externen Dateien erforderlich sind.
 * mit deaktiviertem Cache, Fehlerprotokollierung und weniger, aber schnellerem Maskenabgleich.
 * Wenn Sie eine Optimierung benötigen, verwenden Sie bitte die nicht zusammengeführte Version.
 *
 * Die Vollversion, Dokumentation und Anwendungsbeispiele finden Sie unter:
 *
 * http://phpqrcode.sourceforge.net/
 * https://sourceforge.net/projects/phpqrcode/
 *
 * PHP-QR-Code wird unter LGPL 3 vertrieben
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * Bei dieser Bibliothek handelt es sich um freie Software; Sie können es weiterverbreiten und/oder
 * Ändern Sie es gemäß den Bedingungen der GNU Lesser General Public
 * Lizenz wie von der Free Software Foundation veröffentlicht; entweder
 * Version 3 der Lizenz oder eine spätere Version.
 *
 * Diese Bibliothek wird in der Hoffnung verteilt, dass sie nützlich sein wird,
 * jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie von
 * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU
 *Lesser General Public License für weitere Details.
 *
 * Sie sollten ein Exemplar der GNU Lesser General Public erhalten haben
 * Lizenz zusammen mit dieser Bibliothek; Wenn nicht, schreiben Sie an die Freie Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */
 
 

/*
 * Version: 1.1.4
 * Baujahr: 2010100721
 */



//---- qrconst.php --------------





/*
 * PHP-QR-Code-Encoder
 *
 * Gemeinsame Konstanten
 *
 * Basierend auf der libqrencode C-Bibliothek, die unter LGPL 2.1 vertrieben wird
 * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
 *
 * PHP-QR-Code wird unter LGPL 3 vertrieben
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * Bei dieser Bibliothek handelt es sich um freie Software; Sie können es weiterverbreiten und/oder
 * Ändern Sie es gemäß den Bedingungen der GNU Lesser General Public
 * Lizenz wie von der Free Software Foundation veröffentlicht; entweder
 * Version 3 der Lizenz oder eine spätere Version.
 *
 * Diese Bibliothek wird in der Hoffnung verteilt, dass sie nützlich sein wird,
 * jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie von
 * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU
 *Lesser General Public License für weitere Details.
 *
 * Sie sollten ein Exemplar der GNU Lesser General Public erhalten haben
 * Lizenz zusammen mit dieser Bibliothek; Wenn nicht, schreiben Sie an die Freie Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */
 
	// Kodierungsmodi
	 
	define('QR_MODE_NUL', -1);
	define('QR_MODE_NUM', 0);
	define('QR_MODE_AN', 1);
	define('QR_MODE_8', 2);
	define('QR_MODE_KANJI', 3);
	define('QR_MODE_STRUCTURE', 4);

	// Stufen der Fehlerkorrektur.

	define('QR_ECLEVEL_L', 0);
	define('QR_ECLEVEL_M', 1);
	define('QR_ECLEVEL_Q', 2);
	define('QR_ECLEVEL_H', 3);
	
	// Unterstützte Ausgabeformate
	
	define('QR_FORMAT_TEXT', 0);
	define('QR_FORMAT_PNG', 1);
	
	Klasse qrstr {
		öffentliche statische Funktion set(&$srctab, $x, $y, $repl, $replLen = false) {
			$srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false) ?$replLen:strlen($repl));
		}
	}//---- merged_config.php ----------------------------




/*
 * PHP-QR-Code-Encoder
 *
 * Konfigurationsdatei, optimiert für die zusammengeführte Version
 */
     
    define('QR_CACHEABLE', false);       // Cache verwenden – mehr Festplatten-Lesevorgänge, aber weniger CPU-Leistung, Masken und Formatvorlagen werden dort gespeichert
    define('QR_CACHE_DIR', false);       // wird verwendet, wenn QR_CACHEABLE === true
    define('QR_LOG_DIR', false);         // Standardverzeichnis für Fehlerprotokolle   
    
    define('QR_FIND_BEST_MASK', true);                                                          // wenn true, schätzt die beste Maske (spez. Standard, aber extrem langsam; auf false setzen, um die Leistung erheblich zu steigern, aber (wahrscheinlich) Code mit der schlechtesten Qualität
    define('QR_FIND_FROM_RANDOM', 2);                                                       // wenn false, werden alle verfügbaren Masken überprüft, andernfalls gibt der Wert an, dass die Anzahl der Masken überprüft werden muss, die Masken-ID wird zufällig ermittelt
    define('QR_DEFAULT_MASK', 2);                                                               // wenn QR_FIND_BEST_MASK === false
                                                  
    define('QR_PNG_MAXIMUM_SIZE', 1024);                                                       // maximal zulässige PNG-Bildbreite (in Pixel), optimieren, um sicherzustellen, dass GD und PHP mit so großen Bildern umgehen können
                                                  



//---- qrtools.php --------------




/*
 * PHP-QR-Code-Encoder
 *
 * Toolset, praktische und Debug-Dienstprogramme.
 *
 * PHP-QR-Code wird unter LGPL 3 vertrieben
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * Bei dieser Bibliothek handelt es sich um freie Software; Sie können es weiterverbreiten und/oder
 * Ändern Sie es gemäß den Bedingungen der GNU Lesser General Public
 * Lizenz wie von der Free Software Foundation veröffentlicht; entweder
 * Version 3 der Lizenz oder eine spätere Version.
 *
 * Diese Bibliothek wird in der Hoffnung verteilt, dass sie nützlich sein wird,
 * jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie von
 * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU
 *Lesser General Public License für weitere Details.
 *
 * Sie sollten ein Exemplar der GNU Lesser General Public erhalten haben
 * Lizenz zusammen mit dieser Bibliothek; Wenn nicht, schreiben Sie an die Freie Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */

    Klasse QRtools {
    
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion binarize($frame)
        {
            $len = count($frame);
            foreach ($frame as &$frameLine) {
                
                for($i=0; $i<$len; $i ) {
                    $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';
                }
            }
            
            return $frame;
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037')
        {
            $barcode_array = array();
            
            if (!is_array($mode))
                $mode = explosion(',', $mode);
                
            $eccLevel = 'L';
                
            if (count($mode) > 1) {
                $eccLevel = $mode[1];
            }
                
            $qrTab = QRcode::text($code, false, $eccLevel);
            $size = count($qrTab);
                
            $barcode_array['num_rows'] = $size;
            $barcode_array['num_cols'] = $size;
            $barcode_array['bcode'] = array();
                
            foreach ($qrTab as $line) {
                $arrAdd = array();
                foreach(str_split($line) as $char)
                    $arrAdd[] = ($char=='1')?1:0;
                $barcode_array['bcode'][] = $arrAdd;
            }
                    
            return $barcode_array;
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion clearCache()
        {
            self::$frames = array();
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion buildCache()
        {
			QRtools::markTime('before_build_cache');
			
			$mask = neue QRmask();
            for ($a=1; $a <= QRSPEC_VERSION_MAX; $a ) {
                $frame = QRspec::newFrame($a);
                if (QR_IMAGE) {
                    $fileName = QR_CACHE_DIR.'frame_'.$a.'.png';
                    QRimage::png(self::binarize($frame), $fileName, 1, 0);
                }
				
				$width = count($frame);
				$bitMask = array_fill(0, $width, array_fill(0, $width, 0));
				for ($maskNo=0; $maskNo<8; $maskNo )
					$mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true);
            }QRtools::markTime('after_build_cache');
        }

        //------------------------------------------------ ----------------------
        öffentliches statisches Funktionsprotokoll ($outfile, $err)
        {
            if (QR_LOG_DIR !== false) {
                if ($err != '') {
                    if ($outfile !== false) {
                        file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
                    } anders {
                        file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
                    }
                }    
            }
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion dumpMask($frame) 
        {
            $width = count($frame);
            for($y=0;$y<$width;$y ) {
                for($x=0;$x<$width;$x ) {
                    echo ord($frame[$y][$x]).',';
                }
            }
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion markTime($markerId)
        {
            list($usec, $sec) = explosion(" ", microtime());
            $time = ((float)$usec (float)$sec);
            
            if (!isset($GLOBALS['qr_time_bench']))
                $GLOBALS['qr_time_bench'] = array();
            
            $GLOBALS['qr_time_bench'][$markerId] = $time;
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion timeBenchmark()
        {
            self::markTime('finish');
        
            $lastTime = 0;
            $startTime = 0;
            $p = 0;

            echo '<table cellpadding="3" cellpacing="1">
                    <thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr>&lt ;/thead>
                    <tbody>';

            foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) {
                if ($p > 0) {
                    echo '<tr><th style="text-align:right">till '.$markerId.': </th><td>'.number_format($thisTime-$lastTime, 6). 's</td></tr>';
                } anders {
                    $startTime = $thisTime;
                }
                
                $p ;
                $lastTime = $thisTime;
            }
            
            echo '</tbody><tfoot>
                <tr style="border-top:2px solid black"><th style="text-align:right">TOTAL: </th><td>'.number_format($lastTime-$startTime , 6).'s</td></tr>
            </tfoot>
            </table>';
        }
        
    }//############################################# #########################
    
    QRtools::markTime('start');
    



//---- qrspec.php --------------




/*
 * PHP-QR-Code-Encoder
 *
 * QR-Code-Spezifikationen
 *
 * Basierend auf der libqrencode C-Bibliothek, die unter LGPL 2.1 vertrieben wird
 * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
 *
 * PHP-QR-Code wird unter LGPL 3 vertrieben
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * Die folgenden Daten/Spezifikationen stammen von
 * „Zweidimensionales Symbol – QR-Code – Basisspezifikation“ (JIS X0510:2004)
 *  oder
 * „Automatische Identifikations- und Datenerfassungstechniken – 
 * QR Code 2005 Barcode-Symbologie-Spezifikation“ (ISO/IEC 18004:2006)
 *
 * Bei dieser Bibliothek handelt es sich um freie Software; Sie können es weiterverbreiten und/oder
 * Ändern Sie es gemäß den Bedingungen der GNU Lesser General Public
 * Lizenz wie von der Free Software Foundation veröffentlicht; entweder
 * Version 3 der Lizenz oder eine spätere Version.
 *
 * Diese Bibliothek wird in der Hoffnung verteilt, dass sie nützlich sein wird,
 * jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie von
 * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU
 *Lesser General Public License für weitere Details.
 *
 * Sie sollten ein Exemplar der GNU Lesser General Public erhalten haben
 * Lizenz zusammen mit dieser Bibliothek; Wenn nicht, schreiben Sie an die Freie Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */
 
    define('QRSPEC_VERSION_MAX', 40);
    define('QRSPEC_WIDTH_MAX', 177);

    define('QRCAP_WIDTH', 0);
    define('QRCAP_WORDS', 1);
    define('QRCAP_REMINDER', 2);
    define('QRCAP_EC', 3);

    Klasse QRspec {
    
        öffentliches statisches $capacity = array(
            array( 0, 0, 0, array( 0, 0, 0, 0)),
            array( 21, 26, 0, array( 7, 10, 13, 17)), // 1
            Array( 25, 44, 7, Array( 10, 16, 22, 28)),
            Array( 29, 70, 7, Array( 15, 26, 36, 44)),
            Array( 33, 100, 7, Array( 20, 36, 52, 64)),
            array( 37, 134, 7, array( 26, 48, 72, 88)), // 5
            Array( 41, 172, 7, Array( 36, 64, 96, 112)),
            Array( 45, 196, 0, Array( 40, 72, 108, 130)),
            Array( 49, 242, 0, Array( 48, 88, 132, 156)),
            Array( 53, 292, 0, Array( 60, 110, 160, 192)),
            array( 57, 346, 0, array( 72, 130, 192, 224)), //10
            Array( 61, 404, 0, Array( 80, 150, 224, 264)),
            Array( 65, 466, 0, Array( 96, 176, 260, 308)),
            Array( 69, 532, 0, Array( 104, 198, 288, 352)),
            Array( 73, 581, 3, Array( 120, 216, 320, 384)),
            array( 77, 655, 3, array( 132, 240, 360, 432)), //15
            Array( 81, 733, 3, Array( 144, 280, 408, 480)),
            Array( 85, 815, 3, Array( 168, 308, 448, 532)),
            Array( 89, 901, 3, Array( 180, 338, 504, 588)),
            Array( 93, 991, 3, Array( 196, 364, 546, 650)),
            array( 97, 1085, 3, array( 224, 416, 600, 700)), //20
            Array(101, 1156, 4, Array( 224, 442, 644, 750)),
            Array(105, 1258, 4, Array( 252, 476, 690, 816)),
            Array(109, 1364, 4, Array( 270, 504, 750, 900)),
            Array(113, 1474, 4, Array( 300, 560, 810, 960)),
            array(117, 1588, 4, array( 312, 588, 870, 1050)), //25
            array(121, 1706, 4, array( 336, 644, 952, 1110)),
            array(125, 1828, 4, array( 360, 700, 1020, 1200)),
            array(129, 1921, 3, array( 390, 728, 1050, 1260)),
            Array(133, 2051, 3, Array( 420, 784, 1140, 1350)),
            array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30
            Array(141, 2323, 3, Array( 480, 868, 1290, 1530)),
            Array(145, 2465, 3, Array( 510, 924, 1350, 1620)),
            array(149, 2611, 3, array( 540, 980, 1440, 1710)),
            array(153, 2761, 3, array( 570, 1036, 1530, 1800)),
            array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35
            array(161, 3034, 0, array( 600, 1120, 1680, 1980)),
            array(165, 3196, 0, array( 630, 1204, 1770, 2100)),
            array(169, 3362, 0, array( 660, 1260, 1860, 2220)),
            array(173, 3532, 0, array( 720, 1316, 1950, 2310)),
            array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40
        );
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion getDataLength($version, $level)
        {
            return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];
        }//------------------------------------------------ ----------------------
        öffentliche statische Funktion getECCLength($version, $level)
        {
            return self::$capacity[$version][QRCAP_EC][$level];
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion getWidth($version)
        {
            return self::$capacity[$version][QRCAP_WIDTH];
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion getRemainder($version)
        {
            return self::$capacity[$version][QRCAP_REMINDER];
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion getMinimumVersion($size, $level)
        {

            for($i=1; $i<= QRSPEC_VERSION_MAX; $i ) {
                $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level];
                if($words >= $size) 
                    return $i;
            }

            return -1;
        }
    
        //############################################# ######################
        
        öffentliches statisches $lengthTableBits = array(
            Array(10, 12, 14),
            Array( 9, 11, 13),
            Array( 8, 16, 16),
            Array( 8, 10, 12)
        );
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion lengthIndicator($mode, $version)
        {
            if ($mode == QR_MODE_STRUCTURE)
                0 zurückgeben;
                
            if ($version <= 9) {
                $l = 0;
            } else if ($version <= 26) {
                $l = 1;
            } anders {
                $l = 2;
            }

            return self::$lengthTableBits[$mode][$l];
        }
        
        //------------------------------------------------ ----------------------
        öffentliche statische Funktion MaximumWords($mode, $version)
        {
            if($mode == QR_MODE_STRUCTURE) 
                Rückkehr 3;
                
            if($version <= 9) {
                $l = 0;
            } else if($version <= 26) {
                $l = 1;
            } anders {
                $l = 2;
            }

            $bits = self::$lengthTableBits[$mode][$l];
            $words = (1 << $bits) - 1;
            
            if($mode == QR_MODE_KANJI) {
                $words *= 2; // die Anzahl der Bytes ist erforderlich
            }

            return $words;
        }// Fehlerkorrekturcode ------------------------------ --
        // Tabelle des Fehlerkorrekturcodes (Reed-Solomon-Block)
        // Siehe Tabelle 12-16 (S. 30-36), JIS X0510:2004.

        öffentliches statisches $eccTable = array(
            array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)),
            array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1
            array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)),
            array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)),
            array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)),
            array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5
            array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)),
            array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)),
            array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)),
            array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)),
            array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10
            array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)),
            array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)),
            array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)),
            array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)),
            array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15
            array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)),
            array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)),
            array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)),
            array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)),
            array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20
            array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)),
            array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)),
            array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)),
            array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)),
            array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25
            array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)),
            array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)),
            array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)),
            array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)),
            array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30
            array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)),
            array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)),
            array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)),
            array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)),
            array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35
            array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)),
            array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)),
            array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)),
            array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)),
            array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40
        );                                                                       

        //------------------------------------------------ ----------------------
        // CACHEBAR!!!
        
        öffentliche statische Funktion getEccSpec($version, $level, array &$spec)
        {
            if (count($spec) < 5) {
                $spec = array(0,0,0,0,0);
            }

            $b1 = self::$eccTable[$version][$level][0];
            $b2 = self::$eccTable[$version][$level][1];
            $data = self::getDataLength($version, $level);
            $ecc = self::getECCLength($version, $level);

            if($b2 == 0) {
                $spec[0] = $b1;
                $spec[1] = (int)($data / $b1);
                $spec[2] = (int)($ecc / $b1);
                $spec[3] = 0; 
                $spec[4] = 0;
            } anders {
                $spec[0] = $b1;
                $spec[1] = (int)($data / ($b1 $b2));
                $spec[2] = (int)($ecc / ($b1 $b2));
                $spec[3] = $b2;
                $spec[4] = $spec[1] 1;
            }
        }// Ausrichtungsmuster ------------------------------- -----

        // Positionen von Ausrichtungsmustern.
        // Dieses Array enthält nur die zweite und dritte Position des 
        // Ausrichtungsmuster. Der Rest kann aus der Entfernung berechnet werden 
        // zwischen ihnen.
         
        // Siehe Tabelle 1 in Anhang E (S. 71) von JIS X0510:2004.
         
        öffentliches statisches $alignmentPattern = array(      
            Array( 0, 0),
            array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5
            array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10
            array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15
            array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20
            array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25
            array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30
            array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35
            array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40
        );                                                                                  

        
        /**-------------------------------------------------- -------------------
         * Setzen Sie eine Ausrichtungsmarkierung.
         * @param-Frame
         * @param Breite
         * @param ox,oy Mittelpunktkoordinate des Musters*/
        öffentliche statische Funktion putAlignmentMarker(array &$frame, $ox, $oy)
        {
            $finder = array(
                „xa1xa1xa1xa1xa1“,
                „xa1xa0xa0xa0xa1“,
                „xa1xa0xa1xa0xa1“,
                „xa1xa0xa0xa0xa1“,
                „xa1xa1xa1xa1xa1“
            );                        
            
            $yStart = $oy-2;         
            $xStart = $ox-2;
            
            for($y=0; $y<5; $y ) {
                QRstr::set($frame, $xStart, $yStart $y, $finder[$y]);
            }
        }

        //------------------------------------------------ ----------------------
        öffentliche statische Funktion putAlignmentPattern($version, &$frame, $width)
        {
            if($version < 2)
                zurückkehren;

            $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0];
            if($d < 0) {
                $w = 2;
            } anders {
                $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d 2);
            }

            if($w * $w - 3 == 1) {
                $x = self::$alignmentPattern[$version][0];
                $y = self::$alignmentPattern[$version][0];
                self::putAlignmentMarker($frame, $x, $y);
                zurückkehren;
            }

            $cx = self::$alignmentPattern[$version][0];
            for($x=1; $x<$w - 1; $x ) {
                self::putAlignmentMarker($frame, 6, $cx);
                self::putAlignmentMarker($frame, $cx, 6);
                $cx = $d;
            }

            $cy = self::$alignmentPattern[$version][0];
            for($y=0; $y<$w-1; $y ) {
                $cx = self::$alignmentPattern[$version][0];
                for($x=0; $x<$w-1; $x ) {
                    self::putAlignmentMarker($frame, $cx, $cy);
                    $cx = $d;
                }
                $cy = $d;
            }
        }

        // Versionsinformationsmuster ---------------------------

		// Versionsinformationsmuster (BCH-codiert).
        // Siehe Tabelle 1 in Anhang D (S. 68) von JIS X0510:2004.
        
		// Größe: [QRSPEC_VERSION_MAX - 6]
		
        öffentliches statisches $versionPattern = array(
            0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,
            0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,
            0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,
            0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,
            0x27541, 0x28c69
        );

        //------------------------------------------------ ----------------------
        öffentliche statische Funktion getVersionPattern($version)
        {
            if($version < 7 || $version > QRSPEC_VERSION_MAX)
                0 zurückgeben;

            return self::$versionPattern[$version -7];
        }// Formatinformationen ------------------------------- ----
        // Siehe calcFormatInfo in tests/test_qrspec.c (original qrencode c lib)
        
        öffentliches statisches $formatInfo = array(
            Array (0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976),
            Array (0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0),
            Array (0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed),
            Array (0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)
        );

        öffentliche statische Funktion getFormatInfo($mask, $level)
        {
            if($mask < 0 || $mask > 7)
                0 zurückgeben;
                
            if($level < 0 || $level > 3)
                0 zurückgeben;                

            return self::$formatInfo[$level][$mask];
        }

        // Rahmen ----------------------------------------------- ----------------
        // Cache der ersten Frames.
         
        öffentliche statische $frames = array();

        /**-------------------------------------------------- -------------------
         * Legen Sie ein Suchmuster fest.
         * @param-Frame
         * @param Breite
         * @param ox,oy obere linke Koordinate des Musters*/
        öffentliche statische Funktion putFinderPattern(&$frame, $ox, $oy)
        {
            $finder = array(
                „xc1xc1xc1xc1xc1xc1xc1“,
                „xc1xc0xc0xc0xc0xc0xc1“,
                „xc1xc0xc1xc1xc1xc0xc1“,
                „xc1xc0xc1xc1xc1xc0xc1“,
                „xc1xc0xc1xc1xc1xc0xc1“,
                „xc1xc0xc0xc0xc0xc0xc1“,
                „xc1xc1xc1xc1xc1xc1xc1“
            );                            
            
            for($y=0; $y<7; $y ) {
                QRstr::set($frame, $ox, $oy $y, $finder[$y]);
            }
        }

        //------------------------------------------------ ----------------------
        öffentliche statische Funktion createFrame($version)
        {
            $width = self::$capacity[$version][QRCAP_WIDTH];
            $frameLine = str_repeat (" ", $width);
            $frame = array_fill(0, $width, $frameLine);

            // Finder-Muster
            self::putFinderPattern($frame, 0, 0);
            self::putFinderPattern($frame, $width - 7, 0);
            self::putFinderPattern($frame, 0, $width - 7);
            
            // Trennzeichen
            $yOffset = $width - 7;
            
            for($y=0; $y<7; $y ) {
                $frame[$y][7] = "xc0";
                $frame[$y][$width - 8] = "xc0";
                $frame[$yOffset][7] = "xc0";
                $yOffset ;
            }
            
            $setPattern = str_repeat("xc0", 8);
            
            QRstr::set($frame, 0, 7, $setPattern);
            QRstr::set($frame, $width-8, 7, $setPattern);
            QRstr::set($frame, 0, $width - 8, $setPattern);
        
            // Formatinformationen
            $setPattern = str_repeat("x84", 9);
            QRstr::set($frame, 0, 8, $setPattern);
            QRstr::set($frame, $width - 8, 8, $setPattern, 8);
            
            $yOffset = $width - 8;

            for($y=0; $y<8; $y ,$yOffset ) {
                $frame[$y][8] = "x84";
                $frame[$yOffset][8] = "x84";
            }

            // Timing-Muster  
            
            for($i=1; $i<$width-15; $i ) {
                $frame[6][7 $i] = chr(0x90 | ($i & 1));
                $frame[7 $i][6] = chr(0x90 | ($i & 1));
            }
            
            // Ausrichtungsmuster  
            self::putAlignmentPattern($version, $frame, $width);
            
            // Versionsinformationen 
            if($version >= 7) {
                $vinf = self::getVersionPattern($version);

                $v = $vinf;
                
                for($x=0; $x<6; $x ) {
                    for($y=0; $y<3; $y ) {
                        $frame[($width - 11) $y][$x] = chr(0x88 ​​| ($v & 1));
                        $v = $v >> 1;
                    }
                }

                $v = $vinf;
                for($y=0; $y<6; $y ) {
                    for($x=0; $x<3; $x ) {
                        $frame[$y][$x ($width - 11)] = chr(0x88 ​​| ($v & 1));
                        $v = $v >> 1;
                    }
                }
            }
    
            // und ein bisschen...  
            $frame[$width - 8][8] = "x81";
            
            return $frame;
        }//------------------------------------------------ ----------------------
        öffentliche statische Funktion debug($frame, $binary_mode = false)
        {
            if ($binary_mode) {
            
                    foreach ($frame as &$frameLine) {
                        $frameLine = join('<span class="m">  </span>', explosion('0', $frameLine));
                        $frameLine = join('██', explosion('1', $frameLine));
                    }
                    
                    ?>
                <Stil>
                    .m { Hintergrundfarbe: weiß; }
                </style>
                <?php
                    echo '<pre class="brush:php;toolbar:false"><tt><br/ ><br/ ><br/ >        ';
                    echo join("<br/ >        ", $frame);
                    echo '</tt>






'; } anders { foreach ($frame as &$frameLine) { $frameLine = join(' ', explosion("xc0", $frameLine)); $frameLine = join('?', explosion("xc1", $frameLine)); $frameLine = join(' ', explosion("xa0", $frameLine)); $frameLine = join('?', explosion("xa1", $frameLine)); $frameLine = join('', explosion("x84", $frameLine)); //Format 0 $frameLine = join('', explosion("x85", $frameLine)); //Format 1 $frameLine = join('?', explosion("x81", $frameLine)); //spezielles Bit $frameLine = join(' ', explosion("x90", $frameLine)); //Uhr 0 $frameLine = join('?', explosion("x91", $frameLine)); //Uhr 1 $frameLine = join(' ', explosion("x88", $frameLine)); //Version $frameLine = join('?', explosion("x89", $frameLine)); //Version $frameLine = join('?', explosion("x01", $frameLine)); $frameLine = join('?', explosion(" ", $frameLine)); } ?> .p { Hintergrundfarbe: gelb; } .m { Hintergrundfarbe: #00FF00; } .s { Hintergrundfarbe: #FF0000; } .c { Hintergrundfarbe: Aqua; } .x { Hintergrundfarbe: rosa; } .f { Hintergrundfarbe: Gold; } <tt>"; echo join("<br/ >", $frame); echo "</tt>"; } } //------------------------------------------------ ---------------------- öffentliche statische Funktion serial($frame) { return gzcompress(join("n", $frame), 9); } //------------------------------------------------ ---------------------- öffentliche statische Funktion unserial($code) { return explosion("n", gzuncompress($code)); }//------------------------------------------------ ---------------------- öffentliche statische Funktion newFrame($version) { if($version < 1 || $version > QRSPEC_VERSION_MAX) null zurückgeben; if(!isset(self::$frames[$version])) { $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; if (QR_CACHEABLE) { if (file_exists($fileName)) { self::$frames[$version] = self::unserial(file_get_contents($fileName)); } anders { self::$frames[$version] = self::createFrame($version); file_put_contents($fileName, self::serial(self::$frames[$version])); } } anders { self::$frames[$version] = self::createFrame($version); } } if(is_null(self::$frames[$version])) null zurückgeben; return self::$frames[$version]; } //------------------------------------------------ ---------------------- öffentliche statische Funktion rsBlockNum($spec) { return $spec[0] $spec[3]; } öffentliche statische Funktion rsBlockNum1($spec) { return $spec[0]; } öffentliche statische Funktion rsDataCodes1($spec) { return $spec[1]; } öffentliche statische Funktion rsEccCodes1($spec) { return $spec[2]; } öffentliche statische Funktion rsBlockNum2($spec) { return $spec[3]; } öffentliche statische Funktion rsDataCodes2($spec) { return $spec[4]; } öffentliche statische Funktion rsEccCodes2($spec) { return $spec[2]; } öffentliche statische Funktion rsDataLength($spec) { return ($spec[0] * $spec[1]) ($spec[3] * $spec[4]); } öffentliche statische Funktion rsEccLength($spec) { return ($spec[0] $spec[3]) * $spec[2]; } } //---- qrimage.php -------------- /* * PHP-QR-Code-Encoder * * Bildausgabe des Codes mit GD2 * * PHP-QR-Code wird unter LGPL 3 vertrieben * Copyright (C) 2010 Dominik Dzienia * * Bei dieser Bibliothek handelt es sich um freie Software; Sie können es weiterverbreiten und/oder * Ändern Sie es gemäß den Bedingungen der GNU Lesser General Public * Lizenz wie von der Free Software Foundation veröffentlicht; entweder * Version 3 der Lizenz oder eine spätere Version. * * Diese Bibliothek wird in der Hoffnung verteilt, dass sie nützlich sein wird, * jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie von * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU *Lesser General Public License für weitere Details. * * Sie sollten ein Exemplar der GNU Lesser General Public erhalten haben * Lizenz zusammen mit dieser Bibliothek; Wenn nicht, schreiben Sie an die Freie Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ define('QR_IMAGE', true); Klasse QRimage { //------------------------------------------------ ---------------------- öffentliche statische Funktion png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4, $saveandprint=FALSE) { $image = self::image($frame, $pixelPerPoint, $outerFrame); if ($filename === false) { Header("Inhaltstyp: image/png"); ImagePng($image); } anders { if($saveandprint===TRUE){ ImagePng($image, $filename); header("Inhaltstyp: image/png"); ImagePng($image); }anders{ ImagePng($image, $filename); } } ImageDestroy($image); } //------------------------------------------------ ---------------------- öffentliche statische Funktion jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) { $image = self::image($frame, $pixelPerPoint, $outerFrame); if ($filename === false) { Header("Inhaltstyp: Bild/JPEG"); ImageJpeg($image, null, $q); } anders { ImageJpeg($image, $filename, $q); } ImageDestroy($image); }//------------------------------------------------ ---------------------- privates statisches Funktionsbild ($frame, $pixelPerPoint = 4, $outerFrame = 4) { $h = count($frame); $w = strlen($frame[0]); $imgW = $w 2*$outerFrame; $imgH = $h 2*$outerFrame; $base_image =ImageCreate($imgW, $imgH); $col[0] = ImageColorAllocate($base_image,255,255,255); $col[1] = ImageColorAllocate($base_image,0,0,0); imagefill($base_image, 0, 0, $col[0]); for($y=0; $y<$h; $y ) { for($x=0; $x<$w; $x ) { if ($frame[$y][$x] == '1') { ImageSetPixel($base_image,$x $outerFrame,$y $outerFrame,$col[1]); } } } $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); ImageDestroy($base_image); return $target_image; } } //---- qrinput.php -------------- /* * PHP-QR-Code-Encoder * * Eingabekodierungsklasse * * Basierend auf der libqrencode C-Bibliothek, die unter LGPL 2.1 vertrieben wird * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi * * PHP-QR-Code wird unter LGPL 3 vertrieben * Copyright (C) 2010 Dominik Dzienia * * Bei dieser Bibliothek handelt es sich um freie Software; Sie können es weiterverbreiten und/oder * Ändern Sie es gemäß den Bedingungen der GNU Lesser General Public * Lizenz wie von der Free Software Foundation veröffentlicht; entweder * Version 3 der Lizenz oder eine spätere Version. * * Diese Bibliothek wird in der Hoffnung verteilt, dass sie nützlich sein wird, * jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie von * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU *Lesser General Public License für weitere Details. * * Sie sollten ein Exemplar der GNU Lesser General Public erhalten haben * Lizenz zusammen mit dieser Bibliothek; Wenn nicht, schreiben Sie an die Freie Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ define('STRUCTURE_HEADER_BITS', 20); define('MAX_STRUCTURED_SYMBOLS', 16); Klasse QRinputItem { öffentlicher $-Modus; öffentliche $-Größe; öffentliche $Daten; öffentlicher $bstream; öffentliche Funktion __construct($mode, $size, $data, $bstream = null) { $setData = array_slice($data, 0, $size); if (count($setData) < $size) { $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); } if(!QRinput::check($mode, $size, $setData)) { throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); null zurückgeben; } $this->mode = $mode; $this->size = $size; $this->data = $setData; $this->bstream = $bstream; } //------------------------------------------------ ---------------------- öffentliche Funktion encodeModeNum($version) { versuchen { $words = (int)($this->size / 3); $bs = new QRbitstream(); $val = 0x1; $bs->appendNum(4, $val); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); for($i=0; $i<$words; $i ) { $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; $val = (ord($this->data[$i*3 1]) - ord('0')) * 10; $val = (ord($this->data[$i*3 2]) - ord('0')); $bs->appendNum(10, $val); } if($this->size - $words * 3 == 1) { $val = ord($this->data[$words*3]) - ord('0'); $bs->appendNum(4, $val); } else if($this->size - $words * 3 == 2) { $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; $val = (ord($this->data[$words*3 1]) - ord('0')); $bs->appendNum(7, $val); } $this->bstream = $bs; 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } }//------------------------------------------------ ---------------------- öffentliche Funktion encodeModeAn($version) { versuchen { $words = (int)($this->size / 2); $bs = new QRbitstream(); $bs->appendNum(4, 0x02); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); for($i=0; $i<$words; $i ) { $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 1])); $bs->appendNum(11, $val); } if($this->size & 1) { $val = QRinput::lookAnTable(ord($this->data[$words * 2])); $bs->appendNum(6, $val); } $this->bstream = $bs; 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } } //------------------------------------------------ ---------------------- öffentliche Funktion encodeMode8($version) { versuchen { $bs = new QRbitstream(); $bs->appendNum(4, 0x4); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); for($i=0; $i<$this->size; $i ) { $bs->appendNum(8, ord($this->data[$i])); } $this->bstream = $bs; 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } } //------------------------------------------------ ---------------------- öffentliche Funktion encodeModeKanji($version) { versuchen { $bs = new QRbitrtream(); $bs->appendNum(4, 0x8); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); for($i=0; $i<$this->size; $i =2) { $val = (ord($this->data[$i]) << 8) | ord($this->data[$i 1]); if($val <= 0x9ffc) { $val -= 0x8140; } anders { $val -= 0xc140; } $h = ($val >> 8) * 0xc0; $val = ($val & 0xff) $h; $bs->appendNum(13, $val); } $this->bstream = $bs; 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } } //------------------------------------------------ ---------------------- öffentliche Funktion encodeModeStructure() { versuchen { $bs = new QRbitstream(); $bs->appendNum(4, 0x03); $bs->appendNum(4, ord($this->data[1]) - 1); $bs->appendNum(4, ord($this->data[0]) - 1); $bs->appendNum(8, ord($this->data[2])); $this->bstream = $bs; 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } } //------------------------------------------------ ---------------------- öffentliche Funktion geschätztBitStreamSizeOfEntry($version) { $bits = 0; if($version == 0) $version = 1; switch($this->mode) { case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); brechen; case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); brechen; case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); brechen; case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; Fall QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; Standard: 0 zurückgeben; } $l = QRspec::lengthIndicator($this->mode, $version); $m = 1 << $l; $num = (int)(($this->size $m - 1) / $m); $bits = $num * (4 $l); $bits zurückgeben; }//------------------------------------------------ ---------------------- öffentliche Funktion encodeBitStream($version) { versuchen { unset($this->bstream); $words = QRspec::maximumWords($this->mode, $version); if($this->size > $words) { $st1 = new QRinputItem($this->mode, $words, $this->data); $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); $st1->encodeBitStream($version); $st2->encodeBitStream($version); $this->bstream = new QRbitstream(); $this->bstream->append($st1->bstream); $this->bstream->append($st2->bstream); unset($st1); unset($st2); } anders { $ret = 0; switch($this->mode) { case QR_MODE_NUM: $ret = $this->encodeModeNum($version); brechen; case QR_MODE_AN: $ret = $this->encodeModeAn($version); brechen; case QR_MODE_8: $ret = $this->encodeMode8($version); brechen; case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); brechen; Standard: brechen; } if($ret < 0) return -1; } return $this->bstream->size(); } Catch (Ausnahme $e) { return -1; } } }; //############################################# ######################### Klasse QRinput { öffentliche $items; private $version; private $-Ebene; //------------------------------------------------ ---------------------- öffentliche Funktion __construct($version = 0, $level = QR_ECLEVEL_L) { if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { throw new Exception('Invalid version no'); return NULL; } $this->version = $version; $this->level = $level; } //------------------------------------------------ ---------------------- öffentliche Funktion getVersion() { return $this->version; } //------------------------------------------------ ---------------------- öffentliche Funktion setVersion($version) { if($version < 0 || $version > QRSPEC_VERSION_MAX) { throw new Exception('Invalid version no'); return -1; } $this->version = $version; 0 zurückgeben; } //------------------------------------------------ ---------------------- öffentliche Funktion getErrorCorrectionLevel() { return $this->level; } //------------------------------------------------ ---------------------- öffentliche Funktion setErrorCorrectionLevel($level) { if($level > QR_ECLEVEL_H) { throw new Exception('Invalid ECLEVEL'); return -1; } $this->level = $level; 0 zurückgeben; } //------------------------------------------------ ---------------------- öffentliche Funktion appendEntry(QRinputItem $entry) { $this->items[] = $entry; } //------------------------------------------------ ---------------------- öffentliche Funktion append($mode, $size, $data) { versuchen { $entry = new QRinputItem($mode, $size, $data); $this->items[] = $entry; 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } } //------------------------------------------------ ---------------------- öffentliche Funktion insertStructuredAppendHeader($size, $index, $parity) { if( $size > MAX_STRUCTURED_SYMBOLS ) { neue Ausnahme auslösen('insertStructuredAppendHeader falsche Größe'); }if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { throw new Exception('insertStructuredAppendHeader falscher Index'); } $buf = array($size, $index, $parity); versuchen { $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); array_unshift($this->items, $entry); 0 zurückgeben; } Catch (Ausnahme $e) { return -1; } } //------------------------------------------------ ---------------------- öffentliche Funktion calcParity() { $parität = 0; foreach($this->items as $item) { if($item->mode != QR_MODE_STRUCTURE) { for($i=$item->size-1; $i>=0; $i--) { $parity ^= $item->data[$i]; } } } return $parity; } //------------------------------------------------ ---------------------- öffentliche statische Funktion checkModeNum($size, $data) { for($i=0; $i<$size; $i ) { if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ return false; } } return true; } //------------------------------------------------ ---------------------- öffentliche statische Funktion geschätztBitsModeNum($size) { $w = (int)$size / 3; $bits = $w * 10; switch($size - $w * 3) { Fall 1: $bits = 4; brechen; Fall 2: $bits = 7; brechen; Standard: brechen; } $bits zurückgeben; } //------------------------------------------------ ---------------------- öffentliches statisches $anTable = array( -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ); //------------------------------------------------ ---------------------- öffentliche statische Funktion lookAnTable($c) { return (($c > 127)?-1:self::$anTable[$c]); } //------------------------------------------------ ---------------------- öffentliche statische Funktion checkModeAn($size, $data) { for($i=0; $i<$size; $i ) { if (self::lookAnTable(ord($data[$i])) == -1) { return false; } } return true; } //------------------------------------------------ ---------------------- öffentliche statische Funktion geschätztBitsModeAn($size) { $w = (int)($size / 2); $bits = $w * 11; if($size & 1) { $bits = 6; } $bits zurückgeben; } //------------------------------------------------ ---------------------- öffentliche statische Funktion geschätztBitsMode8($size) { return $size * 8; } //------------------------------------------------ ---------------------- öffentliche Funktion geschätztBitsModeKanji($size) { return (int)(($size / 2) * 13); } //------------------------------------------------ ---------------------- öffentliche statische Funktion checkModeKanji($size, $data) { if($size & 1) return false; for($i=0; $i<$size; $i =2) { $val = (ord($data[$i]) << 8) | ord($data[$i 1]); if( $val < 0x8140 || ($val > 0x9ffc && $val < 0xe040) || $val > 0xebbf) { return false; } } return true; }/**************************************************** ******************* * Validierung ************************************************** ********************/ öffentliche statische Funktionsprüfung ($mode, $size, $data) { if($size <= 0) return false; switch($mode) { case QR_MODE_NUM: return self::checkModeNum($size, $data); brechen; case QR_MODE_AN: return self::checkModeAn($size, $data); brechen; case QR_MODE_KANJI: return self::checkModeKanji($size, $data); brechen; Fall QR_MODE_8: true zurückgeben; brechen; case QR_MODE_STRUCTURE: true zurückgeben; brechen; Standard: brechen; } return false; } //------------------------------------------------ ---------------------- öffentliche Funktion geschätztBitStreamSize($version) { $bits = 0; foreach($this->items as $item) { $bits = $item->estimateBitStreamSizeOfEntry($version); } $bits zurückgeben; } //------------------------------------------------ ---------------------- öffentliche Funktion „estimateVersion()“ { $version = 0; $prev = 0; Tun { $prev = $version; $bits = $this->estimateBitStreamSize($prev); $version = QRspec::getMinimumVersion((int)(($bits 7) / 8), $this->level); if ($version < 0) { return -1; } } while ($version > $prev); return $version; } //------------------------------------------------ ---------------------- öffentliche statische Funktion lengthOfCode($mode, $version, $bits) { $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); switch($mode) { Fall QR_MODE_NUM: $chunks = (int)($payload / 10); $remain = $payload - $chunks * 10; $size = $chunks * 3; if($remain >= 7) { $size = 2; } else if($remain >= 4) { $größe = 1; } brechen; Fall QR_MODE_AN: $chunks = (int)($payload / 11); $remain = $payload - $chunks * 11; $size = $chunks * 2; if($remain >= 6) $Größe ; brechen; Fall QR_MODE_8: $size = (int)($payload / 8); brechen; Fall QR_MODE_KANJI: $size = (int)(($payload / 13) * 2); brechen; Fall QR_MODE_STRUCTURE: $size = (int)($payload / 8); brechen; Standard: $size = 0; brechen; } $maxsize = QRspec::maximumWords($mode, $version); if($size < 0) $size = 0; if($size > $maxsize) $size = $maxsize; return $size; } //------------------------------------------------ ---------------------- öffentliche Funktion createBitStream() { $to
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4?

Detaillierte Erläuterung der Verwendung von Return in der C-Sprache Detaillierte Erläuterung der Verwendung von Return in der C-Sprache Oct 07, 2023 am 10:58 AM

Detaillierte Erläuterung der Verwendung von Return in der C-Sprache

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

Fix: Snipping-Tool funktioniert unter Windows 11 nicht

Wie ist die Ausführungsreihenfolge von Return- und Final-Anweisungen in Java? Wie ist die Ausführungsreihenfolge von Return- und Final-Anweisungen in Java? Apr 25, 2023 pm 07:55 PM

Wie ist die Ausführungsreihenfolge von Return- und Final-Anweisungen in Java?

Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS? Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS? Mar 01, 2024 pm 12:55 PM

Was ist der Unterschied zwischen der Entwicklerversion und der öffentlichen Version von iOS?

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone Jul 29, 2023 am 08:22 AM

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone

Array mit der Array.Sort-Funktion in C# sortieren Array mit der Array.Sort-Funktion in C# sortieren Nov 18, 2023 am 10:37 AM

Array mit der Array.Sort-Funktion in C# sortieren

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

See all articles