Вход Регистрация
Файл: CloudBox-main/CloudBox/admin_assets/js/qrcode.js
Строк: 545
<?php
//---------------------------------------------------------------------
// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
//   http://www.opensource.org/licenses/mit-license.php
//
// The word "QR Code" is registered trademark of 
// DENSO WAVE INCORPORATED
//   http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------

//---------------------------------------------------------------------
// QR8bitByte
//---------------------------------------------------------------------

function QR8bitByte(data) {
    
this.mode QRMode.MODE_8BIT_BYTE;
    
this.data data;
}

QR8bitByte.prototype = {

    
getLength: function (buffer) {
        return 
this.data.length;
    },

    
write: function (buffer) {
        for (var 
0this.data.lengthi++) {
            
// not JIS ...
            
buffer.put(this.data.charCodeAt(i), 8);
        }
    }
};

//---------------------------------------------------------------------
// QRCode
//---------------------------------------------------------------------

function QRCode(typeNumbererrorCorrectLevel) {
    
this.typeNumber typeNumber;
    
this.errorCorrectLevel errorCorrectLevel;
    
this.modules null;
    
this.moduleCount 0;
    
this.dataCache null;
    
this.dataList = new Array();
}

QRCode.prototype = {

    
addData: function (data) {
        var 
newData = new QR8bitByte(data);
        
this.dataList.push(newData);
        
this.dataCache null;
    },

    
isDark: function (rowcol) {
        if (
row || this.moduleCount <= row || col || this.moduleCount <= col) {
            throw new 
Error(row "," col);
        }
        return 
this.modules[row][col];
    },

    
getModuleCount: function () {
        return 
this.moduleCount;
    },

    
make: function () {
        
// Calculate automatically typeNumber if provided is < 1
        
if (this.typeNumber 1) {
            var 
typeNumber 1;
            for (
typeNumber 1typeNumber 40typeNumber++) {
                var 
rsBlocks QRRSBlock.getRSBlocks(typeNumberthis.errorCorrectLevel);

                var 
buffer = new QRBitBuffer();
                var 
totalDataCount 0;
                for (var 
0rsBlocks.lengthi++) {
                    
totalDataCount += rsBlocks[i].dataCount;
                }

                for (var 
0this.dataList.lengthi++) {
                    var 
data this.dataList[i];
                    
buffer.put(data.mode4);
                    
buffer.put(data.getLength(), QRUtil.getLengthInBits(data.modetypeNumber));
                    
data.write(buffer);
                }
                if (
buffer.getLengthInBits() <= totalDataCount 8)
                    break;
            }
            
this.typeNumber typeNumber;
        }
        
this.makeImpl(falsethis.getBestMaskPattern());
    },

    
makeImpl: function (testmaskPattern) {

        
this.moduleCount this.typeNumber 17;
        
this.modules = new Array(this.moduleCount);

        for (var 
row 0row this.moduleCountrow++) {

            
this.modules[row] = new Array(this.moduleCount);

            for (var 
col 0col this.moduleCountcol++) {
                
this.modules[row][col] = null;//(col + row) % 3;
            
}
        }

        
this.setupPositionProbePattern(00);
        
this.setupPositionProbePattern(this.moduleCount 70);
        
this.setupPositionProbePattern(0this.moduleCount 7);
        
this.setupPositionAdjustPattern();
        
this.setupTimingPattern();
        
this.setupTypeInfo(testmaskPattern);

        if (
this.typeNumber >= 7) {
            
this.setupTypeNumber(test);
        }

        if (
this.dataCache == null) {
            
this.dataCache QRCode.createData(this.typeNumberthis.errorCorrectLevelthis.dataList);
        }

        
this.mapData(this.dataCachemaskPattern);
    },

    
setupPositionProbePattern: function (rowcol) {

        for (var 
= -1<= 7r++) {

            if (
row <= -|| this.moduleCount <= row r) continue;

            for (var 
= -1<= 7c++) {

                if (
col <= -|| this.moduleCount <= col c) continue;

                if ((
<= && <= && (== || == 6) )
                    || (
<= && <= && (== || == 6) )
                    || (
<= && <= && <= && <= 4)) {
                    
this.modules[row r][col c] = true;
                } else {
                    
this.modules[row r][col c] = false;
                }
            }
        }
    },

    
getBestMaskPattern: function () {

        var 
minLostPoint 0;
        var 
pattern 0;

        for (var 
08i++) {

            
this.makeImpl(truei);

            var 
lostPoint QRUtil.getLostPoint(this);

            if (
== || minLostPoint lostPoint) {
                
minLostPoint lostPoint;
                
pattern i;
            }
        }

        return 
pattern;
    },

    
createMovieClip: function (target_mcinstance_namedepth) {

        var 
qr_mc target_mc.createEmptyMovieClip(instance_namedepth);
        var 
cs 1;

        
this.make();

        for (var 
row 0row this.modules.lengthrow++) {

            var 
row cs;

            for (var 
col 0col this.modules[row].lengthcol++) {

                var 
col cs;
                var 
dark this.modules[row][col];

                if (
dark) {
                    
qr_mc.beginFill(0100);
                    
qr_mc.moveTo(xy);
                    
qr_mc.lineTo(csy);
                    
qr_mc.lineTo(cscs);
                    
qr_mc.lineTo(xcs);
                    
qr_mc.endFill();
                }
            }
        }

        return 
qr_mc;
    },

    
setupTimingPattern: function () {

        for (var 
8this.moduleCount 8r++) {
            if (
this.modules[r][6] != null) {
                continue;
            }
            
this.modules[r][6] = (== 0);
        }

        for (var 
8this.moduleCount 8c++) {
            if (
this.modules[6][c] != null) {
                continue;
            }
            
this.modules[6][c] = (== 0);
        }
    },

    
setupPositionAdjustPattern: function () {

        var 
pos QRUtil.getPatternPosition(this.typeNumber);

        for (var 
0pos.lengthi++) {

            for (var 
0pos.lengthj++) {

                var 
row pos[i];
                var 
col pos[j];

                if (
this.modules[row][col] != null) {
                    continue;
                }

                for (var 
= -2<= 2r++) {

                    for (var 
= -2<= 2c++) {

                        if (
== -|| == || == -|| == 2
                            
|| (== && == 0)) {
                            
this.modules[row r][col c] = true;
                        } else {
                            
this.modules[row r][col c] = false;
                        }
                    }
                }
            }
        }
    },

    
setupTypeNumber: function (test) {

        var 
bits QRUtil.getBCHTypeNumber(this.typeNumber);

        for (var 
018i++) {
            var 
mod = (!test && ( (bits >> i) & 1) == 1);
            
this.modules[Math.floor(3)][this.moduleCount 3] = mod;
        }

        for (var 
018i++) {
            var 
mod = (!test && ( (bits >> i) & 1) == 1);
            
this.modules[this.moduleCount 3][Math.floor(3)] = mod;
        }
    },

    
setupTypeInfo: function (testmaskPattern) {

        var 
data = (this.errorCorrectLevel << 3) | maskPattern;
        var 
bits QRUtil.getBCHTypeInfo(data);

        
// vertical
        
for (var 015i++) {

            var 
mod = (!test && ( (bits >> i) & 1) == 1);

            if (
6) {
                
this.modules[i][8] = mod;
            } else if (
8) {
                
this.modules[1][8] = mod;
            } else {
                
this.modules[this.moduleCount 15 i][8] = mod;
            }
        }

        
// horizontal
        
for (var 015i++) {

            var 
mod = (!test && ( (bits >> i) & 1) == 1);

            if (
8) {
                
this.modules[8][this.moduleCount 1] = mod;
            } else if (
9) {
                
this.modules[8][15 1] = mod;
            } else {
                
this.modules[8][15 1] = mod;
            }
        }

        
// fixed module
        
this.modules[this.moduleCount 8][8] = (!test);

    },

    
mapData: function (datamaskPattern) {

        var 
inc = -1;
        var 
row this.moduleCount 1;
        var 
bitIndex 7;
        var 
byteIndex 0;

        for (var 
col this.moduleCount 1col 0col -= 2) {

            if (
col == 6col--;

            while (
true) {

                for (var 
02c++) {

                    if (
this.modules[row][col c] == null) {

                        var 
dark false;

                        if (
byteIndex data.length) {
                            
dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);
                        }

                        var 
mask QRUtil.getMask(maskPatternrowcol c);

                        if (
mask) {
                            
dark = !dark;
                        }

                        
this.modules[row][col c] = dark;
                        
bitIndex--;

                        if (
bitIndex == -1) {
                            
byteIndex++;
                            
bitIndex 7;
                        }
                    }
                }

                
row += inc;

                if (
row || this.moduleCount <= row) {
                    
row -= inc;
                    
inc = -inc;
                    break;
                }
            }
        }

    }

};

