user1357851
user1357851

Reputation:

Getting country calling prefix

Just wondering whether there are easy ways to retrieve country calling code from a user's phone.

For example, my app would like to pre-fill country calling code for the users.

If the user is located in the U.S. the code +1 will be returned, +83 for China, +61 for Australia etc.

I had a look around but I could only see:

NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];

Which returns the abbreviation for the country code, not the calling prefix?

Help is appreciated!

Upvotes: 12

Views: 26537

Answers (10)

Den
Den

Reputation: 3591

Swift

  let callingCodes = ["AD":"376","AE":"971","AF":"93","AG":"1","AI":"1","AL":"355","AM":"374","AN":"599","AO":"244","AR":"54","AS":"1","AT":"43","AU":"61","AW":"297","AZ":"994",
                        "BA":"387","BB":"1","BD":"880","BE":"32","BF":"226","BG":"359","BH":"973","BI":"257","BJ":"229","BL":"590","BM":"1","BN":"673","BO":"591","BR":"55","BS":"1","BT":"975","BW":"267","BY":"375","BZ":"501",
                        "CA":"1","CC":"61","CD":"243","CF":"236","CG":"242","CH":"41","CI":"225","CK":"682","CL":"56","CM":"237","CN":"86","CO":"57","CR":"506","CU":"53","CV":"238","CX":"61","CY":"537","CZ":"420",
                        "DE":"49","DJ":"253","DK":"45","DM":"1","DO":"1","DZ":"213",
                        "EC":"593","EE":"372","EG":"20","ER":"291","ES":"34","ET":"251",
                        "FI":"358","FJ":"679","FK":"500","FM":"691","FO":"298","FR":"33",
                        "GA":"241","GB":"44","GD":"1","GE":"995","GF":"594","GG":"44","GH":"233","GI":"350","GL":"299","GM":"220","GN":"224","GP":"590","GQ":"240","GR":"30","GS":"500","GT":"502","GU":"1","GW":"245","GY":"595",
                        "HK":"852","HN":"504","HR":"385","HT":"509","HU":"36","ID":"62","IE":"353",
                        "IL":"972","IM":"44","IN":"91","IO":"246","IQ":"964","IR":"98","IS":"354","IT":"39",
                        "JE":"44","JM":"1","JO":"962","JP":"81",
                        "KE":"254","KG":"996","KH":"855","KI":"686","KM":"269","KN":"1","KP":"850","KR":"82","KW":"965","KY":"345","KZ":"77",
                        "LA":"856","LB":"961","LC":"1","LI":"423","LK":"94","LR":"231","LS":"266","LT":"370","LU":"352","LV":"371","LY":"218",
                        "MA":"212","MC":"377","MD":"373","ME":"382","MF":"590","MG":"261","MH":"692","MK":"389","ML":"223","MM":"95","MN":"976","MO":"853","MP":"1","MQ":"596","MR":"222","MS":"1","MT":"356","MU":"230","MV":"960","MW":"265","MX":"52","MY":"60","MZ":"258",
                        "NA":"264","NC":"687","NE":"227","NF":"672","NG":"234","NI":"505","NL":"31","NO":"47","NP":"977","NR":"674","NU":"683","NZ":"64",
                        "OM":"968",
                        "PA":"507","PE":"51","PF":"689","PG":"675","PH":"63","PK":"92","PL":"48","PM":"508","PN":"872","PR":"1","PS":"970","PT":"351","PW":"680","PY":"595",
                        "QA":"974",
                        "RE":"262","RO":"40","RS":"381","RU":"7","RW":"250",
                        "SA":"966","SB":"677","SC":"248","SD":"249","SE":"46","SG":"65","SH":"290","SI":"386","SJ":"47","SK":"421","SL":"232","SM":"378","SN":"221","SO":"252","SR":"597","ST":"239","SV":"503","SY":"963","SZ":"268",
                        "TC":"1","TD":"235","TG":"228","TH":"66","TJ":"992","TK":"690","TL":"670","TM":"993","TN":"216","TO":"676","TR":"90","TT":"1","TV":"688","TW":"886","TZ":"255",
                        "UA":"380","UG":"256","US":"1","UY":"598","UZ":"998",
                        "VA":"379","VC":"1","VE":"58","VG":"284","VI":"340","VN":"84","VU":"678",
                        "WF":"681","WS":"685",
                        "YE":"967","YT":"262",
                        "ZA":"27","ZM":"260","ZW":"263"]

Upvotes: 1

Jigar Pandya
Jigar Pandya

Reputation: 5977

Well an alternate and proven way is to call WebService for this you can use http://www.webservicex.net/country.asmx's GetISD WebMethod and pass current location's country.

This way you can be sure that you get the relevant ISD ID for the country from where user accessing the app.

