123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /*
- * Copyright 2012 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- #import "ZXEANManufacturerOrgSupport.h"
-
- @interface ZXEANManufacturerOrgSupport ()
-
- @property (nonatomic, strong, readonly) NSMutableArray *countryIdentifiers;
- @property (nonatomic, strong, readonly) NSMutableArray *ranges;
-
- @end
-
- @implementation ZXEANManufacturerOrgSupport
-
- - (id)init {
- if (self = [super init]) {
- _ranges = [NSMutableArray array];
- _countryIdentifiers = [NSMutableArray array];
- }
-
- return self;
- }
-
- - (NSString *)lookupCountryIdentifier:(NSString *)productCode {
- [self initIfNeeded];
-
- int prefix = [[productCode substringToIndex:3] intValue];
- NSUInteger max = self.ranges.count;
-
- for (int i = 0; i < max; i++) {
- NSArray *range = self.ranges[i];
- int start = [range[0] intValue];
- if (prefix < start) {
- return nil;
- }
- int end = [range count] == 1 ? start : [range[1] intValue];
- if (prefix <= end) {
- return self.countryIdentifiers[i];
- }
- }
-
- return nil;
- }
-
- - (void)add:(NSArray *)range identifier:(NSString *)identifier {
- [self.ranges addObject:range];
- [self.countryIdentifiers addObject:identifier];
- }
-
- - (void)initIfNeeded {
- @synchronized (self.ranges) {
- if ([self.ranges count] > 0) {
- return;
- }
-
- [self add:@[@0, @19] identifier:@"US/CA"];
- [self add:@[@30, @39] identifier:@"US"];
- [self add:@[@60, @139] identifier:@"US/CA"];
- [self add:@[@300, @379] identifier:@"FR"];
- [self add:@[@380] identifier:@"BG"];
- [self add:@[@383] identifier:@"SI"];
- [self add:@[@385] identifier:@"HR"];
- [self add:@[@387] identifier:@"BA"];
- [self add:@[@400, @440] identifier:@"DE"];
- [self add:@[@450, @459] identifier:@"JP"];
- [self add:@[@460, @469] identifier:@"RU"];
- [self add:@[@471] identifier:@"TW"];
- [self add:@[@474] identifier:@"EE"];
- [self add:@[@475] identifier:@"LV"];
- [self add:@[@476] identifier:@"AZ"];
- [self add:@[@477] identifier:@"LT"];
- [self add:@[@478] identifier:@"UZ"];
- [self add:@[@479] identifier:@"LK"];
- [self add:@[@480] identifier:@"PH"];
- [self add:@[@481] identifier:@"BY"];
- [self add:@[@482] identifier:@"UA"];
- [self add:@[@484] identifier:@"MD"];
- [self add:@[@485] identifier:@"AM"];
- [self add:@[@486] identifier:@"GE"];
- [self add:@[@487] identifier:@"KZ"];
- [self add:@[@489] identifier:@"HK"];
- [self add:@[@490, @499] identifier:@"JP"];
- [self add:@[@500, @509] identifier:@"GB"];
- [self add:@[@520] identifier:@"GR"];
- [self add:@[@528] identifier:@"LB"];
- [self add:@[@529] identifier:@"CY"];
- [self add:@[@531] identifier:@"MK"];
- [self add:@[@535] identifier:@"MT"];
- [self add:@[@539] identifier:@"IE"];
- [self add:@[@540, @549] identifier:@"BE/LU"];
- [self add:@[@560] identifier:@"PT"];
- [self add:@[@569] identifier:@"IS"];
- [self add:@[@570, @579] identifier:@"DK"];
- [self add:@[@590] identifier:@"PL"];
- [self add:@[@594] identifier:@"RO"];
- [self add:@[@599] identifier:@"HU"];
- [self add:@[@600, @601] identifier:@"ZA"];
- [self add:@[@603] identifier:@"GH"];
- [self add:@[@608] identifier:@"BH"];
- [self add:@[@609] identifier:@"MU"];
- [self add:@[@611] identifier:@"MA"];
- [self add:@[@613] identifier:@"DZ"];
- [self add:@[@616] identifier:@"KE"];
- [self add:@[@618] identifier:@"CI"];
- [self add:@[@619] identifier:@"TN"];
- [self add:@[@621] identifier:@"SY"];
- [self add:@[@622] identifier:@"EG"];
- [self add:@[@624] identifier:@"LY"];
- [self add:@[@625] identifier:@"JO"];
- [self add:@[@626] identifier:@"IR"];
- [self add:@[@627] identifier:@"KW"];
- [self add:@[@628] identifier:@"SA"];
- [self add:@[@629] identifier:@"AE"];
- [self add:@[@640, @649] identifier:@"FI"];
- [self add:@[@690, @695] identifier:@"CN"];
- [self add:@[@700, @709] identifier:@"NO"];
- [self add:@[@729] identifier:@"IL"];
- [self add:@[@730, @739] identifier:@"SE"];
- [self add:@[@740] identifier:@"GT"];
- [self add:@[@741] identifier:@"SV"];
- [self add:@[@742] identifier:@"HN"];
- [self add:@[@743] identifier:@"NI"];
- [self add:@[@744] identifier:@"CR"];
- [self add:@[@745] identifier:@"PA"];
- [self add:@[@746] identifier:@"DO"];
- [self add:@[@750] identifier:@"MX"];
- [self add:@[@754, @755] identifier:@"CA"];
- [self add:@[@759] identifier:@"VE"];
- [self add:@[@760, @769] identifier:@"CH"];
- [self add:@[@770] identifier:@"CO"];
- [self add:@[@773] identifier:@"UY"];
- [self add:@[@775] identifier:@"PE"];
- [self add:@[@777] identifier:@"BO"];
- [self add:@[@779] identifier:@"AR"];
- [self add:@[@780] identifier:@"CL"];
- [self add:@[@784] identifier:@"PY"];
- [self add:@[@785] identifier:@"PE"];
- [self add:@[@786] identifier:@"EC"];
- [self add:@[@789, @790] identifier:@"BR"];
- [self add:@[@800, @839] identifier:@"IT"];
- [self add:@[@840, @849] identifier:@"ES"];
- [self add:@[@850] identifier:@"CU"];
- [self add:@[@858] identifier:@"SK"];
- [self add:@[@859] identifier:@"CZ"];
- [self add:@[@860] identifier:@"YU"];
- [self add:@[@865] identifier:@"MN"];
- [self add:@[@867] identifier:@"KP"];
- [self add:@[@868, @869] identifier:@"TR"];
- [self add:@[@870, @879] identifier:@"NL"];
- [self add:@[@880] identifier:@"KR"];
- [self add:@[@885] identifier:@"TH"];
- [self add:@[@888] identifier:@"SG"];
- [self add:@[@890] identifier:@"IN"];
- [self add:@[@893] identifier:@"VN"];
- [self add:@[@896] identifier:@"PK"];
- [self add:@[@899] identifier:@"ID"];
- [self add:@[@900, @919] identifier:@"AT"];
- [self add:@[@930, @939] identifier:@"AU"];
- [self add:@[@940, @949] identifier:@"AZ"];
- [self add:@[@955] identifier:@"MY"];
- [self add:@[@958] identifier:@"MO"];
- }
- }
-
- @end
|