QRCode.PAD0 0xEC;
QRCode.PAD1 0x11;

QRCode.createData = function (typeNumbererrorCorrectLeveldataList) {

    var 
rsBlocks QRRSBlock.getRSBlocks(typeNumbererrorCorrectLevel);

    var 
buffer = new QRBitBuffer();

    for (var 
0dataList.lengthi++) {
        var 
data dataList[i];
        
buffer.put(data.mode4);
        
buffer.put(data.getLength(), QRUtil.getLengthInBits(data.modetypeNumber));
        
data.write(buffer);
    }

    
// calc num max data.
    
var totalDataCount 0;
    for (var 
0rsBlocks.lengthi++) {
        
totalDataCount += rsBlocks[i].dataCount;
    }

    if (
buffer.getLengthInBits() > totalDataCount 8) {
        throw new 
Error("code length overflow. ("
            
buffer.getLengthInBits()
            + 
">"
            
totalDataCount 8
            
")");
    }

    
// end code
    
if (buffer.getLengthInBits() + <= totalDataCount 8) {
        
buffer.put(04);
    }

    
// padding
    
while (buffer.getLengthInBits() % != 0) {
        
buffer.putBit(false);
    }

    
// padding
    
while (true) {

        if (
buffer.getLengthInBits() >= totalDataCount 8) {
            break;
        }
        
buffer.put(QRCode.PAD08);

        if (
buffer.getLengthInBits() >= totalDataCount 8) {
            break;
        }
        
buffer.put(QRCode.PAD18);
    }

    return 
QRCode.createBytes(bufferrsBlocks);
}