Other way is to have all the ISO countries in you SQLite database and then you perform lookup based on current location's country and show the respective entry.

How to retrieve user's current city name? is way to find country name using CLLocationManager.

Hope this helps,

Thanks, Jigar

Upvotes: 0

Hesham
Hesham

Reputation: 5274

Use HMDiallingCode. It uses CoreLocation and reverse geocoding to determine the country of the user, then retrieve it's international dialling code.

Upvotes: 1

Hardik Thakkar
Hardik Thakkar

Reputation: 15951

Here is a code to get calling prefix

1)

- (NSDictionary *)getCountryCodeDictionary {
    return [NSDictionary dictionaryWithObjectsAndKeys:@"972", @"IL",
            @"93", @"AF", @"355", @"AL", @"213", @"DZ", @"1", @"AS",
            @"376", @"AD", @"244", @"AO", @"1", @"AI", @"1", @"AG",
            @"54", @"AR", @"374", @"AM", @"297", @"AW", @"61", @"AU",
            @"43", @"AT", @"994", @"AZ", @"1", @"BS", @"973", @"BH",
            @"880", @"BD", @"1", @"BB", @"375", @"BY", @"32", @"BE",
            @"501", @"BZ", @"229", @"BJ", @"1", @"BM", @"975", @"BT",
            @"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO",
            @"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH",
            @"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY",
            @"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN",
            @"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG",
            @"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU",
            @"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ",
            @"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG",
            @"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE",
            @"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI",
            @"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA",
            @"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH",
            @"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD",
            @"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN",
            @"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN",
            @"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID",
            @"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT",
            @"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ",
            @"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG",
            @"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR",
            @"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG",
            @"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML",
            @"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR",
            @"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC",
            @"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA",
            @"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP",
            @"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ",
            @"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU",
            @"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM",
            @"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG",
            @"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL",
            @"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO",
            @"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA",
            @"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL",
            @"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB",
            @"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK",
            @"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE",
            @"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG",
            @"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN",
            @"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV",
            @"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB",
            @"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU",
            @"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW",
            @"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD",
            @"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA",
            @"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE",
            @"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY",
            @"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD",
            @"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE",
            @"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN",
            @"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC",
            @"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963", @"SY",
            @"886", @"TW", @"255", @"TZ", @"670", @"TL", @"58", @"VE",
            @"84", @"VN", @"1", @"VG", @"1", @"VI", nil];
}

2)

#pragma mark - Custom Method 
-(void)setDefaultCountryCode{
 NSString *countryIdentifier = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
 NSLog(@"%@",[NSString stringWithFormat:@"+%@",[[self getCountryCodeDictionary] objectForKey:countryIdentifier]]);
}

Upvotes: 7

kalyan711987
kalyan711987

Reputation: 476

By using coretelephony.framework you can get the country code of the phone number.

CTTelephonyNetworkInfo *info = [CTTelephonyNetworkInfo new];

CTCarrier *carrier = info.subscriberCellularProvider;

NSLog(@"Country code is: %@",carrier.mobileCountryCode);

Upvotes: 3

Meet
Meet

Reputation: 4934

I have come across one more such simple solution on cocoacontrols.com.

Please check the Country List for iOS.

It has a json file which can be configured to update more information and used as required.

Upvotes: 1

Singh
Singh

Reputation: 2161

you need to put all the country codes in a csv file , so that later on you can read the country codes from that particular file and sort the data for a particular country code . following is the complete list of country codes

