How to get country phone code for given country name in Swift iOS?
Asked Answered
P

7

14

I'm working on a project I need to send the selected phone number (which user selected already from phone contacts list) to the sever with format : international-code-without-zeros-or-plus_the-number so I need to handle many cases : number without international code , number with zeros , number with plus , number with two zeros ..etc the problem is when I have a local phone number unprecedented by country phone code,I could get the current country name (country name code) if the device has a valid sim card via this code

let networkInfo: CTTelephonyNetworkInfo = CTTelephonyNetworkInfo()
let ar = networkInfo.subscriberCellularProvider
if ar != nil {
if  let mcc = ar.mobileCountryCode {
    myInformation.countryCode = mcc
    }

then how can I get the country phone code??

Prae answered 9/8, 2015 at 12:13 Comment(1)
You can also check this framework github.com/NikKovIos/NKVPhonePicker to automate country code picking.Ronnironnica
P
13

My suggested answer is something like brute force method ! is to list all country names and its matched country phone code in a dictionary and use searching function that gives me the matched phone code to a specific country code

func getCountryPhonceCode (country : String) -> String
{

    if count(country) == 2
    {
        let x : [String] = ["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",
            "284", "VG",
            "340", "VI",
            "678","VU",
            "681","WF",
            "685","WS",
            "967","YE",
            "262","YT",
            "27","ZA",
            "260","ZM",
            "263","ZW"]
        var keys = [String]()
        var values = [String]()
        let whitespace = NSCharacterSet.decimalDigitCharacterSet()

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

My suggested answer is something like brute force method ! is to list all country names and its matched country phone code in a dictionary and use searching function that gives me the matched phone code to a specific country code

func getCountryPhonceCode (country : String) -> String
{

    if count(country) == 2
    {
        let x : [String] = ["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",
            "284", "VG",
            "340", "VI",
            "678","VU",
            "681","WF",
            "685","WS",
            "967","YE",
            "262","YT",
            "27","ZA",
            "260","ZM",
            "263","ZW"]
        var keys = [String]()
        var values = [String]()
        let whitespace = NSCharacterSet.decimalDigitCharacterSet()

        //let range = phrase.rangeOfCharacterFromSet(whitespace)
        for i in x {
            // range will be nil if no whitespace is found
            if  (i.rangeOfCharacterFromSet(whitespace) != nil) {
                values.append(i)
            }
            else {
                keys.append(i)
            }
        }
        var countryCodeListDict = NSDictionary(objects: values as [String], forKeys: keys as [String]) 
if let t: AnyObject = countryCodeListDict[country] {
        return countryCodeListDict[country] as! String
        } else
        {
            return ""
        }
        }
    else
    {
        return ""
    }
}
Prae answered 9/8, 2015 at 12:18 Comment(0)
W
4

I made help class for it and I made an example app

    import Foundation

public class Countries {

    // MARK: - var and let

    // MARK: - functions
    public static func getAllCountries() -> [Country] {
        var countries = [Country]()
        NSLocale.ISOCountryCodes().forEach { (isoCode) in
            guard let countryName = NSLocale.currentLocale().displayNameForKey(NSLocaleCountryCode, value: isoCode) else { return }
            if let countryInfo = countryInfoDictionary[isoCode] {
                let phoneExtension = countryInfo["phoneExtension"] as! String
                let isMain = countryInfo["isMain"] as! Bool
                countries.append(Country(name: countryName, phoneExtension: phoneExtension, countryCode: isoCode, isMain: isMain))
            } else {
                countries.append(Country(name: countryName, phoneExtension: nil, countryCode: isoCode, isMain: nil))
            }
        }
        return countries
    }

    public static func getCountriesByFirstLetter() -> [(String, [Country])] {
        let countries = getAllCountries()
        var countryDictionary = [String : [Country]]()
        var countryFirstLetterArray = [String]()

        countries.forEach { (country) in
            let letterIndex = country.name.startIndex.advancedBy(0)
            countryFirstLetterArray.append(String(country.name[letterIndex]))
            if countryFirstLetterArray.count == 249 {
                countryFirstLetterArray = Array(Set(countryFirstLetterArray))

                countryFirstLetterArray.sortInPlace({ (firstString, secondString) -> Bool in
                    firstString < secondString
                })
            }
        }

        //
        countryFirstLetterArray.forEach { (letter) in
            countries.forEach({ (country) in
                let letterIndex = country.name.startIndex.advancedBy(0)
                let firsNameLetter = String(country.name[letterIndex])
                if firsNameLetter == letter {
                    if var countries = countryDictionary[letter] {
                        countries.append(country)
                        countryDictionary[letter] = countries
                    } else {
                        countryDictionary[letter] = [country]
                    }
                }
            })
        }

        // sorting
        let returnedCountries = countryDictionary.sort({$0.0 < $1.0})

        return returnedCountries
    }

    public static func getCountriesWithPhone() -> [Country] {
        var countries = getCountriesWithPhoneCode()
        countries.sortInPlace({$0.name < $1.name})
        return countries
    }

    public static func getCountriesByPhoneCode() -> [Country] {
        var countries = getCountriesWithPhoneCode()
        countries.sortInPlace({$0.phoneExtension! < $1.phoneExtension})
        return countries
    }

    private static func getCountriesWithPhoneCode() -> [Country] {
        let countries = getAllCountries()
        var returnedCountries = [Country]()
        countries.forEach { (country) in
            if country.phoneExtension != nil {
                returnedCountries.append(country)
            }
        }
        return returnedCountries
    }
}

extension Countries {

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

}

public class Country {

    public var name: String
    public var phoneExtension: String?
    public var countryCode: String
    public var isMain: Bool?

    public init(name: String, phoneExtension: String?, countryCode: String, isMain: Bool?) {
        self.name = name
        self.phoneExtension = phoneExtension
        self.countryCode = countryCode
        self.isMain = isMain
    }
}
Wharve answered 12/4, 2016 at 18:53 Comment(1)
what exactly means "isMain" property?Viniferous
L
3

Here's a complete list. Others had missing codes

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

As far as I am aware, there is no built in method for getting this information. However, you could store the data in your application and look it up based on the country code you just obtained.

A full list of known codes is on Wikipedia

You could store them as a long .plist file, which you can then load in and query as a dictionary keyed by the country code.

Grazia answered 9/8, 2015 at 12:16 Comment(0)
L
1

let phoneUtil = NBPhoneNumberUtil()

    if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String {

    }

    let device = Locale.current.regionCode

    do {

        let phoneNumber: NBPhoneNumber = try phoneUtil.parse(withPhoneCarrierRegion:phone_txt.text)

        let code:String = try phoneUtil.format(phoneNumber, numberFormat: .E164)

        let national:String = try phoneUtil.format(phoneNumber, numberFormat: .NATIONAL)

        let international:String = try phoneUtil.format(phoneNumber, numberFormat: .INTERNATIONAL)

        countryname_lbl.text  = phoneUtil.getRegionCode(forCountryCode:phoneNumber.countryCode)!

        let numberrr   = phoneUtil.getNationalSignificantNumber(phoneNumber)

        print("number::",numberrr)

        let valid = phoneUtil.isValidNumber(phoneNumber)
        print("valid:",valid)

        code_lbl.text = code

        number_lbl.text = international

        national_lbl.text = national

    }
    catch let error as NSError {

        print(error.localizedDescription)
    }
}
Loosetongued answered 7/9, 2018 at 11:29 Comment(2)
It would be very helpful if you could add some explanation of why this is the answer.Australopithecus
using pod file for libphone numbers and get the country codeLoosetongued
R
0
  1. Download file country_dial_info and add to project
    https://gist.github.com/xxcombat/b1cef4a501c7ae358720cd192da3ed48

  2. Download file and add to project
    https://gist.github.com/xxcombat/fe08f22b5ecbb629b6900aba9abfd0aa

  3. Example

     let regionCode = Locale.current.regionCode
      print(regionCode) // "UA"
      let phoneCodes: [DialCodeInfo]
      let dialCodes = DialCodes()
      phoneCodes = dialCodes.databaseCodes ?? []
      let myPhoneCode = databaseCodes?.first(where: { info in
                info.code == regionCode
            })
      print(myPhoneCode)
    

    // DialCodeInfo(name: "Ukraine", flag: "🇺🇦", code: "UA", dialcode: "+380"))

Renzo answered 2/8, 2022 at 10:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.