QRCode.createBytes = function (bufferrsBlocks) {

    var 
offset 0;

    var 
maxDcCount 0;
    var 
maxEcCount 0;

    var 
dcdata = new Array(rsBlocks.length);
    var 
ecdata = new Array(rsBlocks.length);

    for (var 
0rsBlocks.lengthr++) {

        var 
dcCount rsBlocks[r].dataCount;
        var 
ecCount rsBlocks[r].totalCount dcCount;

        
maxDcCount Math.max(maxDcCountdcCount);
        
maxEcCount Math.max(maxEcCountecCount);

        
dcdata[r] = new Array(dcCount);

        for (var 
0dcdata[r].lengthi++) {
            
dcdata[r][i] = 0xff buffer.buffer[offset];
        }
        
offset += dcCount;

        var 
rsPoly QRUtil.getErrorCorrectPolynomial(ecCount);
        var 
rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);

        var 
modPoly rawPoly.mod(rsPoly);
        
ecdata[r] = new Array(rsPoly.getLength() - 1);
        for (var 
0ecdata[r].lengthi++) {
            var 
modIndex modPoly.getLength() - ecdata[r].length;
            
ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
        }

    }

    var 
totalCodeCount 0;
    for (var 
0rsBlocks.lengthi++) {
        
totalCodeCount += rsBlocks[i].totalCount;
    }

    var 
data = new Array(totalCodeCount);
    var 
index 0;

    for (var 
0maxDcCounti++) {
        for (var 
0rsBlocks.lengthr++) {
            if (
dcdata[r].length) {
                
data[index++] = dcdata[r][i];
            }
        }
    }

    for (var 
0maxEcCounti++) {
        for (var 
0rsBlocks.lengthr++) {
            if (
ecdata[r].length) {
                
data[index++] = ecdata[r][i];
            }
        }
    }

    return 
data;

}

//---------------------------------------------------------------------
// QRMode
//---------------------------------------------------------------------

var QRMode = {
    
MODE_NUMBER<< 0,
    
MODE_ALPHA_NUM<< 1,
    
MODE_8BIT_BYTE<< 2,
    
MODE_KANJI<< 3
};

//---------------------------------------------------------------------
// QRErrorCorrectLevel
//---------------------------------------------------------------------

var QRErrorCorrectLevel = {
    
L1,
    
M0,
    
Q3,
    
H2
};