Afghanistan-93,
Albania-355,
Algeria-213,
Andorra-376,
Angola-244,
Argentina-54,
Armenia-374,
Australia-61,
Austria-43,
Azerbaijan-994,
Bahrain-973,
Bangladesh-880,
Belarus-375,
Belgium-32,
Belize-501,
Benin-229,
Bhutan-975,
Bolivia-591,
BosniaandHerzegovina-387,
Botswana-267,
Brazil-55,
Brunei-673,
Bulgaria-359,
BurkinaFaso-226,
Burundi-257,
Cambodia-855,
Cameroon-237,
Canada-1,
CapeVerde-238,
CentralAfricanRepublic-236,
Chad-235,
Chile-56,
China,People'sRepublicof-86,
Colombia-57,
Comoros-269,
Congo,DemocraticRepublicofthe(CongoヨKinshasa)-243,
Congo,Republicofthe(CongoヨBrazzaville)-242,
CostaRica-506,
Coted'Ivoire(IvoryCoast)-225,
Croatia-385,
Cuba-53,
Cyprus-357,
CzechRepublic-420,
Denmark-45,
Djibouti-253,
Ecuador-593,
Egypt-20,
ElSalvador-503,
EquatorialGuinea-240,
Eritrea-291,
Estonia-372,
Ethiopia-251,
Fiji-679,
Finland-358,
France-33,
Gabon-241,
Gambia,The-220,
Georgia-995,
Germany-49,
Ghana-233,
Greece-30,
Guatemala-502,
Guinea-224,
Guinea-Bissau-245,
Guyana-592,
Haiti-509,
Honduras-504,
Hungary-36,
Iceland-354,
India-91,
Indonesia-62,
Iran-98,
Iraq-964,
Ireland-353,
Israel-972,
Italy-39,
Japan-81,
Jordan-962,
Kazakhstan-7,
Kenya-254,
Kiribati-686,
Korea,DemocraticPeople'sRepublicof(NorthKorea)-850,
Korea,Republicof(SouthKorea)-82,
Kuwait-965,
Kyrgyzstan-996,
Laos-856,
Latvia-371,
Lebanon-961,
Lesotho-266,
Liberia-231,
Libya-218,
Liechtenstein-423,
Lithuania-370,
Luxembourg-352,
Macedonia-389,
Madagascar-261,
Malawi-265,
Malaysia-60,
Maldives-960,
Mali-223,
Malta-356,
MarshallIslands-692,
Mauritania-222,
Mauritius-230,
Mexico-52,
Micronesia-691,
Moldova-373,
Monaco-377,
Mongolia-976,
Montenegro-382,
Morocco-212,
Mozambique-258,
Myanmar(Burma)-95,
Namibia-264,
Nauru-674,
Nepal-977,
Netherlands-31,
NewZealand-64,
Nicaragua-505,
Niger-227,
Nigeria-234,
Norway-47,
Oman-968,
Pakistan-92,
Palau-680,
Panama-507,
PapuaNewGuinea-675,
Paraguay-595,
Peru-51,
Philippines-63,
Poland-48,
Portugal-351,
Qatar-974,
Romania-40,
Russia-7,
Rwanda-250,
Samoa-685,
SanMarino-378,
SaoTomeandPrincipe-239,
SaudiArabia-966,
Senegal-221,
Serbia-381,
Seychelles-248,
SierraLeone-232,
Singapore-65,
Slovakia-421,
Slovenia-386,
SolomonIslands-677,
Somalia-252,
SouthAfrica-27,
Spain-34,
SriLanka-94,
Sudan-249,
Suriname-597,
Swaziland-268,
Sweden-46,
Switzerland-41,
Syria-963,
Tajikistan-992,
Tanzania-255,
Thailand-66,
Timor-Leste(EastTimor)-670,
Togo-228,
Tonga-676,
Tunisia-216,
Turkey-90,
Turkmenistan-993,
Tuvalu-688,
Uganda-256,
Ukraine-380,
UnitedArabEmirates-971,
UnitedKingdom-44,
UnitedStates-1,
Uruguay-598,
Uzbekistan-998,
Vanuatu-678,
VaticanCity-379,
Venezuela-58,
Vietnam-84,
Yemen-967,
Zambia-260,
Zimbabwe-263,
Abkhazia-995,
China,Republicof(Taiwan)-886,
Somaliland-252,
SouthOssetia-995,
ChristmasIsland-61,
Cocos(Keeling)Islands-61,
NorfolkIsland-672,
NewCaledonia-687,
FrenchPolynesia-689,
Mayotte-262,
SaintBarthelemy-590,
SaintMartin-590,
SaintPierreandMiquelon-508,
WallisandFutuna-681,
CookIslands-682,
Niue-683,
Tokelau-690,
Guernsey-44,
IsleofMan-44,
Jersey-44,
BritishIndianOceanTerritory-246,
BritishSovereignBaseAreas-357,
FalklandIslands(IslasMalvinas)-500,
Gibraltar-350,
SaintHelena-290,
HongKong-852,
Macau-853,
FaroeIslands-298,
Greenland-299,
FrenchGuiana-594,
Guadeloupe-590,
Martinique-596,
Reunion-262,
Aruba-297,
NetherlandsAntilles-599,
Svalbard-47,
Ascension-247,
TristandaCunha-290,
PalestinianTerritories(GazaStripandWestBank)-970,
WesternSahara-212,

Upvotes: 0

AlBeebe
AlBeebe

Reputation: 8121

I created an NSDictionary containing country codes and calling codes that you could use to lookup the calling code.

Using your above code and the NSDictionary you would do something like this...

NSLocale *locale = [NSLocale currentLocale];
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode];
NSString *callingCode = [dictCodes objectForKey:countryCode];

Upvotes: -1

lqs
lqs

Reputation: 1454

The NSLocaleCountryCode is the country code defined in ISO-3166, not the calling code. You need to find the calling code elsewhere.

See Link for a complete list of ISO3166 -> calling code.

Upvotes: 1

rmaddy
rmaddy

Reputation: 318774

See RMPhoneFormat for a class that provides this information as well as formatting phone numbers.

Note: this was created by me.

Upvotes: 11

Related Questions