bitcoin-atm

bitcoin atm for pyc inc.

git clone https://9o.is/git/bitcoin-atm.git

version.js

(15631B)


      1 /*
      2   Ported to JavaScript by Lazar Laszlo 2011 
      3   
      4   lazarsoft@gmail.com, www.lazarsoft.info
      5   
      6 */
      7 
      8 /*
      9 *
     10 * Copyright 2007 ZXing authors
     11 *
     12 * Licensed under the Apache License, Version 2.0 (the "License");
     13 * you may not use this file except in compliance with the License.
     14 * You may obtain a copy of the License at
     15 *
     16 *      http://www.apache.org/licenses/LICENSE-2.0
     17 *
     18 * Unless required by applicable law or agreed to in writing, software
     19 * distributed under the License is distributed on an "AS IS" BASIS,
     20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     21 * See the License for the specific language governing permissions and
     22 * limitations under the License.
     23 */
     24 
     25 
     26 
     27 function ECB(count,  dataCodewords)
     28 {
     29 	this.count = count;
     30 	this.dataCodewords = dataCodewords;
     31 	
     32 	this.__defineGetter__("Count", function()
     33 	{
     34 		return this.count;
     35 	});
     36 	this.__defineGetter__("DataCodewords", function()
     37 	{
     38 		return this.dataCodewords;
     39 	});
     40 }
     41 
     42 function ECBlocks( ecCodewordsPerBlock,  ecBlocks1,  ecBlocks2)
     43 {
     44 	this.ecCodewordsPerBlock = ecCodewordsPerBlock;
     45 	if(ecBlocks2)
     46 		this.ecBlocks = new Array(ecBlocks1, ecBlocks2);
     47 	else
     48 		this.ecBlocks = new Array(ecBlocks1);
     49 	
     50 	this.__defineGetter__("ECCodewordsPerBlock", function()
     51 	{
     52 		return this.ecCodewordsPerBlock;
     53 	});
     54 	
     55 	this.__defineGetter__("TotalECCodewords", function()
     56 	{
     57 		return  this.ecCodewordsPerBlock * this.NumBlocks;
     58 	});
     59 	
     60 	this.__defineGetter__("NumBlocks", function()
     61 	{
     62 		var total = 0;
     63 		for (var i = 0; i < this.ecBlocks.length; i++)
     64 		{
     65 			total += this.ecBlocks[i].length;
     66 		}
     67 		return total;
     68 	});
     69 	
     70 	this.getECBlocks=function()
     71 			{
     72 				return this.ecBlocks;
     73 			}
     74 }
     75 
     76 function Version( versionNumber,  alignmentPatternCenters,  ecBlocks1,  ecBlocks2,  ecBlocks3,  ecBlocks4)
     77 {
     78 	this.versionNumber = versionNumber;
     79 	this.alignmentPatternCenters = alignmentPatternCenters;
     80 	this.ecBlocks = new Array(ecBlocks1, ecBlocks2, ecBlocks3, ecBlocks4);
     81 	
     82 	var total = 0;
     83 	var ecCodewords = ecBlocks1.ECCodewordsPerBlock;
     84 	var ecbArray = ecBlocks1.getECBlocks();
     85 	for (var i = 0; i < ecbArray.length; i++)
     86 	{
     87 		var ecBlock = ecbArray[i];
     88 		total += ecBlock.Count * (ecBlock.DataCodewords + ecCodewords);
     89 	}
     90 	this.totalCodewords = total;
     91 	
     92 	this.__defineGetter__("VersionNumber", function()
     93 	{
     94 		return  this.versionNumber;
     95 	});
     96 	
     97 	this.__defineGetter__("AlignmentPatternCenters", function()
     98 	{
     99 		return  this.alignmentPatternCenters;
    100 	});
    101 	this.__defineGetter__("TotalCodewords", function()
    102 	{
    103 		return  this.totalCodewords;
    104 	});
    105 	this.__defineGetter__("DimensionForVersion", function()
    106 	{
    107 		return  17 + 4 * this.versionNumber;
    108 	});
    109 	
    110 	this.buildFunctionPattern=function()
    111 		{
    112 			var dimension = this.DimensionForVersion;
    113 			var bitMatrix = new BitMatrix(dimension);
    114 			
    115 			// Top left finder pattern + separator + format
    116 			bitMatrix.setRegion(0, 0, 9, 9);
    117 			// Top right finder pattern + separator + format
    118 			bitMatrix.setRegion(dimension - 8, 0, 8, 9);
    119 			// Bottom left finder pattern + separator + format
    120 			bitMatrix.setRegion(0, dimension - 8, 9, 8);
    121 			
    122 			// Alignment patterns
    123 			var max = this.alignmentPatternCenters.length;
    124 			for (var x = 0; x < max; x++)
    125 			{
    126 				var i = this.alignmentPatternCenters[x] - 2;
    127 				for (var y = 0; y < max; y++)
    128 				{
    129 					if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0))
    130 					{
    131 						// No alignment patterns near the three finder paterns
    132 						continue;
    133 					}
    134 					bitMatrix.setRegion(this.alignmentPatternCenters[y] - 2, i, 5, 5);
    135 				}
    136 			}
    137 			
    138 			// Vertical timing pattern
    139 			bitMatrix.setRegion(6, 9, 1, dimension - 17);
    140 			// Horizontal timing pattern
    141 			bitMatrix.setRegion(9, 6, dimension - 17, 1);
    142 			
    143 			if (this.versionNumber > 6)
    144 			{
    145 				// Version info, top right
    146 				bitMatrix.setRegion(dimension - 11, 0, 3, 6);
    147 				// Version info, bottom left
    148 				bitMatrix.setRegion(0, dimension - 11, 6, 3);
    149 			}
    150 			
    151 			return bitMatrix;
    152 		}
    153 	this.getECBlocksForLevel=function( ecLevel)
    154 	{
    155 		return this.ecBlocks[ecLevel.ordinal()];
    156 	}
    157 }
    158 
    159 Version.VERSION_DECODE_INFO = new 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);
    160 
    161 Version.VERSIONS = buildVersions();
    162 
    163 Version.getVersionForNumber=function( versionNumber)
    164 {
    165 	if (versionNumber < 1 || versionNumber > 40)
    166 	{
    167 		throw "ArgumentException";
    168 	}
    169 	return Version.VERSIONS[versionNumber - 1];
    170 }
    171 
    172 Version.getProvisionalVersionForDimension=function(dimension)
    173 {
    174 	if (dimension % 4 != 1)
    175 	{
    176 		throw "Error getProvisionalVersionForDimension";
    177 	}
    178 	try
    179 	{
    180 		return Version.getVersionForNumber((dimension - 17) >> 2);
    181 	}
    182 	catch ( iae)
    183 	{
    184 		throw "Error getVersionForNumber";
    185 	}
    186 }
    187 
    188 Version.decodeVersionInformation=function( versionBits)
    189 {
    190 	var bestDifference = 0xffffffff;
    191 	var bestVersion = 0;
    192 	for (var i = 0; i < Version.VERSION_DECODE_INFO.length; i++)
    193 	{
    194 		var targetVersion = Version.VERSION_DECODE_INFO[i];
    195 		// Do the version info bits match exactly? done.
    196 		if (targetVersion == versionBits)
    197 		{
    198 			return this.getVersionForNumber(i + 7);
    199 		}
    200 		// Otherwise see if this is the closest to a real version info bit string
    201 		// we have seen so far
    202 		var bitsDifference = FormatInformation.numBitsDiffering(versionBits, targetVersion);
    203 		if (bitsDifference < bestDifference)
    204 		{
    205 			bestVersion = i + 7;
    206 			bestDifference = bitsDifference;
    207 		}
    208 	}
    209 	// We can tolerate up to 3 bits of error since no two version info codewords will
    210 	// differ in less than 4 bits.
    211 	if (bestDifference <= 3)
    212 	{
    213 		return this.getVersionForNumber(bestVersion);
    214 	}
    215 	// If we didn't find a close enough match, fail
    216 	return null;
    217 }
    218 
    219 function buildVersions()
    220 {
    221 	return new Array(new Version(1, new Array(), new ECBlocks(7, new ECB(1, 19)), new ECBlocks(10, new ECB(1, 16)), new ECBlocks(13, new ECB(1, 13)), new ECBlocks(17, new ECB(1, 9))), 
    222 	new Version(2, new Array(6, 18), new ECBlocks(10, new ECB(1, 34)), new ECBlocks(16, new ECB(1, 28)), new ECBlocks(22, new ECB(1, 22)), new ECBlocks(28, new ECB(1, 16))), 
    223 	new Version(3, new Array(6, 22), new ECBlocks(15, new ECB(1, 55)), new ECBlocks(26, new ECB(1, 44)), new ECBlocks(18, new ECB(2, 17)), new ECBlocks(22, new ECB(2, 13))), 
    224 	new Version(4, new Array(6, 26), new ECBlocks(20, new ECB(1, 80)), new ECBlocks(18, new ECB(2, 32)), new ECBlocks(26, new ECB(2, 24)), new ECBlocks(16, new ECB(4, 9))), 
    225 	new Version(5, new Array(6, 30), new ECBlocks(26, new ECB(1, 108)), new ECBlocks(24, new ECB(2, 43)), new ECBlocks(18, new ECB(2, 15), new ECB(2, 16)), new ECBlocks(22, new ECB(2, 11), new ECB(2, 12))), 
    226 	new Version(6, new Array(6, 34), new ECBlocks(18, new ECB(2, 68)), new ECBlocks(16, new ECB(4, 27)), new ECBlocks(24, new ECB(4, 19)), new ECBlocks(28, new ECB(4, 15))), 
    227 	new Version(7, new Array(6, 22, 38), new ECBlocks(20, new ECB(2, 78)), new ECBlocks(18, new ECB(4, 31)), new ECBlocks(18, new ECB(2, 14), new ECB(4, 15)), new ECBlocks(26, new ECB(4, 13), new ECB(1, 14))), 
    228 	new Version(8, new Array(6, 24, 42), new ECBlocks(24, new ECB(2, 97)), new ECBlocks(22, new ECB(2, 38), new ECB(2, 39)), new ECBlocks(22, new ECB(4, 18), new ECB(2, 19)), new ECBlocks(26, new ECB(4, 14), new ECB(2, 15))), 
    229 	new Version(9, new Array(6, 26, 46), new ECBlocks(30, new ECB(2, 116)), new ECBlocks(22, new ECB(3, 36), new ECB(2, 37)), new ECBlocks(20, new ECB(4, 16), new ECB(4, 17)), new ECBlocks(24, new ECB(4, 12), new ECB(4, 13))), 
    230 	new Version(10, new Array(6, 28, 50), new ECBlocks(18, new ECB(2, 68), new ECB(2, 69)), new ECBlocks(26, new ECB(4, 43), new ECB(1, 44)), new ECBlocks(24, new ECB(6, 19), new ECB(2, 20)), new ECBlocks(28, new ECB(6, 15), new ECB(2, 16))), 
    231 	new Version(11, new Array(6, 30, 54), new ECBlocks(20, new ECB(4, 81)), new ECBlocks(30, new ECB(1, 50), new ECB(4, 51)), new ECBlocks(28, new ECB(4, 22), new ECB(4, 23)), new ECBlocks(24, new ECB(3, 12), new ECB(8, 13))), 
    232 	new Version(12, new Array(6, 32, 58), new ECBlocks(24, new ECB(2, 92), new ECB(2, 93)), new ECBlocks(22, new ECB(6, 36), new ECB(2, 37)), new ECBlocks(26, new ECB(4, 20), new ECB(6, 21)), new ECBlocks(28, new ECB(7, 14), new ECB(4, 15))), 
    233 	new Version(13, new Array(6, 34, 62), new ECBlocks(26, new ECB(4, 107)), new ECBlocks(22, new ECB(8, 37), new ECB(1, 38)), new ECBlocks(24, new ECB(8, 20), new ECB(4, 21)), new ECBlocks(22, new ECB(12, 11), new ECB(4, 12))), 
    234 	new Version(14, new Array(6, 26, 46, 66), new ECBlocks(30, new ECB(3, 115), new ECB(1, 116)), new ECBlocks(24, new ECB(4, 40), new ECB(5, 41)), new ECBlocks(20, new ECB(11, 16), new ECB(5, 17)), new ECBlocks(24, new ECB(11, 12), new ECB(5, 13))), 
    235 	new Version(15, new Array(6, 26, 48, 70), new ECBlocks(22, new ECB(5, 87), new ECB(1, 88)), new ECBlocks(24, new ECB(5, 41), new ECB(5, 42)), new ECBlocks(30, new ECB(5, 24), new ECB(7, 25)), new ECBlocks(24, new ECB(11, 12), new ECB(7, 13))), 
    236 	new Version(16, new Array(6, 26, 50, 74), new ECBlocks(24, new ECB(5, 98), new ECB(1, 99)), new ECBlocks(28, new ECB(7, 45), new ECB(3, 46)), new ECBlocks(24, new ECB(15, 19), new ECB(2, 20)), new ECBlocks(30, new ECB(3, 15), new ECB(13, 16))), 
    237 	new Version(17, new Array(6, 30, 54, 78), new ECBlocks(28, new ECB(1, 107), new ECB(5, 108)), new ECBlocks(28, new ECB(10, 46), new ECB(1, 47)), new ECBlocks(28, new ECB(1, 22), new ECB(15, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(17, 15))), 
    238 	new Version(18, new Array(6, 30, 56, 82), new ECBlocks(30, new ECB(5, 120), new ECB(1, 121)), new ECBlocks(26, new ECB(9, 43), new ECB(4, 44)), new ECBlocks(28, new ECB(17, 22), new ECB(1, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(19, 15))), 
    239 	new Version(19, new Array(6, 30, 58, 86), new ECBlocks(28, new ECB(3, 113), new ECB(4, 114)), new ECBlocks(26, new ECB(3, 44), new ECB(11, 45)), new ECBlocks(26, new ECB(17, 21), new ECB(4, 22)), new ECBlocks(26, new ECB(9, 13), new ECB(16, 14))), 
    240 	new Version(20, new Array(6, 34, 62, 90), new ECBlocks(28, new ECB(3, 107), new ECB(5, 108)), new ECBlocks(26, new ECB(3, 41), new ECB(13, 42)), new ECBlocks(30, new ECB(15, 24), new ECB(5, 25)), new ECBlocks(28, new ECB(15, 15), new ECB(10, 16))), 
    241 	new Version(21, new Array(6, 28, 50, 72, 94), new ECBlocks(28, new ECB(4, 116), new ECB(4, 117)), new ECBlocks(26, new ECB(17, 42)), new ECBlocks(28, new ECB(17, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(19, 16), new ECB(6, 17))), 
    242 	new Version(22, new Array(6, 26, 50, 74, 98), new ECBlocks(28, new ECB(2, 111), new ECB(7, 112)), new ECBlocks(28, new ECB(17, 46)), new ECBlocks(30, new ECB(7, 24), new ECB(16, 25)), new ECBlocks(24, new ECB(34, 13))), 
    243 	new Version(23, new Array(6, 30, 54, 74, 102), new ECBlocks(30, new ECB(4, 121), new ECB(5, 122)), new ECBlocks(28, new ECB(4, 47), new ECB(14, 48)), new ECBlocks(30, new ECB(11, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(16, 15), new ECB(14, 16))), 
    244 	new Version(24, new Array(6, 28, 54, 80, 106), new ECBlocks(30, new ECB(6, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(6, 45), new ECB(14, 46)), new ECBlocks(30, new ECB(11, 24), new ECB(16, 25)), new ECBlocks(30, new ECB(30, 16), new ECB(2, 17))), 
    245 	new Version(25, new Array(6, 32, 58, 84, 110), new ECBlocks(26, new ECB(8, 106), new ECB(4, 107)), new ECBlocks(28, new ECB(8, 47), new ECB(13, 48)), new ECBlocks(30, new ECB(7, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(13, 16))), 
    246 	new Version(26, new Array(6, 30, 58, 86, 114), new ECBlocks(28, new ECB(10, 114), new ECB(2, 115)), new ECBlocks(28, new ECB(19, 46), new ECB(4, 47)), new ECBlocks(28, new ECB(28, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(33, 16), new ECB(4, 17))), 
    247 	new Version(27, new Array(6, 34, 62, 90, 118), new ECBlocks(30, new ECB(8, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(22, 45), new ECB(3, 46)), new ECBlocks(30, new ECB(8, 23), new ECB(26, 24)), new ECBlocks(30, new ECB(12, 15), 		new ECB(28, 16))),
    248 	new Version(28, new Array(6, 26, 50, 74, 98, 122), new ECBlocks(30, new ECB(3, 117), new ECB(10, 118)), new ECBlocks(28, new ECB(3, 45), new ECB(23, 46)), new ECBlocks(30, new ECB(4, 24), new ECB(31, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(31, 16))), 
    249 	new Version(29, new Array(6, 30, 54, 78, 102, 126), new ECBlocks(30, new ECB(7, 116), new ECB(7, 117)), new ECBlocks(28, new ECB(21, 45), new ECB(7, 46)), new ECBlocks(30, new ECB(1, 23), new ECB(37, 24)), new ECBlocks(30, new ECB(19, 15), new ECB(26, 16))), 
    250 	new Version(30, new Array(6, 26, 52, 78, 104, 130), new ECBlocks(30, new ECB(5, 115), new ECB(10, 116)), new ECBlocks(28, new ECB(19, 47), new ECB(10, 48)), new ECBlocks(30, new ECB(15, 24), new ECB(25, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(25, 16))), 
    251 	new Version(31, new Array(6, 30, 56, 82, 108, 134), new ECBlocks(30, new ECB(13, 115), new ECB(3, 116)), new ECBlocks(28, new ECB(2, 46), new ECB(29, 47)), new ECBlocks(30, new ECB(42, 24), new ECB(1, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(28, 16))), 
    252 	new Version(32, new Array(6, 34, 60, 86, 112, 138), new ECBlocks(30, new ECB(17, 115)), new ECBlocks(28, new ECB(10, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(10, 24), new ECB(35, 25)), new ECBlocks(30, new ECB(19, 15), new ECB(35, 16))), 
    253 	new Version(33, new Array(6, 30, 58, 86, 114, 142), new ECBlocks(30, new ECB(17, 115), new ECB(1, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(21, 47)), new ECBlocks(30, new ECB(29, 24), new ECB(19, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(46, 16))), 
    254 	new Version(34, new Array(6, 34, 62, 90, 118, 146), new ECBlocks(30, new ECB(13, 115), new ECB(6, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(44, 24), new ECB(7, 25)), new ECBlocks(30, new ECB(59, 16), new ECB(1, 17))), 
    255 	new Version(35, new Array(6, 30, 54, 78, 102, 126, 150), new ECBlocks(30, new ECB(12, 121), new ECB(7, 122)), new ECBlocks(28, new ECB(12, 47), new ECB(26, 48)), new ECBlocks(30, new ECB(39, 24), new ECB(14, 25)),new ECBlocks(30, new ECB(22, 15), new ECB(41, 16))), 
    256 	new Version(36, new Array(6, 24, 50, 76, 102, 128, 154), new ECBlocks(30, new ECB(6, 121), new ECB(14, 122)), new ECBlocks(28, new ECB(6, 47), new ECB(34, 48)), new ECBlocks(30, new ECB(46, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(2, 15), new ECB(64, 16))), 
    257 	new Version(37, new Array(6, 28, 54, 80, 106, 132, 158), new ECBlocks(30, new ECB(17, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(29, 46), new ECB(14, 47)), new ECBlocks(30, new ECB(49, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(24, 15), new ECB(46, 16))), 
    258 	new Version(38, new Array(6, 32, 58, 84, 110, 136, 162), new ECBlocks(30, new ECB(4, 122), new ECB(18, 123)), new ECBlocks(28, new ECB(13, 46), new ECB(32, 47)), new ECBlocks(30, new ECB(48, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(42, 15), new ECB(32, 16))), 
    259 	new Version(39, new Array(6, 26, 54, 82, 110, 138, 166), new ECBlocks(30, new ECB(20, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(40, 47), new ECB(7, 48)), new ECBlocks(30, new ECB(43, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(10, 15), new ECB(67, 16))), 
    260 	new Version(40, new Array(6, 30, 58, 86, 114, 142, 170), new ECBlocks(30, new ECB(19, 118), new ECB(6, 119)), new ECBlocks(28, new ECB(18, 47), new ECB(31, 48)), new ECBlocks(30, new ECB(34, 24), new ECB(34, 25)), new ECBlocks(30, new ECB(20, 15), new ECB(61, 16))));
    261 }