//---------------------------------------------------------------------
// QRMaskPattern
//---------------------------------------------------------------------

var QRMaskPattern = {
    
PATTERN0000,
    
PATTERN0011,
    
PATTERN0102,
    
PATTERN0113,
    
PATTERN1004,
    
PATTERN1015,
    
PATTERN1106,
    
PATTERN1117
};

//---------------------------------------------------------------------
// QRUtil
//---------------------------------------------------------------------

var QRUtil = {

    
PATTERN_POSITION_TABLE: [
        [],
        [
618],
        [
622],
        [
626],
        [
630],
        [
634],
        [
62238],
        [
62442],
        [
62646],
        [
62850],
        [
63054],
        [
63258],
        [
63462],
        [
6264666],
        [
6264870],
        [
6265074],
        [
6305478],
        [
6305682],
        [
6305886],
        [
6346290],
        [
628507294],
        [
626507498],
        [
6305478102],
        [
6285480106],
        [
6325884110],
        [
6305886114],
        [
6346290118],
        [
626507498122],
        [
6305478102126],
        [
6265278104130],
        [
6305682108134],
        [
6346086112138],
        [
6305886114142],
        [
6346290118146],
        [
6305478102126150],
        [
6245076102128154],
        [
6285480106132158],
        [
6325884110136162],
        [
6265482110138166],
        [
6305886114142170]
    ],

    
G15: (<< 10) | (<< 8) | (<< 5) | (<< 4) | (<< 2) | (<< 1) | (<< 0),
    
G18: (<< 12) | (<< 11) | (<< 10) | (<< 9) | (<< 8) | (<< 5) | (<< 2) | (<< 0),
    
G15_MASK: (<< 14) | (<< 12) | (<< 10) | (<< 4) | (<< 1),

    
getBCHTypeInfo: function (data) {
        var 
data << 10;
        while (
QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
            
^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) );
        }
        return ( (
data << 10) | d) ^ QRUtil.G15_MASK;
    },

    
getBCHTypeNumber: function (data) {
        var 
data << 12;
        while (
QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
            
^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) );
        }
        return (
data << 12) | d;
    },

    
getBCHDigit: function (data) {

        var 
digit 0;

        while (
data != 0) {
            
digit++;
            
data >>>= 1;
        }

        return 
digit;
    },

    
getPatternPosition: function (typeNumber) {
        return 
QRUtil.PATTERN_POSITION_TABLE[typeNumber 1];
    },

    
getMask: function (maskPatternij) {

        switch (
maskPattern) {

            case 
QRMaskPattern.PATTERN000 :
                return (
j) % == 0;
            case 
QRMaskPattern.PATTERN001 :
                return 
== 0;
            case 
QRMaskPattern.PATTERN010 :
                return 
== 0;
            case 
QRMaskPattern.PATTERN011 :
                return (
j) % == 0;
            case 
QRMaskPattern.PATTERN100 :
                return (
Math.floor(2) + Math.floor(3) ) % == 0;
            case 
QRMaskPattern.PATTERN101 :
                return (
j) % + (j) % == 0;
            case 
QRMaskPattern.PATTERN110 :
                return ( (
j) % + (j) % 3) % == 0;
            case 
QRMaskPattern.PATTERN111 :
                return ( (
j) % + (j) % 2) % == 0;

            default :
                throw new 
Error("bad maskPattern:" maskPattern);
        }
    },

    
getErrorCorrectPolynomial: function (errorCorrectLength) {

        var 
= new QRPolynomial([1], 0);

        for (var 
0errorCorrectLengthi++) {
            
a.multiply(new QRPolynomial([1QRMath.gexp(i)], 0));
        }

        return 
a;
    },

    
