您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ZXEANManufacturerOrgSupport.m 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /*
  2. * Copyright 2012 ZXing authors
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "ZXEANManufacturerOrgSupport.h"
  17. @interface ZXEANManufacturerOrgSupport ()
  18. @property (nonatomic, strong, readonly) NSMutableArray *countryIdentifiers;
  19. @property (nonatomic, strong, readonly) NSMutableArray *ranges;
  20. @end
  21. @implementation ZXEANManufacturerOrgSupport
  22. - (id)init {
  23. if (self = [super init]) {
  24. _ranges = [NSMutableArray array];
  25. _countryIdentifiers = [NSMutableArray array];
  26. }
  27. return self;
  28. }
  29. - (NSString *)lookupCountryIdentifier:(NSString *)productCode {
  30. [self initIfNeeded];
  31. int prefix = [[productCode substringToIndex:3] intValue];
  32. NSUInteger max = self.ranges.count;
  33. for (int i = 0; i < max; i++) {
  34. NSArray *range = self.ranges[i];
  35. int start = [range[0] intValue];
  36. if (prefix < start) {
  37. return nil;
  38. }
  39. int end = [range count] == 1 ? start : [range[1] intValue];
  40. if (prefix <= end) {
  41. return self.countryIdentifiers[i];
  42. }
  43. }
  44. return nil;
  45. }
  46. - (void)add:(NSArray *)range identifier:(NSString *)identifier {
  47. [self.ranges addObject:range];
  48. [self.countryIdentifiers addObject:identifier];
  49. }
  50. - (void)initIfNeeded {
  51. @synchronized (self.ranges) {
  52. if ([self.ranges count] > 0) {
  53. return;
  54. }
  55. [self add:@[@0, @19] identifier:@"US/CA"];
  56. [self add:@[@30, @39] identifier:@"US"];
  57. [self add:@[@60, @139] identifier:@"US/CA"];
  58. [self add:@[@300, @379] identifier:@"FR"];
  59. [self add:@[@380] identifier:@"BG"];
  60. [self add:@[@383] identifier:@"SI"];
  61. [self add:@[@385] identifier:@"HR"];
  62. [self add:@[@387] identifier:@"BA"];
  63. [self add:@[@400, @440] identifier:@"DE"];
  64. [self add:@[@450, @459] identifier:@"JP"];
  65. [self add:@[@460, @469] identifier:@"RU"];
  66. [self add:@[@471] identifier:@"TW"];
  67. [self add:@[@474] identifier:@"EE"];
  68. [self add:@[@475] identifier:@"LV"];
  69. [self add:@[@476] identifier:@"AZ"];
  70. [self add:@[@477] identifier:@"LT"];
  71. [self add:@[@478] identifier:@"UZ"];
  72. [self add:@[@479] identifier:@"LK"];
  73. [self add:@[@480] identifier:@"PH"];
  74. [self add:@[@481] identifier:@"BY"];
  75. [self add:@[@482] identifier:@"UA"];
  76. [self add:@[@484] identifier:@"MD"];
  77. [self add:@[@485] identifier:@"AM"];
  78. [self add:@[@486] identifier:@"GE"];
  79. [self add:@[@487] identifier:@"KZ"];
  80. [self add:@[@489] identifier:@"HK"];
  81. [self add:@[@490, @499] identifier:@"JP"];
  82. [self add:@[@500, @509] identifier:@"GB"];
  83. [self add:@[@520] identifier:@"GR"];
  84. [self add:@[@528] identifier:@"LB"];
  85. [self add:@[@529] identifier:@"CY"];
  86. [self add:@[@531] identifier:@"MK"];
  87. [self add:@[@535] identifier:@"MT"];
  88. [self add:@[@539] identifier:@"IE"];
  89. [self add:@[@540, @549] identifier:@"BE/LU"];
  90. [self add:@[@560] identifier:@"PT"];
  91. [self add:@[@569] identifier:@"IS"];
  92. [self add:@[@570, @579] identifier:@"DK"];
  93. [self add:@[@590] identifier:@"PL"];
  94. [self add:@[@594] identifier:@"RO"];
  95. [self add:@[@599] identifier:@"HU"];
  96. [self add:@[@600, @601] identifier:@"ZA"];
  97. [self add:@[@603] identifier:@"GH"];
  98. [self add:@[@608] identifier:@"BH"];
  99. [self add:@[@609] identifier:@"MU"];
  100. [self add:@[@611] identifier:@"MA"];
  101. [self add:@[@613] identifier:@"DZ"];
  102. [self add:@[@616] identifier:@"KE"];
  103. [self add:@[@618] identifier:@"CI"];
  104. [self add:@[@619] identifier:@"TN"];
  105. [self add:@[@621] identifier:@"SY"];
  106. [self add:@[@622] identifier:@"EG"];
  107. [self add:@[@624] identifier:@"LY"];
  108. [self add:@[@625] identifier:@"JO"];
  109. [self add:@[@626] identifier:@"IR"];
  110. [self add:@[@627] identifier:@"KW"];
  111. [self add:@[@628] identifier:@"SA"];
  112. [self add:@[@629] identifier:@"AE"];
  113. [self add:@[@640, @649] identifier:@"FI"];
  114. [self add:@[@690, @695] identifier:@"CN"];
  115. [self add:@[@700, @709] identifier:@"NO"];
  116. [self add:@[@729] identifier:@"IL"];
  117. [self add:@[@730, @739] identifier:@"SE"];
  118. [self add:@[@740] identifier:@"GT"];
  119. [self add:@[@741] identifier:@"SV"];
  120. [self add:@[@742] identifier:@"HN"];
  121. [self add:@[@743] identifier:@"NI"];
  122. [self add:@[@744] identifier:@"CR"];
  123. [self add:@[@745] identifier:@"PA"];
  124. [self add:@[@746] identifier:@"DO"];
  125. [self add:@[@750] identifier:@"MX"];
  126. [self add:@[@754, @755] identifier:@"CA"];
  127. [self add:@[@759] identifier:@"VE"];
  128. [self add:@[@760, @769] identifier:@"CH"];
  129. [self add:@[@770] identifier:@"CO"];
  130. [self add:@[@773] identifier:@"UY"];
  131. [self add:@[@775] identifier:@"PE"];
  132. [self add:@[@777] identifier:@"BO"];
  133. [self add:@[@779] identifier:@"AR"];
  134. [self add:@[@780] identifier:@"CL"];
  135. [self add:@[@784] identifier:@"PY"];
  136. [self add:@[@785] identifier:@"PE"];
  137. [self add:@[@786] identifier:@"EC"];
  138. [self add:@[@789, @790] identifier:@"BR"];
  139. [self add:@[@800, @839] identifier:@"IT"];
  140. [self add:@[@840, @849] identifier:@"ES"];
  141. [self add:@[@850] identifier:@"CU"];
  142. [self add:@[@858] identifier:@"SK"];
  143. [self add:@[@859] identifier:@"CZ"];
  144. [self add:@[@860] identifier:@"YU"];
  145. [self add:@[@865] identifier:@"MN"];
  146. [self add:@[@867] identifier:@"KP"];
  147. [self add:@[@868, @869] identifier:@"TR"];
  148. [self add:@[@870, @879] identifier:@"NL"];
  149. [self add:@[@880] identifier:@"KR"];
  150. [self add:@[@885] identifier:@"TH"];
  151. [self add:@[@888] identifier:@"SG"];
  152. [self add:@[@890] identifier:@"IN"];
  153. [self add:@[@893] identifier:@"VN"];
  154. [self add:@[@896] identifier:@"PK"];
  155. [self add:@[@899] identifier:@"ID"];
  156. [self add:@[@900, @919] identifier:@"AT"];
  157. [self add:@[@930, @939] identifier:@"AU"];
  158. [self add:@[@940, @949] identifier:@"AZ"];
  159. [self add:@[@955] identifier:@"MY"];
  160. [self add:@[@958] identifier:@"MO"];
  161. }
  162. }
  163. @end