Во! Нарыл страны с ITU-T кодами, ISO кодами, валютой и прочей хренью, угощайтесь:
http://www.andrewpatton.com/countrylist.html
1. А зачем тебе? Цель так и не раскрыл.
2. Официальных справочников нет. Поддержка справочника в актуальном состоянии - это работа, и его продажа - бизнес.
Цель - правильно отформатировать телефонные номера в базе. Они там напиханы в разных форматах:
78121234567
7(812)123-45-67
+7 812 123-45-67
44(0)2071234567
89211234567 (***)
1234567 (***)
А хочется привести все к общему виду например +7 812 1234567. Для номеров помеченных (***) это в принципе невозможно без дополнительной информации. Она у меня есть - это default location для каждого номера. То есть страна и area которые я должен принять если эта информация не доступна в самом номере.
По большому счету задача форматирования не очень связана с задачей парсинга :) Но я ее реализовал именно так:
1. Выкидываю из номера нафиг все кроме цифр и работаю только с ними.
2. Отцепляю самую длиную страну
3. отцепляю NDD префикс этой страны. (В UK номера принято писать как +44 (0) 207...... хотя этот 0 при наборе номера НЕ нужен, он нужен только внутри страны)
4. отцепляю самый длиный area code для страны
5. оставшийся номер - local, проверяю его на валидность. Проверка валидности - только по длине (в России или США - area+local это всегда 10 цифр)
Ну и для всего этого хозяйства мне нужны базы кодов.
Плюс куча данных которые все равно ручками пришлось указывать. Пример таких данных это информация что в России areacode это три символа, а local number - 7. Но несмотря на эти данные все равно нужны area codes - потому задан дефолт только а конкретный areacode может быть и длинее 3 символов, например +7 (4732) xxxxxx это Воронеж.
Я в принципе уже набрал данных с тех ссылок что выше давал, но т.к. areacodes я ручками копировал, то принес только RU,UK,US,UA. А хочется за один раз - все :)