getLengthInBits: function (modetype) {

        if (
<= type && type 10) {

            
// 1 - 9

            
switch (mode) {
                case 
QRMode.MODE_NUMBER    :
                    return 
10;
                case 
QRMode.MODE_ALPHA_NUM    :
                    return 
9;
                case 
QRMode.MODE_8BIT_BYTE    :
                    return 
8;
                case 
QRMode.MODE_KANJI    :
                    return 
8;
                default :
                    throw new 
Error("mode:" mode);
            }

        } else if (
type 27) {

            
// 10 - 26

            
switch (mode) {
                case 
QRMode.MODE_NUMBER    :
                    return 
12;
                case 
QRMode.MODE_ALPHA_NUM    :
                    return 
11;
                case 
QRMode.MODE_8BIT_BYTE    :
                    return 
16;
                case 
QRMode.MODE_KANJI    :
                    return 
10;
                default :
                    throw new 
Error("mode:" mode);
            }

        } else if (
type 41) {

            
// 27 - 40

            
switch (mode) {
                case 
QRMode.MODE_NUMBER    :
                    return 
14;
                case 
QRMode.MODE_ALPHA_NUM    :
                    return 
13;
                case 
QRMode.MODE_8BIT_BYTE    :
                    return 
16;
                case 
QRMode.MODE_KANJI    :
                    return 
12;
                default :
                    throw new 
Error("mode:" mode);
            }

        } else {
            throw new 
Error("type:" type);
        }
    },

    
getLostPoint: function (qrCode) {

        var 
moduleCount qrCode.getModuleCount();

        var 
lostPoint 0;

        
// LEVEL1

        
for (var row 0row moduleCountrow++) {

            for (var 
col 0col moduleCountcol++) {

                var 
sameCount 0;
                var 
dark qrCode.isDark(rowcol);

                for (var 
= -1<= 1r++) {

                    if (
row || moduleCount <= row r) {
                        continue;
                    }

                    for (var 
= -1<= 1c++) {

                        if (
col || moduleCount <= col c) {
                            continue;
                        }

                        if (
== && == 0) {
                            continue;
                        }

                        if (
dark == qrCode.isDark(row rcol c)) {
                            
sameCount++;
                        }
                    }
                }

                if (
sameCount 5) {
                    
lostPoint += (sameCount 5);
                }
            }
        }

        
// LEVEL2

        
for (var row 0row moduleCount 1row++) {
            for (var 
col 0col moduleCount 1col++) {
                var 
count 0;
                if (
qrCode.isDark(rowcol)) count++;
                if (
qrCode.isDark(row 1col)) count++;
                if (
qrCode.isDark(rowcol 1)) count++;
                if (
qrCode.isDark(row 1col 1)) count++;
                if (
count == || count == 4) {
                    
lostPoint += 3;
                }
            }
        }

        
// LEVEL3

        
for (var row 0row moduleCountrow++) {
            for (var 
col 0col moduleCount 6col++) {
                if (
qrCode.isDark(rowcol)
                    && !
qrCode.isDark(rowcol 1)
                    && 
qrCode.isDark(rowcol 2)
                    && 
qrCode.isDark(rowcol 3)
                    && 
qrCode.isDark(rowcol 4)
                    && !
qrCode.isDark(rowcol 5)
                    && 
qrCode.isDark(rowcol 6)) {
                    
lostPoint += 40;
                }
            }
        }

        for (var 
col 0col moduleCountcol++) {
            for (var 
row 0row moduleCount 6row++) {
                if (
qrCode.isDark(rowcol)
                    && !
qrCode.isDark(row 1col)
                    && 
qrCode.isDark(row 2col)
                    && 
qrCode.isDark(row 3col)
                    && 
qrCode.isDark(row 4col)
                    && !
qrCode.isDark(row 5col)
                    && 
qrCode.isDark(row 6col)) {
                    
lostPoint += 40;
                }
            }
        }

        
// LEVEL4

        
var darkCount 0;

        for (var 
col 0col moduleCountcol++) {
            for (var 
row 0row moduleCountrow++) {
                if (
qrCode.isDark(rowcol)) {
                    
darkCount++;
                }
            }
        }

        var 
ratio Math.abs(100 darkCount moduleCount moduleCount 50) / 5;
        
lostPoint += ratio 10;

        return 
lostPoint;
    }

};


//---------------------------------------------------------------------
// QRMath
//---------------------------------------------------------------------

var QRMath = {

    
glog: function (n) {

        if (
1) {
            throw new 
Error("glog(" ")");
        }

        return 
QRMath.LOG_TABLE[n];
    },

    
gexp: function (n) {

        while (
0) {
            
+= 255;
        }

        while (
>= 256) {
            
-= 255;
        }

        return 
QRMath.EXP_TABLE[n];
    },

    
EXP_TABLE: new Array(256),

    
LOG_TABLE: new Array(256)

};

