QRConst.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. /**
  3. * Class QRConst
  4. *
  5. * @filesource QRConst.php
  6. * @created 26.11.2015
  7. * @package chillerlan\QRCode
  8. * @author Smiley <smiley@chillerlan.net>
  9. * @copyright 2015 Smiley
  10. * @license MIT
  11. */
  12. namespace chillerlan\QRCode;
  13. /**
  14. * const ALL THE THINGS! ~John Carmack
  15. */
  16. class QRConst{
  17. const OUTPUT_STRING_TEXT = 0;
  18. const OUTPUT_STRING_JSON = 1;
  19. const OUTPUT_STRING_HTML = 2;
  20. const ERROR_CORRECT_LEVEL_L = 1; // 7%.
  21. const ERROR_CORRECT_LEVEL_M = 0; // 15%.
  22. const ERROR_CORRECT_LEVEL_Q = 3; // 25%.
  23. const ERROR_CORRECT_LEVEL_H = 2; // 30%.
  24. const RSBLOCK = [
  25. self::ERROR_CORRECT_LEVEL_L => 0,
  26. self::ERROR_CORRECT_LEVEL_M => 1,
  27. self::ERROR_CORRECT_LEVEL_Q => 2,
  28. self::ERROR_CORRECT_LEVEL_H => 3,
  29. ];
  30. // max bits @ ec level L:07 M:15 Q:25 H:30 %
  31. const TYPE_01 = 1; // 152 128 104 72
  32. const TYPE_02 = 2; // 272 224 176 128
  33. const TYPE_03 = 3; // 440 352 272 208
  34. const TYPE_04 = 4; // 640 512 384 288
  35. const TYPE_05 = 5; // 864 688 496 368
  36. const TYPE_06 = 6; // 1088 864 608 480
  37. const TYPE_07 = 7; // 1248 992 704 528
  38. const TYPE_08 = 8; // 1552 1232 880 688
  39. const TYPE_09 = 9; // 1856 1456 1056 800
  40. const TYPE_10 = 10; // 2192 1728 1232 976
  41. const MAX_BITS = [
  42. self::TYPE_01 => [ 128, 152, 72, 104],
  43. self::TYPE_02 => [ 224, 272, 128, 176],
  44. self::TYPE_03 => [ 352, 440, 208, 272],
  45. self::TYPE_04 => [ 512, 640, 288, 384],
  46. self::TYPE_05 => [ 688, 864, 368, 496],
  47. self::TYPE_06 => [ 864, 1088, 480, 608],
  48. self::TYPE_07 => [ 992, 1248, 528, 704],
  49. self::TYPE_08 => [1232, 1552, 688, 880],
  50. self::TYPE_09 => [1456, 1856, 800, 1056],
  51. self::TYPE_10 => [1728, 2192, 976, 1232],
  52. ];
  53. const MODE_NUMBER = 1 << 0;
  54. const MODE_ALPHANUM = 1 << 1;
  55. const MODE_BYTE = 1 << 2;
  56. const MODE_KANJI = 1 << 3;
  57. const MODE = [
  58. self::MODE_NUMBER => 0,
  59. self::MODE_ALPHANUM => 1,
  60. self::MODE_BYTE => 2,
  61. self::MODE_KANJI => 3,
  62. ];
  63. const MASK_PATTERN000 = 0;
  64. const MASK_PATTERN001 = 1;
  65. const MASK_PATTERN010 = 2;
  66. const MASK_PATTERN011 = 3;
  67. const MASK_PATTERN100 = 4;
  68. const MASK_PATTERN101 = 5;
  69. const MASK_PATTERN110 = 6;
  70. const MASK_PATTERN111 = 7;
  71. const G15_MASK = (1 << 14)|(1 << 12)|(1 << 10)|(1 << 4)|(1 << 1);
  72. const G15 = (1 << 10)|(1 << 8)|(1 << 5)|(1 << 4)|(1 << 2)|(1 << 1)|(1 << 0);
  73. const G18 = (1 << 12)|(1 << 11)|(1 << 10)|(1 << 9)|(1 << 8)|(1 << 5)|(1 << 2)|(1 << 0);
  74. const PAD0 = 0xEC;
  75. const PAD1 = 0x11;
  76. const CHAR_MAP = [
  77. 36 => ' ',
  78. 37 => '$',
  79. 38 => '%',
  80. 39 => '*',
  81. 40 => '+',
  82. 41 => '-',
  83. 42 => '.',
  84. 43 => '/',
  85. 44 => ':',
  86. ];
  87. const MAX_LENGTH = [
  88. [[ 41, 25, 17, 10], [ 34, 20, 14, 8], [ 27, 16, 11, 7], [ 17, 10, 7, 4]],
  89. [[ 77, 47, 32, 20], [ 63, 38, 26, 16], [ 48, 29, 20, 12], [ 34, 20, 14, 8]],
  90. [[127, 77, 53, 32], [101, 61, 42, 26], [ 77, 47, 32, 20], [ 58, 35, 24, 15]],
  91. [[187, 114, 78, 48], [149, 90, 62, 38], [111, 67, 46, 28], [ 82, 50, 34, 21]],
  92. [[255, 154, 106, 65], [202, 122, 84, 52], [144, 87, 60, 37], [106, 64, 44, 27]],
  93. [[322, 195, 134, 82], [255, 154, 106, 65], [178, 108, 74, 45], [139, 84, 58, 36]],
  94. [[370, 224, 154, 95], [293, 178, 122, 75], [207, 125, 86, 53], [154, 93, 64, 39]],
  95. [[461, 279, 192, 118], [365, 221, 152, 93], [259, 157, 108, 66], [202, 122, 84, 52]],
  96. [[552, 335, 230, 141], [432, 262, 180, 111], [312, 189, 130, 80], [235, 143, 98, 60]],
  97. [[652, 395, 271, 167], [513, 311, 213, 131], [364, 221, 151, 93], [288, 174, 119, 74]],
  98. ];
  99. const BLOCK_TABLE = [
  100. // 1
  101. [1, 26, 19], // L
  102. [1, 26, 16], // M
  103. [1, 26, 13], // Q
  104. [1, 26, 9], // H
  105. // 2
  106. [1, 44, 34],
  107. [1, 44, 28],
  108. [1, 44, 22],
  109. [1, 44, 16],
  110. // 3
  111. [1, 70, 55],
  112. [1, 70, 44],
  113. [2, 35, 17],
  114. [2, 35, 13],
  115. // 4
  116. [1, 100, 80],
  117. [2, 50, 32],
  118. [2, 50, 24],
  119. [4, 25, 9],
  120. // 5
  121. [1, 134, 108],
  122. [2, 67, 43],
  123. [2, 33, 15, 2, 34, 16],
  124. [2, 33, 11, 2, 34, 12],
  125. // 6
  126. [2, 86, 68],
  127. [4, 43, 27],
  128. [4, 43, 19],
  129. [4, 43, 15],
  130. // 7
  131. [2, 98, 78],
  132. [4, 49, 31],
  133. [2, 32, 14, 4, 33, 15],
  134. [4, 39, 13, 1, 40, 14],
  135. // 8
  136. [2, 121, 97],
  137. [2, 60, 38, 2, 61, 39],
  138. [4, 40, 18, 2, 41, 19],
  139. [4, 40, 14, 2, 41, 15],
  140. // 9
  141. [2, 146, 116],
  142. [3, 58, 36, 2, 59, 37],
  143. [4, 36, 16, 4, 37, 17],
  144. [4, 36, 12, 4, 37, 13],
  145. // 10
  146. [2, 86, 68, 2, 87, 69],
  147. [4, 69, 43, 1, 70, 44],
  148. [6, 43, 19, 2, 44, 20],
  149. [6, 43, 15, 2, 44, 16],
  150. ];
  151. const PATTERN_POSITION = [
  152. [],
  153. [6, 18],
  154. [6, 22],
  155. [6, 26],
  156. [6, 30],
  157. [6, 34],
  158. [6, 22, 38],
  159. [6, 24, 42],
  160. [6, 26, 46],
  161. [6, 28, 50],
  162. [6, 30, 54],
  163. [6, 32, 58],
  164. [6, 34, 62],
  165. [6, 26, 46, 66],
  166. [6, 26, 48, 70],
  167. [6, 26, 50, 74],
  168. [6, 30, 54, 78],
  169. [6, 30, 56, 82],
  170. [6, 30, 58, 86],
  171. [6, 34, 62, 90],
  172. [6, 28, 50, 72, 94],
  173. [6, 26, 50, 74, 98],
  174. [6, 30, 54, 78, 102],
  175. [6, 28, 54, 80, 106],
  176. [6, 32, 58, 84, 110],
  177. [6, 30, 58, 86, 114],
  178. [6, 34, 62, 90, 118],
  179. [6, 26, 50, 74, 98, 122],
  180. [6, 30, 54, 78, 102, 126],
  181. [6, 26, 52, 78, 104, 130],
  182. [6, 30, 56, 82, 108, 134],
  183. [6, 34, 60, 86, 112, 138],
  184. [6, 30, 58, 86, 114, 142],
  185. [6, 34, 62, 90, 118, 146],
  186. [6, 30, 54, 78, 102, 126, 150],
  187. [6, 24, 50, 76, 102, 128, 154],
  188. [6, 28, 54, 80, 106, 132, 158],
  189. [6, 32, 58, 84, 110, 136, 162],
  190. [6, 26, 54, 82, 110, 138, 166],
  191. [6, 30, 58, 86, 114, 142, 170],
  192. ];
  193. }