qrazybox/js/table.js
2022-01-03 01:44:09 +01:00

466 lines
10 KiB
JavaScript

/********************************************************************
Tables and references used for QR code
*********************************************************************/
//Pattern (bitmatri-1) template for Function pattern and Format info
var function_pattern_with_format_info = {
/*
0 : white
1 : black
2-16 : Format info
*/
TOP_LEFT: [
[1,1,1,1,1,1,1,0,2],
[1,0,0,0,0,0,1,0,3],
[1,0,1,1,1,0,1,0,4],
[1,0,1,1,1,0,1,0,5],
[1,0,1,1,1,0,1,0,6],
[1,0,0,0,0,0,1,0,7],
[1,1,1,1,1,1,1,0,1],
[0,0,0,0,0,0,0,0,8],
[16,15,14,13,12,11,1,10,9]
],
TOP_RIGHT: [
[0,1,1,1,1,1,1,1],
[0,1,0,0,0,0,0,1],
[0,1,0,1,1,1,0,1],
[0,1,0,1,1,1,0,1],
[0,1,0,1,1,1,0,1],
[0,1,0,0,0,0,0,1],
[0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0],
[9,8,7,6,5,4,3,2]
],
BOTTOM_LEFT: [
[0,0,0,0,0,0,0,0,1],
[1,1,1,1,1,1,1,0,10],
[1,0,0,0,0,0,1,0,11],
[1,0,1,1,1,0,1,0,12],
[1,0,1,1,1,0,1,0,13],
[1,0,1,1,1,0,1,0,14],
[1,0,0,0,0,0,1,0,15],
[1,1,1,1,1,1,1,0,16],
]
};
var alignment_pattern_array = [
[], //1
[6, 18], //2
[6, 22], //3
[6, 26], //4
[6, 30], //5
[6, 34], //6
[6, 22, 38], //7
[6, 24, 42], //8
[6, 26, 46], //9
[6, 28, 50], //10
[6, 30, 54], //11
[6, 32, 58], //12
[6, 34, 62], //13
[6, 26, 46, 66], //14
[6, 26, 48, 70], //15
[6, 26, 50, 74], //16
[6, 30, 54, 78], //17
[6, 30, 56, 82], //18
[6, 30, 58, 86], //19
[6, 34, 62, 90], //20
[6, 28, 50, 72, 94], //21
[6, 26, 50, 74, 98], //22
[6, 30, 54, 78, 102], //23
[6, 28, 54, 80, 106], //24
[6, 32, 58, 84, 110], //25
[6, 30, 58, 86, 114], //26
[6, 34, 62, 90, 118], //27
[6, 26, 50, 74, 98, 122], //28
[6, 30, 54, 78, 102, 126], //29
[6, 26, 52, 78, 104, 130], //30
[6, 30, 56, 82, 108, 134], //31
[6, 34, 60, 86, 112, 138], //32
[6, 30, 58, 86, 114, 142], //33
[6, 34, 62, 90, 118, 146], //34
[6, 30, 54, 78, 102, 126, 150], //35
[6, 24, 50, 76, 102, 128, 154], //36
[6, 28, 54, 80, 106, 132, 158], //37
[6, 32, 58, 84, 110, 136, 162], //38
[6, 26, 54, 82, 110, 138, 166], //39
[6, 30, 58, 86, 114, 142, 170] //40
];
var format_information_bits_raw = {
ecc: [
"11", //L
"10", //M
"01", //Q
"00" //H
],
mask: [
"101",
"001",
"111",
"110",
"001",
"000",
"011",
"010"
]
}
var format_information_bits_partial = {
BOTTOM_LEFT: [
"1110111",
"1110010",
"1111101",
"1111000",
"1100110",
"1100011",
"1101100",
"1101001",
//ECC M
"1010100",
"1010001",
"1011110",
"1011011",
"1000101",
"1000000",
"1001111",
"1001010",
//ECC Q
"0110101",
"0110000",
"0111111",
"0111010",
"0100100",
"0100001",
"0101110",
"0101011",
//ECC H
"0010110",
"0010011",
"0011100",
"0011001",
"0000111",
"0000010",
"0001101",
"0001000"
],
TOP_RIGHT: [
"11000100",
"11110011",
"10101010",
"10011101",
"00101111",
"00011000",
"01000001",
"01110110",
//ECC M
"00010010",
"00100101",
"01111100",
"01001011",
"11111001",
"11001110",
"10010111",
"10100000",
//ECC Q
"01011111",
"01101000",
"00110001",
"00000110",
"10110100",
"10000011",
"11011010",
"11101101",
//ECC H
"10001001",
"10111110",
"11100111",
"11010000",
"01100010",
"01010101",
"00001100",
"00111011"
]
}
var format_information_bits = [
//ECC L
["111011111000100",
"111001011110011",
"111110110101010",
"111100010011101",
"110011000101111",
"110001100011000",
"110110001000001",
"110100101110110"],
//ECC M
["101010000010010",
"101000100100101",
"101111001111100",
"101101101001011",
"100010111111001",
"100000011001110",
"100111110010111",
"100101010100000"],
//ECC Q
["011010101011111",
"011000001101000",
"011111100110001",
"011101000000110",
"010010010110100",
"010000110000011",
"010111011011010",
"010101111101101"],
//ECC H
["001011010001001",
"001001110111110",
"001110011100111",
"001100111010000",
"000011101100010",
"000001001010101",
"000110100001100",
"000100000111011"]
];
var format_information_unmask = [
'000000000000000',
'000010100110111',
'000101001101110',
'000111101011001',
'001000111101011',
'001010011011100',
'001101110000101',
'001111010110010',
'010001111010110',
'010011011100001',
'010100110111000',
'010110010001111',
'011001000111101',
'011011100001010',
'011100001010011',
'011110101100100',
'100001010011011',
'100011110101100',
'100100011110101',
'100110111000010',
'101001101110000',
'101011001000111',
'101100100011110',
'101110000101001',
'110000101001101',
'110010001111010',
'110101100100011',
'110111000010100',
'111000010100110',
'111010110010001',
'111101011001000',
'111111111111111'
];
/* https://www.thonky.com/qr-code-tutorial/format-version-tables */
//Version information table for QR version 7 and higher
var version_information_table = [
"000111110010010100", //7
"001000010110111100", //8
"001001101010011001", //9
"001010010011010011", //10
"001011101111110110", //11
"001100011101100010", //12
"001101100001000111", //13
"001110011000001101", //14
"001111100100101000", //15
"010000101101111000", //16
"010001010001011101", //17
"010010101000010111", //18
"010011010100110010", //19
"010100100110100110", //20
"010101011010000011", //21
"010110100011001001", //22
"010111011111101100", //23
"011000111011000100", //24
"011001000111100001", //25
"011010111110101011", //26
"011011000010001110", //27
"011100110000011010", //28
"011101001100111111", //29
"011110110101110101", //30
"011111001001010000", //31
"100000100111010101", //32
"100001011011110000", //33
"100010100010111010", //34
"100011011110011111", //35
"100100101100001011", //36
"100101010000101110", //37
"100110101001100100", //38
"100111010101000001", //39
"101000110001101001" //40
];
/* https://www.thonky.com/qr-code-tutorial/format-version-information */
// L = 1
// M = 0
// Q = 3
// H = 2
/* M L H Q https://www.thonky.com/qr-code-tutorial/error-correction-table adding code block 1 and 2 */
var data_code_num_table = [
[ 16, 19, 9, 13], //1
[ 28, 34, 16, 22], //2
[ 44, 55, 26, 34], //3
[ 64, 80, 36, 48], //4
[ 86, 108, 46, 62], //5
[ 108, 136, 60, 76], //6
[ 124, 156, 66, 88], //7
[ 154, 194, 86, 110], //8
[ 182, 232, 100, 132], //9
[ 216, 274, 122, 154], //10
[ 254, 324, 140, 180], //11
[ 290, 370, 158, 206], //12
[ 334, 428, 180, 244], //13
[ 365, 461, 197, 261], //14
[ 415, 523, 223, 295], //15
[ 453, 589, 253, 325], //16
[ 507, 647, 283, 367], //17
[ 563, 721, 313, 397], //18
[ 627, 795, 341, 445], //19
[ 669, 861, 385, 485], //20
[ 714, 932, 406, 512], //21
[ 782, 1006, 442, 568], //22
[ 860, 1094, 464, 614], //23
[ 914, 1174, 514, 664], //24
[1000, 1276, 538, 718], //25
[1062, 1370, 596, 754], //26
[1128, 1468, 628, 808], //27
[1193, 1531, 661, 871], //28
[1267, 1631, 701, 911], //29
[1373, 1735, 745, 985], //30
[1455, 1843, 793, 1033], //31
[1541, 1955, 845, 1115], //32
[1631, 2071, 901, 1171], //33
[1725, 2191, 961, 1231], //34
[1812, 2306, 986, 1286], //35
[1914, 2434, 1054, 1354], //36
[1992, 2566, 1096, 1426], //37
[2102, 2702, 1142, 1502], //38
[2216, 2812, 1222, 1582], //39
[2334, 2956, 1276, 1666] //40
];
/* M L H Q https://www.thonky.com/qr-code-tutorial/error-correction-table adding code block 1 and 2 */
var RS_block_num_table = [
[1, 1, 1, 1], //1
[1, 1, 1, 1], //2
[1, 1, 2, 2], //3
[2, 1, 4, 2], //4
[2, 1, 4, 4], //5
[4, 2, 4, 4], //6
[4, 2, 5, 6], //7
[4, 2, 6, 6], //8
[5, 2, 8, 8], //9
[5, 4, 8, 8], //10
[5, 4, 11,8], //11
[8, 4, 11,10], //12
[9, 4, 16,12], //13
[9, 4, 16,16], //14
[10,6, 18,12], //15
[10,6, 16,17], //16
[11,6, 19,16], //17
[13, 6, 21, 18], //18
[14, 7, 25, 21], //19
[16, 8, 25, 20], //20
[17, 8, 25, 23], //21
[17, 9, 34, 23], //22
[18, 9, 30, 25], //23
[20, 10, 32, 27], //24
[21, 12, 35, 29], //25
[23, 12, 37, 34], //26
[25, 12, 40, 34], //27
[26, 13, 42, 35], //28
[28, 14, 45, 38], //29
[29, 15, 48, 40], //30
[31, 16, 51, 43], //31
[33, 17, 54, 45], //32
[35, 18, 57, 48], //33
[37, 19, 60, 51], //34
[38, 19, 63, 53], //35
[40, 20, 66, 56], //36
[43, 21, 70, 59], //37
[45, 22, 74, 62], //38
[47, 24, 77, 65], //39
[49, 25, 81, 68] //40
];
/* M L H Q https://www.thonky.com/qr-code-tutorial/error-correction-table adding code block 1 and 2 */
var error_correction_code_table = [
[10, 7,17,13], //1
[16,10,28,22], //2
[26,15,22,18], //3
[18,20,16,26], //4
[24,26,22,18], //5
[16,18,28,24], //6
[18,20,26,18], //7
[22,24,26,22], //8
[22,30,24,20], //9
[26,18,28,24], //10
[30,20,24,28], //11
[22,24,28,26], //12
[22,26,22,24], //13
[24,30,24,20], //14
[24,22,24,30], //15
[28,24,30,24], //16
[28,28,28,28], //17
[26,30,28,28], //18
[26,28,26,26], //19
[26,28,28,30], //20
[26,28,30,28], //21
[28,28,24,30], //22
[28,30,30,30], //23
[28,30,30,30], //24
[28,26,30,30], //25
[28,28,30,28], //26
[28,30,30,30], //27
[28,30,30,30], //28
[28,30,30,30], //29
[28,30,30,30], //30
[28,30,30,30], //31
[28,30,30,30], //32
[28,30,30,30], //33
[28,30,30,30], //34
[28,30,30,30], //35
[28,30,30,30], //36
[28,30,30,30], //37
[28,30,30,30], //38
[28,30,30,30], //39
[28,30,30,30] //40
];
var alphanumeric_table = [
"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "A", "B",
"C", "D", "E", "F", "G", "H",
"I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z",
" ", "$", "%", "*", "+", "-",
".", "/", ":"
];
/*
https://www.thonky.com/qr-code-tutorial/structure-final-message
up to QR version 40
1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940 */
var remainder_bits_table = [0,7,7,7,7,7,0,0,0,0,0,0,0,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,0,0,0,0,0,0];