for (var 
08i++) {
    
QRMath.EXP_TABLE[i] = << i;
}
for (var 
8256i++) {
    
QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[4]
        ^ 
QRMath.EXP_TABLE[5]
        ^ 
QRMath.EXP_TABLE[6]
        ^ 
QRMath.EXP_TABLE[8];
}
for (var 
0255i++) {
    
QRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;
}

//---------------------------------------------------------------------
// QRPolynomial
//---------------------------------------------------------------------

function QRPolynomial(numshift) {

    if (
num.length == undefined) {
        throw new 
Error(num.length "/" shift);
    }

    var 
offset 0;

    while (
offset num.length && num[offset] == 0) {
        
offset++;
    }

    
this.num = new Array(num.length offset shift);
    for (var 
0num.length offseti++) {
        
this.num[i] = num[offset];
    }
}

QRPolynomial.prototype = {

    
get: function (index) {
        return 
this.num[index];
    },

    
getLength: function () {
        return 
this.num.length;
    },

    
multiply: function (e) {

        var 
num = new Array(this.getLength() + e.getLength() - 1);

        for (var 
0this.getLength(); i++) {
            for (var 
0e.getLength(); j++) {
                
num[j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
            }
        }

        return new 
QRPolynomial(num0);
    },

    
mod: function (e) {

        if (
this.getLength() - e.getLength() < 0) {
            return 
this;
        }

        var 
ratio QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));

        var 
num = new Array(this.getLength());

        for (var 
0this.getLength(); i++) {
            
num[i] = this.get(i);
        }

        for (var 
0e.getLength(); i++) {
            
num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
        }

        
// recursive call
        
return new QRPolynomial(num0).mod(e);
    }
};

//---------------------------------------------------------------------
// QRRSBlock
//---------------------------------------------------------------------

function QRRSBlock(totalCountdataCount) {
    
this.totalCount totalCount;
    
this.dataCount dataCount;
}

QRRSBlock.RS_BLOCK_TABLE = [

    
// L
    // M
    // Q
    // H

    // 1
    
[12619],
    [
12616],
    [
12613],
    [
1269],

    
// 2
    
[14434],
    [
14428],
    [
14422],
    [
14416],

    
// 3
    
[17055],
    [
17044],
    [
23517],
    [
23513],

    
// 4
    
[110080],
    [
25032],
    [
25024],
    [
4259],

    
// 5
    
[1134108],
    [
26743],
    [
2331523416],
    [
2331123412],

    
// 6
    
[28668],
    [
44327],
    [
44319],
    [
44315],

    
// 7
    
[29878],
    [
44931],
    [
2321443315],
    [
4391314014],

    
// 8
    
[212197],
    [
2603826139],
    [
4401824119],
    [
4401424115],

    
// 9
    
[2146116],
    [
3583625937],
    [
4361643717],
    [
4361243713],

    
// 10
    
[2866828769],
    [
4694317044],
    [
6431924420],
    [
6431524416],

    
// 11
    
[410181],
    [
1805048151],
    [
4502245123],
    [
3361283713],

    
// 12
    
[211692211793],
    [
6583625937],
    [
4462064721],
    [
7421444315],

    
// 13
    
[4133107],
    [
8593716038],
    [
8442044521],
    [
12331143412],

    
// 14
    
[31451151146116],
    [
4644056541],
    [
11361653717],
    [
11361253713],

    
// 15
    
[510987111088],
    [
5654156642],
    [
5542475525],
    [
113612],

    
// 16
    
[512298112399],
    [
7734537446],
    [
15431924420],
    [
34515134616],

    
// 17
    
[11351075136108],
    [
10744617547],
    [
15022155123],
    [
24214174315],

    
// 18
    
[51501201151121],
    [
9694347044],
    [
17502215123],
    [
24214194315],

    
// 19
    
[31411134142114],
    [
37044117145],
    [
17472144822],
    [
93913164014],

    
// 20
    
[31351075136108],
    [
36741136842],
    [
15542455525],
    [
154315104416],

    
// 21
    
[41441164145117],
    [
176842],
    [
17502265123],
    [
19461664717],

    
// 22
    
[21391117140112],
    [
177446],
    [
75424165525],
    [
343713],

    
// 23
    
[41511215152122],
    [
47547147648],
    [
115424145525],
    [
164515144616],

    
// 24
    
[61471174148118],
    [
67345147446],
    [
115424165525],
    [
30461624717],

    
// 25
    
[81321064133107],
    [
87547137648],
    [
75424225525],
    [
224515134616],

    
// 26
    
[101421142143115],
    [
19744647547],
    [
28502265123],
    [
33461644717],

    
// 27
    
[81521224153123],
    [
22734537446],
    [
85323265424],
    [
124515284616],

    
// 28
    
[314711710148118],
    [
37345237446],
    [
45424315525],
    [
114515314616],

    
// 29
    
[71461167147117],
    [
21734577446],
    [
15323375424],
    [
194515264616],

    
// 30
    
[514511510146116],
    [
197547107648],
    [
155424255525],
    [
234515254616],

    
// 31
    
[131451153146116],
    [
27446297547],
    [
42542415525],
    [
234515284616],

    
// 32
    
[17145115],
    [
107446237547],
    [
105424355525],
    [
194515354616],

    
// 33
    
[171451151146116],
    [
147446217547],
    [
295424195525],
    [
114515464616],

    
// 34
    
[131451156146116],
    [
147446237547],
    [
44542475525],
    [
59461614717],

    
// 35
    
[121511217152122],
    [
127547267648],
    [
395424145525],
    [
224515414616],

    
// 36
    
[615112114152122],
    [
67547347648],
    [
465424105525],
    [
24515644616],

    
// 37
    
[171521224153123],
    [
297446147547],
    [
495424105525],
    [
244515464616],

    
// 38
    
[415212218153123],
    [
137446327547],
    [
485424145525],
    [
424515324616],

    
// 39
    
[201471174148118],
    [
40754777648],
    [
435424225525],
    [
104515674616],

    
// 40
    
[191481186149119],
    [
187547317648],
    [
345424345525],
    [
204515614616]
];

