Take a look at the geocoder subproject of libphonenumber. It provides a PhoneNumberOfflineGeocoder
that does exactly what you're looking for:
@Grapes([
@Grab('com.googlecode.libphonenumber:libphonenumber:5.8'),
@Grab('com.googlecode.libphonenumber:geocoder:2.9')
])
import com.google.i18n.phonenumbers.PhoneNumberUtil
import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder
def phoneNumberUtil = PhoneNumberUtil.instance
def geocoder = PhoneNumberOfflineGeocoder.instance
def usaNum = phoneNumberUtil.parse("1-406-750-9999", "US")
def canNum = phoneNumberUtil.parse("1-416-750-9999", "US")
assert geocoder.getCountryNameForNumber(usaNum, Locale.default) ==
"United States"
assert geocoder.getCountryNameForNumber(canNum, Locale.default) ==
"Canada"