12

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!

Volomike
  • 23,743
  • 21
  • 113
  • 209
  • Additional information: it's an iphone app. –  Oct 29 '12 at 04:53
  • 2
    I doubt the iOS SDK offers this functionality anywhere. You'll need to store a Country-Code <> Phone prefix dictionary somewhere. – Osiris Oct 29 '12 at 04:56
  • 1
    To correct a typo in this question. China's dial code should be +86. – nickcheng Feb 07 '18 at 02:20
  • Seems there is no built-in data of this inside Cocoa Touch. But you could still parse it from a mapping table yourself. Here is the standard from ITU. https://www.itu.int/pub/T-SP-E.164D-2016 – nickcheng Feb 07 '18 at 02:22

10 Answers10

11

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

Note: this was created by me.

rmaddy
  • 314,917
  • 42
  • 532
  • 579
  • 1
    @newenglander No it doesn't. There are no private APIs or frameworks used by `RMPhoneFormat`. I had three apps approved just two days ago using that code. – rmaddy Sep 18 '13 at 15:17
  • Ah, ok, that's good to know that it doesn't affect the approval process. (I just read this from the description, but from what you now say it seems safe enough: "This class depends on a copy of an Apple provided private framework file named Default.phoneformat being copied into the app's resource bundle and named PhoneFormats.dat.") – newenglander Sep 18 '13 at 15:31
  • @newenglander I suppose that description could be a little misleading. It boils down to the need to copy a single data file. That's all. I've been using that file and a form of this code in my App Store apps for 4 years. – rmaddy Sep 18 '13 at 15:47
  • i think one thing that needs to be discussed here is how exactly to retrieve the country locale? the code of the OP simply returns the locale which can be changed by the phone user anytime and has no definite correlation with their location on the map or the nationality of their cell operator. Should this be retrieved by sending the user's lat/long to google matrix api and making a reverse geocode call? – abbood Aug 07 '14 at 09:43
  • for example in android they got [telephonymanager](http://developer.android.com/reference/android/telephony/TelephonyManager.html) is there something similar to that in iOS? – abbood Aug 07 '14 at 09:49
  • AppSupport.framework doesn't seem to exist anymore (I couldn't find it with Xcode 6.1). Has it changed name, or moved? – Gruntcakes Jan 04 '15 at 21:24
  • You can also check this framework https://github.com/NikKovIos/NKVPhonePicker to automate country code picking. – Nike Kov May 28 '17 at 14:22
7

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]]);
}
Hardik Thakkar
  • 15,269
  • 2
  • 94
  • 81
3

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);
Ravi Gautam
  • 960
  • 2
  • 9
  • 20
kalyan711987
  • 476
  • 9
  • 14
1

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.

lqs
  • 1,434
  • 11
  • 20
  • Thanks for the link, I have downloaded "Dialing Country Code" & "ISO 3166-1 Country Char 2 Code" and put them in a NSDictionary with "ISO 3166-1 Country Char 2 Code" being the key and "Dialing Country Code" being the value. It seems to be working fine. –  Oct 30 '12 at 02:44
1

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

Jagat Dave
  • 1,643
  • 3
  • 23
  • 30
Hesham
  • 5,294
  • 3
  • 34
  • 48
1

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.

Meet
  • 4,904
  • 3
  • 24
  • 39
1

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"]
Den
  • 3,179
  • 29
  • 26
0

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

Community
  • 1
  • 1
Jigar Pandya
  • 6,004
  • 2
  • 27
  • 45
0

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,
Adil Soomro
  • 37,609
  • 9
  • 103
  • 153
Singh
  • 2,151
  • 3
  • 15
  • 30
-1

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];
Community
  • 1
  • 1
AlBeebe
  • 8,101
  • 3
  • 51
  • 65
  • 2
    I managed to identify that my Mobile Country Code is: Mobile Country Code (MCC): 724 However I need to identify the country code ex: Brazil is +55 Could tell me how can I do this? – Claudia Mardegan Oct 13 '14 at 14:32