QRRSBlock.getRSBlocks = function (typeNumbererrorCorrectLevel) {

    var 
rsBlock QRRSBlock.getRsBlockTable(typeNumbererrorCorrectLevel);

    if (
rsBlock == undefined) {
        throw new 
Error("bad rs block @ typeNumber:" typeNumber "/errorCorrectLevel:" errorCorrectLevel);
    }

    var 
length rsBlock.length 3;

    var list = new Array();

    for (var 
0lengthi++) {

        var 
count rsBlock[0];
        var 
totalCount rsBlock[1];
        var 
dataCount rsBlock[2];

        for (var 
0countj++) {
            list.
push(new QRRSBlock(totalCountdataCount));
        }
    }

    return list;
}

QRRSBlock.getRsBlockTable = function (typeNumbererrorCorrectLevel) {

    switch (
errorCorrectLevel) {
        case 
QRErrorCorrectLevel.:
            return 
QRRSBlock.RS_BLOCK_TABLE[(typeNumber 1) * 0];
        case 
QRErrorCorrectLevel.:
            return 
QRRSBlock.RS_BLOCK_TABLE[(typeNumber 1) * 1];
        case 
QRErrorCorrectLevel.:
            return 
QRRSBlock.RS_BLOCK_TABLE[(typeNumber 1) * 2];
        case 
QRErrorCorrectLevel.:
            return 
QRRSBlock.RS_BLOCK_TABLE[(typeNumber 1) * 3];
        default :
            return 
undefined;
    }
}

//---------------------------------------------------------------------
// QRBitBuffer
//---------------------------------------------------------------------

function QRBitBuffer() {
    
this.buffer = new Array();
    
this.length 0;
}

QRBitBuffer.prototype = {

    
get: function (index) {
        var 
bufIndex Math.floor(index 8);
        return ( (
this.buffer[bufIndex] >>> (index 8) ) & 1) == 1;
    },

    
put: function (numlength) {
        for (var 
0lengthi++) {
            
this.putBit(( (num >>> (length 1) ) & 1) == 1);
        }
    },

    
getLengthInBits: function () {
        return 
this.length;
    },

    
putBit: function (bit) {

        var 
bufIndex Math.floor(this.length 8);
        if (
this.buffer.length <= bufIndex) {
            
this.buffer.push(0);
        }

        if (
bit) {
            
this.buffer[bufIndex] |= (0x80 >>> (this.length 8) );
        }

        
this.length++;
    }
};
?>
Онлайн: 0
Реклама