From 34766d1b0bf53617a77a051bb67e6c00c8b09cf2 Mon Sep 17 00:00:00 2001 From: "ZLW-PC\\Administrator" <374861669@qq.com> Date: Tue, 19 Sep 2017 16:47:39 +0800 Subject: [PATCH] phpqrcode --- resources/org/phpqrcode/phpqrcode.php | 3312 +++++++++++++++++++++++++ resources/org/phpqrcode/phpqrcode.rar | Bin 0 -> 180704 bytes 说明.txt | 3 + 3 files changed, 3315 insertions(+) create mode 100644 resources/org/phpqrcode/phpqrcode.php create mode 100644 resources/org/phpqrcode/phpqrcode.rar diff --git a/resources/org/phpqrcode/phpqrcode.php b/resources/org/phpqrcode/phpqrcode.php new file mode 100644 index 0000000..ea8c08f --- /dev/null +++ b/resources/org/phpqrcode/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + 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); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function 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 + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function 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; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $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; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new 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'); + } + + //---------------------------------------------------------------------- + public static function log($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); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free 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); + + class QRspec { + + public static $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 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function 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; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $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 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function 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; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $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 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $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); + return; + } + + $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; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $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 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $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) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $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); + + // Format info + $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 pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + 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; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + 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)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($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 + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __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)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $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; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $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; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $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; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $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; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $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; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + 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); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __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; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 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; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $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 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function 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; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $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; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + diff --git a/resources/org/phpqrcode/phpqrcode.rar b/resources/org/phpqrcode/phpqrcode.rar new file mode 100644 index 0000000000000000000000000000000000000000..1b0db4b49d2769006635025901202cc553939061 GIT binary patch literal 180704 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

OOSAFnFFqV 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⁣aNkD6k{ZK!=M63|&z;Fv$$akR2s7 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

EaL#b)r_%&_FO*vVD2697hQ9GaZJjR}1 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%0AS`LnT_HgI%F-{4d z85rcIG6)6Jg(UI=6ZcCdQ9GGJT|6e!8BoUc&pkibj2-0~1$T@->$Z2(QdJ7X3uO3# zsVR+5mD)q{J=gdoz)ScSnXCXozyJXI|145~xB!EO{u7y~|6gP}I{i;z`u{UXS^S5) z|9XPGbIen)a^mquvK84RY1DG P|3XL+?kk?%K8#zG`Yrl@Y-M&EuC!!c)497uGK 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 E039v)a{vGU literal 0 HcmV?d00001 diff --git a/说明.txt b/说明.txt index 5d0a636..82eb76d 100644 --- a/说明.txt +++ b/说明.txt @@ -1,6 +1,9 @@ git clone https://github.com/Fanli2012/lqycms.git +cmdÏ´´½¨.envÎļþ +echo test > .env + ˵Ã÷