/var/www/hkosl.com/imusiccircle/webadmin/libraies/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php


1
2
3
4
5
6
7
8
9
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
/**
 * QRrawcode.php
 *
 * Created by arielferrandini
 */

namespace PHPQRCode;

use 
Exception;

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 input 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->eccLength0);
        
$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(80x11d01$el255 $dl $el);


        
$blockNo 0;
        
$dataPos 0;
        
$eccPos 0;
        for(
$i=0$i<QRspec::rsBlockNum1($spec); $i++) {
            
$ecc array_slice($this->ecccode,$eccPos);
            
$this->rsblocks[$blockNo] = new QRrsblock($dlarray_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(80x11d01$el255 $dl $el);

        if(
$rs == NULL) return -1;

        for(
$i=0$i<QRspec::rsBlockNum2($spec); $i++) {
            
$ecc array_slice($this->ecccode,$eccPos);
            
$this->rsblocks[$blockNo] = new QRrsblock($dlarray_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 null;

        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;
    }
}