/* * 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