| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336 |
- <?php
-
- class qrstr
- {
- static public 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));
- }
- }
-
- class QRtools
- {
- static public 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;
- }
-
- static public function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037')
- {
- $barcode_array = array();
-
- if (!is_array($mode)) {
- $mode = explode(',', $mode);
- }
-
- $eccLevel = 'L';
-
- if (1 < count($mode)) {
- $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;
- }
-
- static public function clearCache()
- {
- self::$frames = array();
- }
-
- static public 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');
- }
-
- static public 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);
- }
- }
- }
- }
-
- static public function dumpMask($frame)
- {
- $width = count($frame);
-
- for ($y = 0; $y < $width; $y++) {
- for ($x = 0; $x < $width; $x++) {
- echo ord($frame[$y][$x]) . ',';
- }
- }
- }
-
- static public function markTime($markerId)
- {
- list($usec, $sec) = explode(' ', microtime());
- $time = (double) $usec + (double) $sec;
-
- if (!isset($GLOBALS['qr_time_bench'])) {
- $GLOBALS['qr_time_bench'] = array();
- }
-
- $GLOBALS['qr_time_bench'][$markerId] = $time;
- }
-
- static public function timeBenchmark()
- {
- self::markTime('finish');
- $lastTime = 0;
- $startTime = 0;
- $p = 0;
- echo '<table cellpadding="3" cellspacing="1">
- <thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr></thead>
- <tbody>';
-
- foreach ($GLOBALS['qr_time_bench'] as $markerId => $thisTime) {
- if (0 < $p) {
- echo '<tr><th style="text-align:right">till ' . $markerId . ': </th><td>' . number_format($thisTime - $lastTime, 6) . 's</td></tr>';
- }
- else {
- $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>';
- }
- }
-
- class QRspec
- {
- static public $capacity = array(
- array(
- 0,
- 0,
- 0,
- array(0, 0, 0, 0)
- ),
- array(
- 21,
- 26,
- 0,
- array(7, 10, 13, 17)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- )
- );
- static public $lengthTableBits = array(
- array(10, 12, 14),
- array(9, 11, 13),
- array(8, 16, 16),
- array(8, 10, 12)
- );
- static public $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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- ),
- 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)
- )
- );
- static public $alignmentPattern = array(
- array(0, 0),
- array(0, 0),
- array(18, 0),
- array(22, 0),
- array(26, 0),
- array(30, 0),
- array(34, 0),
- array(22, 38),
- array(24, 42),
- array(26, 46),
- array(28, 50),
- array(30, 54),
- array(32, 58),
- array(34, 62),
- array(26, 46),
- array(26, 48),
- array(26, 50),
- array(30, 54),
- array(30, 56),
- array(30, 58),
- array(34, 62),
- array(28, 50),
- array(26, 50),
- array(30, 54),
- array(28, 54),
- array(32, 58),
- array(30, 58),
- array(34, 62),
- array(26, 50),
- array(30, 54),
- array(26, 52),
- array(30, 56),
- array(34, 60),
- array(30, 58),
- array(34, 62),
- array(30, 54),
- array(24, 50),
- array(28, 54),
- array(32, 58),
- array(26, 54),
- array(30, 58)
- );
- static public $versionPattern = array(31892, 34236, 39577, 42195, 48118, 51042, 55367, 58893, 63784, 68472, 70749, 76311, 79154, 84390, 87683, 92361, 96236, 102084, 102881, 110507, 110734, 117786, 119615, 126325, 127568, 133589, 136944, 141498, 145311, 150283, 152622, 158308, 161089, 167017);
- static public $formatInfo = array(
- array(30660, 29427, 32170, 30877, 26159, 25368, 27713, 26998),
- array(21522, 20773, 24188, 23371, 17913, 16590, 20375, 19104),
- array(13663, 12392, 16177, 14854, 9396, 8579, 11994, 11245),
- array(5769, 5054, 7399, 6608, 1890, 597, 3340, 2107)
- );
- static public $frames = array();
-
- static public function getDataLength($version, $level)
- {
- return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];
- }
-
- static public function getECCLength($version, $level)
- {
- return self::$capacity[$version][QRCAP_EC][$level];
- }
-
- static public function getWidth($version)
- {
- return self::$capacity[$version][QRCAP_WIDTH];
- }
-
- static public function getRemainder($version)
- {
- return self::$capacity[$version][QRCAP_REMINDER];
- }
-
- static public 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 ($size <= $words) {
- return $i;
- }
- }
-
- return -1;
- }
-
- static public 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];
- }
-
- static public 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;
- }
-
- return $words;
- }
-
- static public 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;
- }
- }
-
- static public 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]);
- }
- }
-
- static public function putAlignmentPattern($version, &$frame, $width)
- {
- if ($version < 2) {
- return NULL;
- }
-
- $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 NULL;
- }
-
- $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;
- }
- }
-
- static public function getVersionPattern($version)
- {
- if ($version < 7 || QRSPEC_VERSION_MAX < $version) {
- return 0;
- }
-
- return self::$versionPattern[$version - 7];
- }
-
- static public function getFormatInfo($mask, $level)
- {
- if ($mask < 0 || 7 < $mask) {
- return 0;
- }
-
- if ($level < 0 || 3 < $level) {
- return 0;
- }
-
- return self::$formatInfo[$level][$mask];
- }
-
- static public 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]);
- }
- }
-
- static public function createFrame($version)
- {
- $width = self::$capacity[$version][QRCAP_WIDTH];
- $frameLine = str_repeat('
|