phony 1.9.0 → 2.19.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.textile +64 -112
- data/lib/phony/config.rb +91 -0
- data/lib/phony/countries/argentina.rb +355 -0
- data/lib/phony/countries/austria.rb +56 -22
- data/lib/phony/countries/bangladesh.rb +57 -0
- data/lib/phony/countries/belarus.rb +133 -0
- data/lib/phony/countries/brazil.rb +101 -95
- data/lib/phony/countries/cambodia.rb +131 -0
- data/lib/phony/countries/china.rb +13 -6
- data/lib/phony/countries/croatia.rb +23 -0
- data/lib/phony/countries/georgia.rb +94 -0
- data/lib/phony/countries/germany.rb +66 -42
- data/lib/phony/countries/guinea.rb +46 -0
- data/lib/phony/countries/india.rb +50 -0
- data/lib/phony/countries/indonesia.rb +55 -0
- data/lib/phony/countries/ireland.rb +35 -28
- data/lib/phony/countries/italy.rb +272 -166
- data/lib/phony/countries/japan.rb +468 -0
- data/lib/phony/countries/kyrgyzstan.rb +120 -0
- data/lib/phony/countries/latvia.rb +43 -0
- data/lib/phony/countries/libya.rb +116 -0
- data/lib/phony/countries/malaysia.rb +31 -7
- data/lib/phony/countries/moldova.rb +53 -0
- data/lib/phony/countries/montenegro.rb +30 -0
- data/lib/phony/countries/myanmar.rb +55 -0
- data/lib/phony/countries/namibia.rb +37 -0
- data/lib/phony/countries/nepal.rb +73 -0
- data/lib/phony/countries/netherlands.rb +17 -5
- data/lib/phony/countries/pakistan.rb +121 -0
- data/lib/phony/countries/paraguay.rb +147 -0
- data/lib/phony/countries/{russia_kazakhstan_abhasia_south_osetia.rb → russia_kazakhstan_abkhasia_south_ossetia.rb} +35 -24
- data/lib/phony/countries/saudi_arabia.rb +40 -0
- data/lib/phony/countries/serbia.rb +47 -0
- data/lib/phony/countries/somalia.rb +26 -0
- data/lib/phony/countries/south_korea.rb +19 -10
- data/lib/phony/countries/sweden.rb +58 -38
- data/lib/phony/countries/taiwan.rb +28 -0
- data/lib/phony/countries/tajikistan.rb +79 -0
- data/lib/phony/countries/turkmenistan.rb +76 -0
- data/lib/phony/countries/ukraine.rb +630 -0
- data/lib/phony/countries/united_kingdom.rb +639 -44
- data/lib/phony/countries/uruguay.rb +53 -0
- data/lib/phony/countries/vietnam.rb +133 -0
- data/lib/phony/countries/zimbabwe.rb +39 -0
- data/lib/phony/countries.rb +901 -301
- data/lib/phony/country.rb +177 -20
- data/lib/phony/country_codes.rb +119 -101
- data/lib/phony/dsl.rb +113 -68
- data/lib/phony/local_splitters/fixed.rb +25 -1
- data/lib/phony/local_splitters/regex.rb +16 -2
- data/lib/phony/national_code.rb +7 -7
- data/lib/phony/national_splitters/default.rb +35 -3
- data/lib/phony/national_splitters/dsl.rb +12 -7
- data/lib/phony/national_splitters/fixed.rb +7 -1
- data/lib/phony/national_splitters/none.rb +7 -3
- data/lib/phony/national_splitters/regex.rb +6 -0
- data/lib/phony/national_splitters/variable.rb +13 -9
- data/lib/phony/trunk_code.rb +57 -0
- data/lib/phony/vanity.rb +3 -3
- data/lib/phony.rb +239 -55
- data/spec/functional/config_spec.rb +44 -0
- data/spec/functional/plausibility_spec.rb +656 -0
- data/spec/lib/phony/countries_spec.rb +1207 -119
- data/spec/lib/phony/country_codes_spec.rb +99 -81
- data/spec/lib/phony/country_spec.rb +54 -14
- data/spec/lib/phony/dsl_spec.rb +2 -2
- data/spec/lib/phony/local_splitters/fixed_spec.rb +4 -4
- data/spec/lib/phony/local_splitters/regex_spec.rb +50 -2
- data/spec/lib/phony/national_code_spec.rb +34 -34
- data/spec/lib/phony/national_splitters/default_spec.rb +34 -0
- data/spec/lib/phony/national_splitters/fixed_spec.rb +12 -6
- data/spec/lib/phony/national_splitters/none_spec.rb +13 -3
- data/spec/lib/phony/national_splitters/regex_spec.rb +1 -1
- data/spec/lib/phony/national_splitters/variable_spec.rb +11 -5
- data/spec/lib/phony/trunk_code_spec.rb +85 -0
- data/spec/lib/phony/vanity_spec.rb +15 -19
- data/spec/lib/phony_spec.rb +59 -277
- metadata +67 -34
- data/lib/phony/validator.rb +0 -26
- data/lib/phony/validators.rb +0 -88
- data/spec/lib/phony/validations_spec.rb +0 -109
data/lib/phony/countries.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
# All countries, ordered by country code.
|
2
5
|
#
|
3
6
|
# Definitions are in the format:
|
@@ -6,99 +9,156 @@
|
|
6
9
|
# As soon as a NDC matches, it goes on to the National part. Then breaks off.
|
7
10
|
# If the NDC does not match, it go on to the next (|, or "or") NDC.
|
8
11
|
#
|
12
|
+
# For the pre-ndc part, there's:
|
13
|
+
# * trunk: If the country has a trunk code (options normalize/split – remove trunk on these method, default false).
|
14
|
+
#
|
9
15
|
# Available matching/splitting methods:
|
10
16
|
# * none: Does not have a national destination code, e.g. Denmark, Iceland.
|
11
17
|
# * one_of: Matches one of the following numbers. Splits if it does.
|
12
18
|
# * match: Try to match the regex, and if it matches, splits it off.
|
13
|
-
# * fixed: Always splits off a fixed length ndc. (Always use last in a | chain as a catchall)
|
19
|
+
# * fixed: Always splits off a fixed length ndc. (Always use last in a | chain as a catchall)
|
14
20
|
#
|
15
21
|
# For the national number part, there are two:
|
16
22
|
# * split: Use this number group splitting.
|
17
23
|
# * matched_split: Give a hash of regex => format array, with a :fallback => format option.
|
18
24
|
# (See Norway how it looks.)
|
19
25
|
#
|
20
|
-
# The third parameter to country are validations.
|
21
|
-
# Currently, there is one method available:
|
22
|
-
# * invalid_ndcs: Give a regexp or string to describe invalid ndc(s).
|
23
|
-
#
|
24
26
|
# Note: The ones that are commented are defined in their special files.
|
25
27
|
#
|
28
|
+
# @example Switzerland (simplified)
|
29
|
+
# country('41', fixed(2) >> local([3,2,2]))
|
30
|
+
#
|
31
|
+
# @example Germany. Too big, we use a separate file
|
32
|
+
# Phony.define do
|
33
|
+
# country '49', match(...) >> split([...]) ||
|
34
|
+
# one_of([...], :max_length => 5) >> split([...])
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# @example Denmark
|
38
|
+
# country('45', none >> split([2,2,2,2]))
|
39
|
+
#
|
40
|
+
# @example Hungary
|
41
|
+
# country('36',
|
42
|
+
# match(/^104|105|107|112/) >> split([3,3]) ||
|
43
|
+
# one_of([1], :max_length => 2) >> split([3,4])
|
44
|
+
# )
|
45
|
+
#
|
26
46
|
Phony.define do
|
27
47
|
|
28
48
|
# Reserved.
|
29
49
|
#
|
30
|
-
|
50
|
+
reserved '0'
|
31
51
|
|
32
52
|
# USA, Canada, etc.
|
33
53
|
#
|
34
54
|
country '1',
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
55
|
+
# The US has a delimiter between NDC and local number.
|
56
|
+
trunk('1%s', normalize: true, format: false) | # http://en.wikipedia.org/wiki/Trunk_prefix
|
57
|
+
fixed(3) >> split(3,4),
|
58
|
+
:invalid_ndcs => /[0-1]\d{2}|[3-9]11/,
|
59
|
+
:parentheses => true,
|
60
|
+
:local_space => :-
|
61
|
+
|
62
|
+
# Kazakhstan (Republic of) & Russsian Federation.
|
39
63
|
# also Abhasia and South Osetia autonomous regions / recognized by some states as independent countries
|
40
64
|
#country '7', fixed(3) >> split(3,2,2)
|
41
65
|
# see special file
|
42
66
|
|
43
67
|
# Egypt.
|
44
68
|
#
|
45
|
-
country '20', one_of('800') >> split(7) | # Egypt
|
46
|
-
one_of('
|
47
|
-
|
48
|
-
|
69
|
+
country '20', one_of('800') >> split(7..7) | # Egypt toll free
|
70
|
+
one_of('3') >> split(7..7) | # Alexandria
|
71
|
+
one_of('2') >> split(8..8) | # Cairo/Giza
|
72
|
+
one_of('10', '11', '12', '15') >> split(8..8) | # the 4 mobile operators
|
73
|
+
fixed(2) >> split(7..7) # all the other 24 provinces
|
49
74
|
|
50
75
|
# South Africa.
|
51
76
|
#
|
52
77
|
country '27', fixed(2) >> split(3,4)
|
53
78
|
|
54
|
-
# Greece.
|
55
|
-
#
|
56
|
-
country '30',
|
57
|
-
|
79
|
+
# Greece. http://www.numberingplans.com/?page=dialling&sub=areacodes
|
80
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=GR
|
81
|
+
country '30',
|
82
|
+
trunk('0') |
|
83
|
+
one_of(%w(231 241 251 261 271 281)) >> split(3,4) |
|
84
|
+
one_of('800') >> split(3,4) | # freephone
|
85
|
+
one_of(%w(801 807)) >> split(3,4) | # shared cost, premium rate
|
86
|
+
one_of('896') >> split(3,4) | # ISP
|
87
|
+
one_of(%w(901 909)) >> split(3,4) | # premium rate
|
88
|
+
one_of(%w(21 22 23 24 25 26 27 28)) >> split(4,4) |
|
89
|
+
one_of('50') >> split(4,4) | # VPN
|
90
|
+
match(/^(69\d)\d+$/) >> split(3,4) | # mobile, pager
|
91
|
+
one_of('70') >> split(4,4) | # universal access
|
92
|
+
fixed(4) >> split(6) # 3-digit NDCs
|
58
93
|
|
59
94
|
# country '31' # Netherlands, see special file.
|
60
95
|
|
61
96
|
# Belgium.
|
62
97
|
#
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
98
|
+
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Belgium
|
99
|
+
# https://www.bipt.be/operators/publication/national-numbering-plan
|
100
|
+
#
|
101
|
+
country '32', trunk('0') |
|
102
|
+
match(/^(7[08])\d+$/) >> split(3,3) | # Premium and national rate Services
|
103
|
+
match(/^(800|90\d)\d+$/) >> split(2,3) | # Toll free service and premium numbers
|
104
|
+
match(/^(46[056789])\d{6}$/) >> split(2,2,2) | # Mobile (Lycamobile, Telenet, Join Experience, Proximus 0460)
|
105
|
+
match(/^(4[789]\d)\d{6}$/) >> split(2,2,2) | # Mobile
|
106
|
+
match(/^(45[56])\d{6}$/) >> split(2,2,2) | # Mobile Vikings and Voo
|
107
|
+
one_of('2','3','4','9') >> split(3,2,2) | # Short NDCs
|
108
|
+
fixed(2) >> split(2,2,2) # 2-digit NDCs
|
67
109
|
|
68
110
|
# France.
|
69
111
|
#
|
70
|
-
country '33',
|
112
|
+
country '33',
|
113
|
+
trunk('0') |
|
114
|
+
fixed(1) >> split(2,2,2,2) # :service? => /^8.*$/, :mobile? => /^[67].*$/
|
71
115
|
|
72
116
|
# Spain.
|
73
117
|
#
|
118
|
+
# http://www.minetur.gob.es/telecomunicaciones/es-es/servicios/numeracion/paginas/plan.aspx
|
119
|
+
#
|
74
120
|
country '34',
|
75
|
-
|
121
|
+
match(/^([67]\d{2})\d+$/) >> split(3,3) | # Mobile
|
122
|
+
match(/^([89]0\d)\d+$/) >> split(3,3) | # Special 80X & 90X numbers
|
123
|
+
one_of(%w(91 93)) >> split(3,2,2) | # Landline large regions
|
124
|
+
match(/^(9\d{2})\d+$/) >> split(2,2,2) | # Landline
|
125
|
+
fixed(3, :zero => false) >> split(3,3)
|
76
126
|
|
77
127
|
# Hungary.
|
78
128
|
#
|
79
|
-
#
|
129
|
+
# http://webpub-ext.nmhh.hu/aga/foldr/DoIndexAction.do
|
80
130
|
#
|
81
131
|
country '36',
|
82
|
-
|
83
|
-
|
84
|
-
|
132
|
+
trunk('06', normalize: false) |
|
133
|
+
one_of('104', '105', '107', '112') >> split(3,3) | # Service
|
134
|
+
one_of('1') >> split(3,4) | # Budapest
|
135
|
+
one_of('20', '30', '31', '50', '70') >> split(3,4) | # Mobile
|
136
|
+
one_of('21') >> split(3,4) | # VOIP
|
137
|
+
one_of('40', '80', '90', '91') >> split(3,3) | # Special charged numbers
|
138
|
+
one_of('51') >> split(3,3) | # Corporate network, M2M
|
139
|
+
one_of('38') >> split(3,4) | # Corporate network, M2M
|
140
|
+
one_of('71') >> split(5,5) | # M2M Numbers
|
141
|
+
fixed(2) >> split(3,3) # Geographic numbers
|
85
142
|
|
86
143
|
# country '39' # Italy, see special file.
|
87
144
|
|
88
145
|
# Romania.
|
89
146
|
#
|
90
147
|
country '40',
|
148
|
+
trunk('0') |
|
91
149
|
match(/^(112|800|90[036])\d+$/) >> split(3,3) | # Service
|
92
|
-
match(/^(7[1-
|
150
|
+
match(/^(7[1-9])\d+$/) >> split(3,4) | # Mobile
|
93
151
|
one_of('21', '31') >> split(3,4) | # Bucureşti
|
94
|
-
fixed(3) >> split(3,
|
152
|
+
fixed(3) >> split(3,3) # 3-digit NDCs
|
95
153
|
|
96
154
|
# Switzerland.
|
97
155
|
#
|
98
156
|
country '41',
|
99
|
-
|
100
|
-
|
101
|
-
|
157
|
+
trunk('0', normalize: true) |
|
158
|
+
match(/^(860)\d+$/) >> split(2, 3, 2, 2) | # Voice Mail access
|
159
|
+
match(/^(8(?:00|4[0248]))\d+$/) >> split(3,3) | # Freecall/Shared Cost
|
160
|
+
match(/^(90[016])\d+$/) >> split(3,3) | # Business
|
161
|
+
fixed(2) >> split(3,2,2)
|
102
162
|
|
103
163
|
# country '43' # Austria, see special file.
|
104
164
|
# country '44' # UnitedKingdom, see special file.
|
@@ -106,7 +166,7 @@ Phony.define do
|
|
106
166
|
# Denmark.
|
107
167
|
#
|
108
168
|
country '45',
|
109
|
-
none >> split(2,2,2,2)
|
169
|
+
none >> split(2,2,2,2..2)
|
110
170
|
|
111
171
|
# country '46' # Sweden, see special file.
|
112
172
|
|
@@ -122,40 +182,40 @@ Phony.define do
|
|
122
182
|
# Note: http://wapedia.mobi/en/Telephone_numbers_in_Poland, mobile not yet correct
|
123
183
|
#
|
124
184
|
country '48',
|
125
|
-
match(/^(5[
|
185
|
+
match(/^(45\d|5[0137]\d|6[069]\d|7[02389]\d|80[01]|88\d)/) >> split(3,3) |
|
126
186
|
fixed(2) >> split(3,2,2)
|
127
187
|
|
128
188
|
# country '49' # Germany, see special file.
|
129
189
|
|
130
190
|
# Peru.
|
131
|
-
#
|
191
|
+
# Note: https://en.wikipedia.org/wiki/Telephone_numbers_in_Peru
|
192
|
+
# Note: https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=PE
|
132
193
|
country '51',
|
133
194
|
one_of('103', '105') >> split(3,3) | # Service.
|
134
|
-
one_of('
|
135
|
-
|
195
|
+
one_of('9') >> split(4,4) | # Mobile.
|
196
|
+
one_of('1') >> split(3,4) | # Lima.
|
197
|
+
fixed(2) >> split(3,3) # 2-digit NDCs.
|
136
198
|
|
137
199
|
# Mexico.
|
138
200
|
#
|
201
|
+
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Mexico
|
202
|
+
# http://en.wikipedia.org/wiki/National_conventions_for_writing_telephone_numbers#Mexico
|
139
203
|
country '52',
|
140
|
-
match(/^(0\d{2})\d
|
141
|
-
match(/^(33|55|81)\d
|
142
|
-
match(/^(\d{
|
204
|
+
match(/^(0\d{1,2})\d{10}$/) >> split(3,3,4) | # prefixed numbers from within Mexico (e.g. 045 + 10 digits or 02 + 10 digits)
|
205
|
+
match(/^(1)(33|55|81)\d{8}$/) >> split(2,4,4) | # Mexico D.F, Guadalajara, Monterrey cell phone from abroad (e.g. 52 1 55 xxxx xxxx)
|
206
|
+
match(/^(33|55|81)\d{8}$/) >> split(4,4) | # Mexico D.F, Guadalajara, Monterrey from within Mexico
|
207
|
+
match(/^(1)(\d{3})\d{7}$/) >> split(3,3,4) | # cell phone from abroad
|
208
|
+
match(/^(\d{3})\d{7}$/) >> split(3,4) # catchall.
|
143
209
|
|
144
210
|
# Cuba.
|
145
211
|
#
|
146
212
|
country '53',
|
147
|
-
match(/^(5\d{3})\d+$/)
|
213
|
+
match(/^(5\d{3})\d+$/) >> split(4) | # Mobile
|
148
214
|
match(/^(7|2[123]|4[1-8]|3[1-3])/) >> split(7) | # Short NDCs
|
149
|
-
fixed(3)
|
215
|
+
fixed(3) >> split(7) # 3-digit NDCs
|
150
216
|
|
151
217
|
# Argentine Republic.
|
152
|
-
#
|
153
|
-
country '54',
|
154
|
-
one_of('11', '911') >> split(4,4) | # Fixed & Mobile
|
155
|
-
match(/^(22[0137]|237|26[14]|29[179]|34[1235]|35[138]|38[1578])/) >> split(3,4) | # Fixed
|
156
|
-
match(/^(922[0137]|9237|926[14]|929[179]|934[1235]|935[138]|938[1578])/) >> split(3,4) | # Mobile
|
157
|
-
match(/^(9\d{4})/) >> split(2,4) | # Mobile
|
158
|
-
fixed(4) >> split(2,4) # Fixed
|
218
|
+
# country '54' # argentina, see special file.
|
159
219
|
|
160
220
|
# Brazil (Federative Republic of).
|
161
221
|
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Brazil
|
@@ -164,194 +224,354 @@ Phony.define do
|
|
164
224
|
# Chile.
|
165
225
|
#
|
166
226
|
country '56',
|
167
|
-
|
168
|
-
|
169
|
-
|
227
|
+
match(/^(13[0-79]|14[79])\d+$/) >> split(3,3) | # Service
|
228
|
+
one_of('2', '9') >> split(8) | # Santiago, Mobile
|
229
|
+
fixed(2) >> split(8) # 2-digit NDCs
|
170
230
|
|
171
|
-
#
|
172
|
-
#
|
173
|
-
country '57',
|
231
|
+
# Colombia.
|
232
|
+
# http://www.itu.int/oth/T020200002C/en
|
233
|
+
country '57',
|
234
|
+
match(/\A(3\d\d)\d+\z/) >> split(3,4) | # mobile (300 310 311 312 313 315 316)
|
235
|
+
match(/\A(60\d)\d+\z/) >> split(3,4) |
|
236
|
+
fixed(1) >> split(3,4)
|
174
237
|
|
175
238
|
# Venezuela (Bolivarian Republic of)
|
176
239
|
#
|
177
240
|
country '58',
|
178
|
-
|
241
|
+
fixed(3) >> split(7)
|
179
242
|
|
180
243
|
# country '60' # Malaysia, see special file.
|
181
244
|
|
182
245
|
# Australia.
|
183
246
|
#
|
184
247
|
country '61',
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
248
|
+
trunk('0', format: false) |
|
249
|
+
match(/^(4\d\d)\d+$/) >> split(3,3) | # Mobile
|
250
|
+
match(/^(1800)\d+$/) >> split(3,3) | # 1800 free call
|
251
|
+
match(/^(1300)\d+$/) >> split(3,3) | # 1300 local rate
|
252
|
+
match(/^(13)\d+$/) >> split(2,2) | # 13 local rate
|
253
|
+
fixed(1) >> split(4,4) # Rest
|
254
|
+
|
255
|
+
# country '62' # Indonesia (Republic of), see special file
|
256
|
+
|
257
|
+
# Philippines (Republic of the)
|
258
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=PH
|
259
|
+
country '63',
|
260
|
+
trunk('0') |
|
261
|
+
# 7/10 digits for area code '2'.
|
262
|
+
match(/\A(2)\d{10}\z/) >> split(10) |
|
263
|
+
match(/\A(2)\d{8}\z/) >> split(8) |
|
264
|
+
one_of('2') >> split(7) |
|
265
|
+
# mobile
|
266
|
+
match(/\A([89]\d\d)\d{7}\z/) >> split(7) |
|
267
|
+
match(/\A(9\d\d)\d+\z/) >> split(6) |
|
268
|
+
#
|
269
|
+
fixed(2) >> split(7)
|
198
270
|
|
199
271
|
# New Zealand.
|
200
272
|
#
|
201
|
-
# TODO Mobile?
|
202
|
-
#
|
203
273
|
country '64',
|
204
|
-
|
274
|
+
trunk('0') |
|
275
|
+
match(/^(2\d)\d{7}$/) >> split(3,4) | # Mobile
|
276
|
+
match(/^(2\d)\d{6}$/) >> split(3,3) |
|
277
|
+
match(/^(2\d)\d{8}$/) >> split(2,3,3) |
|
278
|
+
match(/^(800)\d{6}$/) >> split(3,3) | # International 800 service where agreed
|
279
|
+
match(/^(800)\d{7}$/) >> split(3,4) | # International 800 service where agreed
|
280
|
+
fixed(1) >> split(3,4) # Rest
|
205
281
|
|
206
282
|
# Singapore (Republic of).
|
207
283
|
#
|
208
284
|
country '65',
|
209
|
-
|
285
|
+
none >> matched_split(
|
286
|
+
/^(800)\d{7}$/ => [3,3,4], # International Toll Free Service (ITFS) and Home Country Direct Service (HCDS) Numbers
|
287
|
+
/^\d{8}$/ => [4,4] # TODO Short Codes
|
288
|
+
)
|
210
289
|
|
211
290
|
# Thailand.
|
212
291
|
#
|
213
292
|
country '66',
|
214
|
-
|
215
|
-
|
293
|
+
trunk('0') |
|
294
|
+
match(/\A([689]\d\d)\d+\z/) >> split(3,3) | # mobile
|
295
|
+
one_of('2') >> split(3,4) | # Bangkok
|
296
|
+
fixed(2) >> split(3,3) # Rest
|
216
297
|
|
217
|
-
country '81',
|
298
|
+
# country '81' # Japan, see special file.
|
218
299
|
|
219
300
|
# country '82' # SouthKorea, see special file.
|
220
301
|
|
221
|
-
country '84'
|
222
|
-
one_of('4', '8') >> split(7) |
|
223
|
-
match(/^(2[025679]|3[0136789]|5[23456789]|6[01234678]|7[02345679]|9[0-8])\d/) >> split(6) |
|
224
|
-
fixed(3) >> split(5)
|
225
|
-
|
302
|
+
# country '84' # Vietnam, see special file.
|
226
303
|
|
227
304
|
# country '86' # China, see special file.
|
228
305
|
|
229
306
|
# Turkey.
|
230
307
|
#
|
231
308
|
country '90',
|
232
|
-
|
309
|
+
trunk('0') |
|
310
|
+
fixed(3) >> split(3,4) # Wiki says 7, but the examples say 3, 4.
|
233
311
|
|
234
|
-
country '91'
|
235
|
-
|
312
|
+
# country '91' # India (Republic of) see special file
|
313
|
+
|
314
|
+
# country '92' # Pakistan (Islamic Republic of), see special file.
|
236
315
|
|
237
316
|
# Afghanistan.
|
238
317
|
#
|
239
318
|
# From http://www.wtng.info/wtng-93-af.html
|
240
319
|
#
|
241
|
-
country '93', fixed(2) >> split(7)
|
320
|
+
country '93', fixed(2) >> split(7) # Note: the document says 6, but the examples use 7.
|
321
|
+
|
322
|
+
country '94', # TODO Sri Lanka (Democratic Socialist Republic of)
|
323
|
+
fixed(2) >> split(3,2,2)
|
242
324
|
|
243
|
-
country '
|
244
|
-
|
245
|
-
country '98',
|
325
|
+
#country '95' # Myanmar, see special file.
|
326
|
+
|
327
|
+
country '98', # Iran (Islamic Republic of)
|
328
|
+
one_of('21') >> split(4,4) | # Teheran
|
329
|
+
fixed(3) >> split(3,4)
|
246
330
|
|
247
331
|
country '210', todo # -
|
248
|
-
country '211',
|
249
|
-
|
250
|
-
country '
|
332
|
+
country '211', fixed(3) >> split(3,3) # South Sudan, http://www.wtng.info/wtng-211-ss.html
|
333
|
+
|
334
|
+
country '212', # Morocco
|
335
|
+
trunk('0') |
|
336
|
+
one_of('6') >> split(2,2,2,2) | # mobile
|
337
|
+
fixed(2) >> split(4,3)
|
338
|
+
|
339
|
+
country '213', fixed(2) >> split(3,4) # Algeria
|
251
340
|
country '214', todo # -
|
252
341
|
country '215', todo # -
|
253
|
-
country '216', fixed(1) >> split(3,4)
|
342
|
+
country '216', fixed(1) >> split(3,4) # Tunisia
|
254
343
|
country '217', todo # -
|
255
|
-
|
344
|
+
|
345
|
+
# country '218' # Lybia, see special file
|
346
|
+
|
256
347
|
country '219', todo # -
|
257
348
|
|
258
|
-
country '220',
|
259
|
-
country '221',
|
260
|
-
country '222',
|
261
|
-
country '223',
|
262
|
-
|
263
|
-
country '
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
country
|
271
|
-
country '
|
349
|
+
country '220', none >> split(3,4) # Gambia http://www.wtng.info/wtng-220-gm.html
|
350
|
+
country '221', none >> split(4,5) # Senegal http://www.wtng.info/wtng-221-sn.html
|
351
|
+
country '222', none >> split(4,4) # Mauritania http://www.wtng.info/wtng-222-mr.html
|
352
|
+
country '223', none >> split(4,4) # Mali http://www.wtng.info/wtng-223-ml.html
|
353
|
+
|
354
|
+
# country '224' # Guinea, see special file
|
355
|
+
|
356
|
+
# Côte d'Ivoire
|
357
|
+
# http://www.wtng.info/wtng-225-ci.html
|
358
|
+
# https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000310006PDFE.pdf
|
359
|
+
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Ivory_Coast
|
360
|
+
#
|
361
|
+
# There is no trunk code for this country and several of the mobile prefixes start with 0
|
362
|
+
country '225',
|
363
|
+
trunk('', :normalize => false) |
|
364
|
+
fixed(2) >> split(2,2,2,2)
|
365
|
+
|
366
|
+
country '226', none >> split(4,4) # Burkina Faso http://www.wtng.info/wtng-226-bf.html
|
367
|
+
country '227', none >> split(4,4) # Niger http://www.wtng.info/wtng-227-ne.html
|
368
|
+
country '228', none >> split(4,4) # Togolese Republic http://www.wtng.info/wtng-228-tg.html
|
369
|
+
country '229', none >> split(4,4) # Benin http://www.itu.int/oth/T0202000017/en
|
370
|
+
|
371
|
+
country '230', none >> split(4,4) # Mauritius http://www.wtng.info/wtng-230-mu.html
|
372
|
+
|
373
|
+
# Liberia
|
374
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=LR
|
375
|
+
country '231',
|
376
|
+
none >> matched_split(
|
377
|
+
/\A[23]\d+\z/ => [4,4], # LIBTELCO, TEMAS
|
378
|
+
/\A[4568]\d+\z/ => [4,3], # mobile Lonestar, Libercell, Comium Liberia Inc.
|
379
|
+
/\A77\d+\z/ => [2,3,4], # http://monrovia.usembassy.gov/contact.html
|
380
|
+
/\A7\d+\z/ => [4,4], # mobile Cellcom
|
381
|
+
/\A9\d+\z/ => [4,4], # premium rate Telelinks International SAL, Interactive Media Corporation
|
382
|
+
)
|
383
|
+
|
384
|
+
country '232', fixed(2) >> split(3, 3) # Sierra Leone http://www.wtng.info/wtng-232-sl.html
|
272
385
|
|
273
386
|
# Ghana
|
274
387
|
#
|
275
388
|
# From http://www.itu.int/oth/T0202000052/en
|
389
|
+
# https://en.wikipedia.org/wiki/Telephone_numbers_in_Ghana
|
276
390
|
#
|
277
|
-
country '233', fixed(2) >> split(3,4)
|
391
|
+
country '233', trunk('0') | fixed(2) >> split(3,4)
|
278
392
|
|
279
393
|
# Nigeria
|
280
|
-
#
|
394
|
+
# 3 4 split for mobile and 1 digit NDC, 3 2 or 3 3 otherwise
|
395
|
+
# Many local numbers with no splitting
|
396
|
+
#
|
397
|
+
# mobile telephony number allocation taken from:
|
398
|
+
# https://www.ncc.gov.ng/technical-regulation/standards/numbering and
|
399
|
+
# https://www.itu.int/oth/T020200009C/en
|
281
400
|
country '234',
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
country '
|
291
|
-
country '
|
292
|
-
country '
|
293
|
-
country '
|
294
|
-
|
295
|
-
|
296
|
-
country '
|
297
|
-
country '
|
298
|
-
|
299
|
-
|
300
|
-
country '
|
301
|
-
|
401
|
+
match(/^([7-9]0\d)\d+$/) >> split(3,4) | # Mobile
|
402
|
+
match(/^(81\d)\d+$/) >> split(3,4) | # Mobile
|
403
|
+
match(/^(91\d)\d+$/) >> split(3,4) | # Mobile
|
404
|
+
one_of('1', '2') >> split(3,3..4) | # Lagos, Ibadan
|
405
|
+
one_of('9') >> split(3,4) | # Abuja
|
406
|
+
one_of((30..79).map(&:to_s)) >> split(3,2..3) | # 2-digit NDC
|
407
|
+
one_of(%w(82 83 84 85 86 87 88 89)) >> split(3,3) # 2-digit NDC
|
408
|
+
|
409
|
+
country '235', none >> split(4,4) # Chad http://www.wtng.info/wtng-235-td.html
|
410
|
+
country '236', none >> split(4,4) # Central African Republic http://www.wtng.info/wtng-236-cf.html
|
411
|
+
country '237', none >> split(3,2,2,2) # Cameroon http://www.wtng.info/wtng-237-cm.html
|
412
|
+
country '238', none >> split(3,4) # Cape Verde http://www.wtng.info/wtng-238-cv.html
|
413
|
+
country '239', fixed(1) >> split(3,3) # Sao Tome and Principe, http://www.wtng.info/wtng-239-st.html
|
414
|
+
|
415
|
+
country '240', none >> split(3,3,3) # Equatorial Guinea
|
416
|
+
country '241',
|
417
|
+
match(/^(\d)\d{6}$/) >> split(3,3) | # Gabonese Republic http://www.wtng.info/wtng-241-ga.html
|
418
|
+
match(/^(\d\d)\d{6}$/) >> split(2,2,2) # 2019 update https://en.wikipedia.org/wiki/Telephone_numbers_in_Gabon
|
419
|
+
country '242', # Congo http://www.wtng.info/wtng-242-cg.html
|
420
|
+
trunk('', :normalize => false) |
|
421
|
+
none >> split(4,5)
|
422
|
+
country '243', fixed(2) >> split(3,4) # Democratic Republic of the Congo http://www.wtng.info/wtng-243-cd.html
|
423
|
+
country '244', one_of('321', '348', '358', '363', '364', '485', '526', '535', '546', '612', '643', '652', '655', '722', '726', '728', '729', '777') >> split(3,3) | # Angola
|
424
|
+
fixed(2) >> split(3,4)
|
425
|
+
country '245', none >> split(2,3,4) # Guinea-Bissau http://www.wtng.info/wtng-245-gw.html
|
426
|
+
country '246', none >> split(3,4) # Diego Garcia http://www.wtng.info/wtng-246-io.html
|
302
427
|
country '247', none >> split(4) # Ascension
|
303
|
-
|
428
|
+
|
429
|
+
country '248', # Seychelles
|
430
|
+
fixed(1) >> split(2,2,2)
|
431
|
+
|
304
432
|
country '249', fixed(2) >> split(3,4) # Sudan
|
305
433
|
|
306
434
|
# Rwanda
|
307
435
|
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Rwanda
|
308
436
|
country '250',
|
309
|
-
|
310
|
-
|
311
|
-
|
437
|
+
trunk('0') |
|
438
|
+
one_of('25') >> split(7) | # Geographic, fixed
|
439
|
+
match(/^(7[2389])/) >> split(7) | # Non-geographic, mobile
|
440
|
+
one_of('06') >> split(6) # Satellite
|
312
441
|
|
313
|
-
country '251',
|
314
|
-
|
315
|
-
country '
|
442
|
+
country '251', fixed(2) >> split(3, 4) # Ethiopia http://www.wtng.info/wtng-251-et.html
|
443
|
+
|
444
|
+
# country '252' # Somali Democratic Republic, see special file
|
445
|
+
|
446
|
+
country '253', none >> split(4, 4) # Djibouti http://www.wtng.info/wtng-253-dj.html
|
316
447
|
|
317
448
|
# Kenya
|
318
449
|
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Kenya
|
319
|
-
country '254',
|
320
|
-
|
321
|
-
|
450
|
+
country '254',
|
451
|
+
trunk('0') |
|
452
|
+
match(/^(7\d\d)/) >> split(6) | # mobile
|
453
|
+
fixed(2) >> split(7) # landline
|
322
454
|
|
323
455
|
# Tanzania.
|
324
456
|
#
|
325
457
|
country '255',
|
326
|
-
|
327
|
-
|
328
|
-
|
458
|
+
trunk('0') |
|
459
|
+
match(/^([89]\d\d)/) >> split(3,3) | # Special/Premium.
|
460
|
+
one_of('112', '118') >> split(3,3) | # Short Codes.
|
461
|
+
fixed(2) >> split(3,4) # Geographic.
|
329
462
|
|
330
463
|
# Uganda.
|
331
464
|
#
|
332
465
|
country '256',
|
333
|
-
|
334
|
-
|
466
|
+
match(/^(46[45]|4[78]\d)/) >> split(6) | # Geo 1.
|
467
|
+
fixed(2) >> split(7) # Geo 2.
|
468
|
+
|
469
|
+
country '257', none >> split(4,4) # Burundi http://www.wtng.info/wtng-257-bi.html
|
470
|
+
|
471
|
+
# Mozambique, https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=MZ
|
472
|
+
country '258',
|
473
|
+
one_of('600') >> split(3,3) | # audiotext
|
474
|
+
one_of('610') >> split(3,3) | # ISP
|
475
|
+
one_of('800') >> split(3,3) | # freephone
|
476
|
+
one_of('801') >> split(3,3) | # local rate
|
477
|
+
one_of('802') >> split(3,3) | # national rate
|
478
|
+
one_of(%w(251 252 271 272 281 282 293)) >> split(3,2) |
|
479
|
+
one_of(%w(21 23 24 26)) >> split(3,3) |
|
480
|
+
one_of(%w(82 84 86)) >> split(4,3) | # mobile
|
481
|
+
one_of('89') >> split(4,3) | # satellite GMPCS
|
482
|
+
one_of('7') >> split(4,4) | # universal access
|
483
|
+
one_of('9') >> split(4,4) | # premium rate
|
484
|
+
fixed(2) >> split(3,3)
|
335
485
|
|
336
|
-
country '257', todo # Burundi
|
337
|
-
country '258', todo # Mozambique
|
338
486
|
country '259', todo # -
|
339
487
|
|
340
488
|
# Zambia
|
341
|
-
# http://
|
489
|
+
# http://www.wtng.info/wtng-260-zm.html
|
490
|
+
# https://github.com/googlei18n/libphonenumber/
|
491
|
+
# https://en.wikipedia.org/wiki/Telephone_numbers_in_Zambia
|
342
492
|
country '260',
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
country '
|
352
|
-
|
353
|
-
|
354
|
-
|
493
|
+
trunk('0') |
|
494
|
+
match(/^(76|77|95|96|97)/) >> split(3, 4) | # Mobile
|
495
|
+
match(/^(800)/) >> split(3,3) | # Toll free
|
496
|
+
match(/^(21[1-8])/) >> split(6) # Fixed
|
497
|
+
|
498
|
+
# Madagascar
|
499
|
+
# https://en.wikipedia.org/wiki/Telephone_numbers_in_Madagascar
|
500
|
+
# http://www.itu.int/oth/T020200007F/en
|
501
|
+
country '261',
|
502
|
+
# none >> matched_split(
|
503
|
+
# /\A20\d+\z/ => [2,2,3,2], # Telecom Malagasy (Telma)
|
504
|
+
# /\A32\d+\z/ => [2,2,3,2], # mobile Orange Madagascar
|
505
|
+
# /\A33\d+\z/ => [2,2,3,2], # mobile Airtel Madagascar
|
506
|
+
# /\A34\d+\z/ => [2,2,3,2], # mobile Telecom Malagasy (Telma)
|
507
|
+
# /\A38\d+\z/ => [2,2,3,2], # mobile Telecom Malagasy (Telma)
|
508
|
+
# /\A39\d+\z => [2,2,3,2] # mobile Blueline
|
509
|
+
# ),
|
510
|
+
match(/\A(20)\d+\z/) >> split(2,3,2) | # fix Telecom Malagasy (Telma)
|
511
|
+
match(/\A(32)\d+\z/) >> split(2,3,2) | # mobile Orange Madagascar
|
512
|
+
match(/\A(33)\d+\z/) >> split(2,3,2) | # mobile Airtel Madagascar
|
513
|
+
match(/\A(34)\d+\z/) >> split(2,3,2) | # mobile Telecom Malagasy (Telma)
|
514
|
+
match(/\A(38)\d+\z/) >> split(2,3,2) | # mobile Telecom Malagasy (Telma)
|
515
|
+
match(/\A(39)\d+\z/) >> split(2,3,2) # mobile Blueline Madagascar
|
516
|
+
|
517
|
+
country '262', # Reunion / Mayotte (new) http://www.wtng.info/wtng-262-fr.html
|
518
|
+
trunk('0') |
|
519
|
+
fixed(3) >> split(2,2,2)
|
520
|
+
|
521
|
+
# country '263' # Zimbabwe, see special file
|
522
|
+
|
523
|
+
# country '264' # Namibia, see special file
|
524
|
+
|
525
|
+
# Malawi
|
526
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=MW
|
527
|
+
country '265',
|
528
|
+
none >> matched_split(
|
529
|
+
/\A(21|77)\d+\z/ => [3,3,3], # geographic, mobile
|
530
|
+
/\A(88|99)\d{7}\z/ => [3,3,3], # mobile
|
531
|
+
/\A18(00|11|18|20)\z/ => [4], # ISP
|
532
|
+
/\A\d+\z/ => [4,3]
|
533
|
+
)
|
534
|
+
|
535
|
+
country '266', none >> split(4, 4) # Lesotho http://www.wtng.info/wtng-266-ls.html
|
536
|
+
|
537
|
+
# Botswana
|
538
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
539
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=BW
|
540
|
+
country '267',
|
541
|
+
one_of(%w(463 495 499 590)) >> split(4) |
|
542
|
+
one_of(%w(24 26 29 31 46 47 49 53 54 57 58 59 62 65 68)) >> split(3,2) |
|
543
|
+
one_of('79') >> split(3,3) | # VoIP telephony
|
544
|
+
one_of('80') >> split(3,3) | # freephone
|
545
|
+
one_of('90') >> split(3,3) | # premium rate
|
546
|
+
one_of('7') >> split(4,3) | # moblie
|
547
|
+
one_of('8') >> split(4,3) | # shared cost
|
548
|
+
one_of('3') >> split(3,3) |
|
549
|
+
fixed(2) >> split(3,2)
|
550
|
+
|
551
|
+
# Swaziland http://www.wtng.info/wtng-268-sz.html
|
552
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=SZ
|
553
|
+
country '268',
|
554
|
+
none >> matched_split(
|
555
|
+
/\A08\d+\z/ => [4,3], # freephone
|
556
|
+
/\A(2200|2300|2538|2548)\d+\z/ => [4,4], # VoIP telephony Swaziland Posts and Telecommunications Corporation (SPTC)
|
557
|
+
/\A(2400|76)\d+\z/ => [4,4], # mobile Swazi MTN Ltd
|
558
|
+
/\A(2550|2551)\d+\z/ => [4,4], # wireless geographic Swaziland Posts and Telecommunications Corporation (SPTC)
|
559
|
+
/\A(550|551)\d+\z/ => [3,4], # wireless geographic Swaziland Posts and Telecommunications Corporation (SPTC)
|
560
|
+
/\A(22|23|24|25)\d+\z/ => [4,4], # geographic SPTC
|
561
|
+
/\A77\d+\z/ => [4,4], # mobile Swaziland Posts and Telecommunications Corporation (SPTC) (CDMA)
|
562
|
+
/\A78\d+\z/ => [4,4], # mobile Swazi MTN Ltd
|
563
|
+
)
|
564
|
+
|
565
|
+
# Comoros http://www.wtng.info/wtng-269-km.html
|
566
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=KM
|
567
|
+
country '269',
|
568
|
+
none >> matched_split(
|
569
|
+
/\A800\d+\z/ => [4,3,3], # freephone Toll-free Global269
|
570
|
+
/\A(763|77)\d+\z/ => [4,3], # geographic Comores Télécom
|
571
|
+
/\A(32|33|34)\d+\z/ => [4,3], # mobile Comores Télécom (HURI)
|
572
|
+
/\A(390|391|900|910)\d+\z/ => [4,3], # premium rate WIAIR SARL
|
573
|
+
/\A(76)\d+\z/ => [4,3] # wireless geographic Comores Télécom
|
574
|
+
)
|
355
575
|
|
356
576
|
country '280', todo # -
|
357
577
|
country '281', todo # -
|
@@ -363,45 +583,78 @@ Phony.define do
|
|
363
583
|
country '287', todo # -
|
364
584
|
country '288', todo # -
|
365
585
|
country '289', todo # -
|
366
|
-
country '290',
|
367
|
-
|
368
|
-
country '291', todo # Eritrea
|
586
|
+
country '290', none >> split(4) # Saint Helena http://www.wtng.info/wtng-290-sh.html
|
587
|
+
country '291', fixed(1) >> split(3, 3) # Eritrea http://www.wtng.info/wtng-291-er.html
|
369
588
|
country '292', todo # -
|
370
589
|
country '293', todo # -
|
371
590
|
country '294', todo # -
|
372
591
|
country '295', todo # -
|
373
592
|
country '296', todo # -
|
374
|
-
|
375
|
-
|
376
|
-
|
593
|
+
|
594
|
+
# Aruba
|
595
|
+
# http://www.itu.int/dms_pub/itu-t/oth/02/02/T020200000B0001PDFE.pdf
|
596
|
+
# Landline numbers begin 52 or 58.
|
597
|
+
country '297',
|
598
|
+
fixed(3) >> split(4)
|
599
|
+
|
600
|
+
# Faroe Islands http://www.wtng.info/wtng-298-fo.html
|
601
|
+
country '298',
|
602
|
+
none >> matched_split(
|
603
|
+
/\A1\d+\z/ => [4], # universal access: Føroya Tele; ISP: Kall, Føroya Tele
|
604
|
+
/\A\d+\z/ => [3,3]
|
605
|
+
)
|
606
|
+
|
607
|
+
# Greenland http://www.wtng.info/wtng-299-gl.html
|
608
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
609
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=GL
|
610
|
+
country '299',
|
611
|
+
one_of(%w(199 691)) >> split(3) | # satellite; geographic: Ivittuut
|
612
|
+
one_of(%w(31 32 33 34 35 36 61 64 66 68 81 84 85 86 87 89 91 92 94 95 96 97 98 99)) >> split(4) | # geographic
|
613
|
+
one_of(%w(22 23 24 25 26 27 28 29 42 43 44 45 46 47 48 49 52 53 54 55 56 57 58 59)) >> split(4) | # mobile: Tele Greenland A/S
|
614
|
+
one_of(%w(38 39)) >> split(4) | # VoIP telephony
|
615
|
+
match(/\A(50)\d{4}\z/) >> split(4) | #| voicemail (mobile) Tele Greenland A/S
|
616
|
+
match(/\A(50)\d{6}\z/) >> split(3,3) | #|
|
617
|
+
fixed(2) >> split(4)
|
377
618
|
|
378
619
|
# Gibraltar
|
379
620
|
country '350',
|
380
621
|
match(/^(2[012]\d)\d+$/) >> split(5) | # fixed
|
381
|
-
match(/^([56]\d)\d+$/)
|
382
|
-
match(/^(8\d\d\d)$/)
|
622
|
+
match(/^([56]\d)\d+$/) >> split(6) | # mobile
|
623
|
+
match(/^(8\d\d\d)$/) >> split(0)
|
383
624
|
|
384
625
|
# Portugal.
|
385
626
|
#
|
386
627
|
country '351',
|
387
|
-
|
388
|
-
match(/^(9\d)\d+$/) >> split(3,4)
|
389
|
-
one_of('21', '22') >> split(3,4)
|
390
|
-
fixed(3) >> split(3,
|
628
|
+
match(/^([78]\d\d)\d+$/) >> split(3,3) | # Service.
|
629
|
+
match(/^(9\d)\d+$/) >> split(3,4) | # Mobile.
|
630
|
+
one_of('21', '22') >> split(3,4) | # Lisboa & Porto
|
631
|
+
fixed(3) >> split(3,3) # 3-digit NDCs
|
391
632
|
|
392
633
|
# Luxembourg
|
393
634
|
#
|
394
635
|
country '352',
|
395
|
-
|
396
|
-
match(/^(
|
397
|
-
match(/^(
|
398
|
-
match(/^(
|
399
|
-
match(/^([
|
636
|
+
match(/^(2[467]\d{2})\d{4}$/) >> split(2,2) | # 4-digit NDC
|
637
|
+
match(/^(6\d[18])\d+$/) >> split(3,3) | # mobile
|
638
|
+
match(/^(60\d{2})\d{8}$/) >> split(2,2,2,2) | # mobile machine to machine
|
639
|
+
match(/^((2[^467]|[3-9]\d))\d{4}$/) >> split(2,2) | # 2-digit NDC Regular 6 digits number
|
640
|
+
match(/^((2[^467]|[3-9]\d))\d{4}$/) >> split(2,2) | # 2-digit NDC Regular 6 digits number
|
641
|
+
match(/^((2[^467]|[3-9]\d))\d{5}$/) >> split(2,2,1) | # 2-digit NDC Regular 6 digits number w/ 1 digit extension
|
642
|
+
match(/^((2[^467]|[3-9]\d))\d{6}$/) >> split(2,2,2) | # 2-digit NDC Regular 8 digits number or 6 digits with 2 digits extension
|
643
|
+
match(/^((2[^467]|[3-9]\d))\d{7}$/) >> split(2,2,3) | # 2-digit NDC Regular 6 digits with 4 digits extension
|
644
|
+
match(/^((2[^467]|[3-9]\d))\d{8}$/) >> split(2,2,4) | # 2-digit NDC Regular 6 digits number with 4 digits extension
|
645
|
+
match(/^(\d{2})\d{3}$/) >> split(2,2,1) # fallback for 5 digit number
|
400
646
|
|
401
647
|
# country '353' # Republic of Ireland, see special file.
|
402
648
|
|
403
649
|
country '354', none >> split(3,4) # Iceland
|
404
|
-
|
650
|
+
|
651
|
+
# Albania
|
652
|
+
# https://en.wikipedia.org/wiki/Telephone_numbers_in_Albania
|
653
|
+
country '355', trunk('0') |
|
654
|
+
one_of('4') >> split(3,4) | # Tirana
|
655
|
+
match(/\A(6[6-9])\d*\z/) >> split(3,4) | # mobile
|
656
|
+
match(/\A(2[24]|3[2-5]|47|5[2-5]|6[6-9]|8[2-5])\d*\z/) >> split(3,3) |
|
657
|
+
fixed(3) >> split(3,2)
|
405
658
|
|
406
659
|
# Malta
|
407
660
|
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Malta
|
@@ -410,77 +663,147 @@ Phony.define do
|
|
410
663
|
match(/^(2\d\d\d)\d+$/) >> split(4) | # fixed line
|
411
664
|
fixed(4) >> split(4) # eg. with voice mail
|
412
665
|
|
413
|
-
|
414
666
|
# Cyprus
|
415
667
|
# http://www.cytaglobal.com/cytaglobal/userfiles/NewNumberingPlan.pdf
|
416
|
-
country '357',
|
668
|
+
country '357', trunk('0') |
|
669
|
+
one_of('121','122','123') >> split(2,6) | # voicemail
|
417
670
|
fixed(2) >> split(6) # fixed & mobile
|
418
671
|
|
419
|
-
# Finland
|
672
|
+
# Finland
|
420
673
|
#
|
421
674
|
country '358',
|
422
|
-
|
423
|
-
match(/^(
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
675
|
+
trunk('0') |
|
676
|
+
match(/^(600[3-5]\d|601\d\d|700[3457]\d|7500[12]|7532[12]|7575[12]|7598[12])\d{3,4}$/) >> split(3..4) | # national service numbers, 5-digit NDC
|
677
|
+
match(/^(753[02][3-9]|7575[3-9]|7598[3-9])\d{3,5}$/) >> split(3..5) | # national subscriber numbers, 5-digit NDC
|
678
|
+
match(/^(73[0-4]\d\d)\d{5}$/) >> split(5) | # national subscriber numbers, 5-digit NDC (starting with 073)
|
679
|
+
match(/^(202[023]|209[8-9]|600[0126-9]|700[0126]|7099|800\d)\d{4,5}$/) >> split(2, 2..3) | # national service numbers, 4-digit NDCs
|
680
|
+
match(/^(606\d|70[78]\d)\d{6}$/) >> split(3, 3) | # national service numbers, 4-digit NDCs (starting with 0606/0707/0708)
|
681
|
+
match(/^(202[14-9]|209[0-7])\d{4,6}$/) >> split(3, 1..3) | # national subscriber numbers, 4-digit NDCs
|
682
|
+
match(/^(45[45789]\d)\d{2,6}$/) >> split(2, 0..4) | # mobile numbers, 4-digit NDCs
|
683
|
+
match(/^([123]00|602)\d{5,6}$/) >> split(3, 2..3) | # national service numbers, 3-digit NDCs
|
684
|
+
match(/^(10[1-9]|20[13-8]|30[1-9]|73[5-9])\d{5,7}$/) >> split(3, 2..4) | # national subscriber numbers, 3-digit NDCs
|
685
|
+
match(/^(71\d)\d{6}$/) >> split(3, 3) | # national subscriber numbers, 3-digit NDCs (starting with 071)
|
686
|
+
match(/^(73[5-9])\d{7}$/) >> split(3, 4) | # national subscriber numbers, 3-digit NDCs (starting with 073)
|
687
|
+
match(/^(43\d|45[0-36])\d{5,7}$/) >> split(3, 2..4) | # mobile numbers, 3-digit NDCs
|
688
|
+
match(/^(49\d)\d{8}$/) >> split(3, 3, 2) | # mobile numbers, 3-digit NDCs (starting with 049)
|
689
|
+
match(/^([235]9)\d{6,8}$/) >> split(3, 3, 0..2) | # national subscriber numbers, 2-digit NDCs
|
690
|
+
match(/^(4[0124678]|50)\d{4,8}$/) >> split(3, 1..5) | # mobile numbers, 2-digit NDCs
|
691
|
+
one_of('2','3','5','6','8','9') >> split(3,1..5) | # Short NDCs
|
692
|
+
fixed(2) >> split(3, 0..4) # 2-digit NDCs
|
693
|
+
|
694
|
+
# Bulgaria
|
428
695
|
#
|
696
|
+
# Note: https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=BG
|
697
|
+
# Note: https://en.wikipedia.org/wiki/Telephone_numbers_in_Bulgaria
|
429
698
|
country '359',
|
430
|
-
|
699
|
+
trunk('0') |
|
700
|
+
match(/^(2)\d{6}$/) >> split(3,3) | # Landline Sofia (optional last digit)
|
701
|
+
match(/^(2)\d{7}$/) >> split(3,4) | # Landline Sofia (optional last digit)
|
702
|
+
match(/^(30|31|33|36|37|39|41|43\d|45|47|51|53|55|57|59)\d{5}$/) >> split(5) |
|
703
|
+
match(/^(30|31|32|33|34|35|36|37|38|39|41|42|44|45|46|47|51|52|53|54|55|56|57|58|59)\d{6}$/) >> split(2,4) |
|
704
|
+
|
705
|
+
match(/^(60|61|63|65|66|69)\d{5}$/) >> split(5) |
|
706
|
+
match(/^(60|61|62|63|64|65|66|68|69)\d{6}$/) >> split(6) |
|
707
|
+
|
708
|
+
match(/^(700|701|703|704|705|706|707|708|709)\d{5}$/) >> split(5) |
|
709
|
+
match(/^(701|702|703|704|705|706|707|708|709)\d{4}$/) >> split(4) |
|
710
|
+
|
711
|
+
match(/^(71|72|74|75|77)\d{5}$/) >> split(5) |
|
712
|
+
match(/^(71|72|73|74|75|76|77|78|79)\d{6}$/) >> split(6) |
|
431
713
|
|
432
|
-
|
714
|
+
match(/^(80\d|81|91|93|95|97)\d{5}$/) >> split(5) |
|
715
|
+
match(/^(81|82|84|86)\d{6}$/) >> split(6) |
|
716
|
+
match(/^(87|88|89)\d{7}$/) >> split(4,3) |
|
717
|
+
match(/^(90|91|92|93|94|95|96|97|98\d|99\d)\d{6}$/) >> split(6)
|
718
|
+
|
719
|
+
# Lithuania
|
433
720
|
#
|
434
721
|
country '370',
|
722
|
+
trunk('8', normalize: false) |
|
435
723
|
one_of('700', '800') >> split(2,3) | # Service
|
436
724
|
match(/^(6\d\d)\d+$/) >> split(2,3) | # Mobile
|
437
725
|
one_of('5') >> split(3,2,2) | # Vilnius
|
438
726
|
one_of('37','41') >> split(2,2,2) | # Kaunas, Šiauliai
|
439
727
|
fixed(3) >> split(1,2,2) # 3-digit NDCs.
|
440
728
|
|
441
|
-
country '371',
|
729
|
+
# country '371' # Latvia, see special file
|
442
730
|
|
443
731
|
# Estonia
|
732
|
+
#
|
444
733
|
country '372',
|
445
|
-
match(/^(
|
446
|
-
|
734
|
+
match(/^(5\d\d\d)\d+$/) >> split(3..4) | # Mobile
|
735
|
+
match(/^((?:70|8[12])\d\d)\d+$/) >> split(4) | # Mobile
|
736
|
+
fixed(3) >> split(4) # 3-digit NDCs
|
737
|
+
|
738
|
+
# country '373' # Moldova, see special file
|
447
739
|
|
448
|
-
country '
|
449
|
-
|
450
|
-
|
451
|
-
|
740
|
+
country '374', match(/\A(10|55|77|9[13-9])\d*\z/) >> split(6) | # Armenia
|
741
|
+
fixed(3) >> split(5)
|
742
|
+
|
743
|
+
# Belarus
|
744
|
+
# country '375' # see special file
|
745
|
+
|
746
|
+
country '376', fixed(1) >> split(5) # Andorra
|
452
747
|
|
453
748
|
# Monaco
|
749
|
+
#
|
454
750
|
country '377',
|
455
|
-
one_of('6')
|
751
|
+
one_of('6') >> split(2,2,2,2) | # mobile
|
456
752
|
fixed(2) >> split(2,2,2)
|
457
753
|
|
458
|
-
|
754
|
+
# San Marino
|
755
|
+
country '378',
|
756
|
+
trunk('', :normalize => false) |
|
757
|
+
none >> matched_split(
|
758
|
+
/\A\d{6}\z/ => [3,3],
|
759
|
+
/\A\d+\z/ => [3,3,4]
|
760
|
+
)
|
761
|
+
|
459
762
|
country '379', todo # Vatican City State
|
460
763
|
|
461
|
-
country '380',
|
462
|
-
|
463
|
-
country '
|
464
|
-
country '383', todo # -
|
465
|
-
country '384', todo # -
|
764
|
+
# country '380' # Ukraine, see special file
|
765
|
+
|
766
|
+
# country '381' # Serbia, see special file
|
466
767
|
|
467
|
-
#
|
768
|
+
# country '382' # Montenegro, see special file
|
769
|
+
|
770
|
+
# Kosovo
|
468
771
|
#
|
469
|
-
|
470
|
-
|
772
|
+
# Note: https://en.wikipedia.org/wiki/Telephone_numbers_in_Kosovo
|
773
|
+
country '383',
|
774
|
+
trunk('0') |
|
775
|
+
fixed(2) >> split(3,3)
|
471
776
|
|
472
|
-
country '
|
473
|
-
country '387', fixed(2) >> split(3,2,2) # Bosnia and Herzegovina
|
474
|
-
country '388', fixed(2) >> split(3,2,2) # Group of countries, shared code
|
475
|
-
country '389', fixed(2) >> split(3,2,2) # The Former Yugoslav Republic of Macedonia
|
777
|
+
country '384', todo # -
|
476
778
|
|
477
|
-
country '
|
779
|
+
# country '385' # Croatia, see special file.
|
780
|
+
|
781
|
+
# Slovenia
|
782
|
+
# http://www.itu.int/oth/default.aspx?lang=en&parent=T02020000BE
|
783
|
+
# http://en.wikipedia.org/wiki/Telephone_numbers_in_Slovenia
|
784
|
+
country '386',
|
785
|
+
trunk('0') |
|
786
|
+
one_of('30','31','40','41','51','64','65','66','67','68','69','70','71') >> split(3,3) | # Mobile
|
787
|
+
one_of('1','2','3','4','5','7') >> split(3,4) | # Ljubljana, Maribor, Celje, Kranj, Nova Gorica, Novo mesto
|
788
|
+
fixed(3) >> split(2,3) # catchall
|
789
|
+
|
790
|
+
country '387', trunk('0') | fixed(2) >> split(3,3) # Bosnia and Herzegovina
|
791
|
+
country '388', trunk('0') | fixed(2) >> split(3,2,2) # Group of countries, shared code
|
792
|
+
|
793
|
+
# The Former Yugoslav Republic of Macedonia
|
794
|
+
country '389',
|
795
|
+
trunk('0') |
|
796
|
+
one_of('2','3','4','5','6','7','8') >> split(3,4)
|
797
|
+
|
798
|
+
country '420', fixed(3) >> split(3,3) # Czech Republic
|
478
799
|
|
479
800
|
# Slovak Republic.
|
480
801
|
#
|
481
|
-
country '421', match(/^(9\d\d).+$/)
|
482
|
-
|
483
|
-
|
802
|
+
country '421', match(/^(9\d\d).+$/) >> split(6) | # Mobile
|
803
|
+
match(/\A(2)1\d{2,4}\z/) >> split(3..5) | # Bratislava Short
|
804
|
+
match(/\A(\d{2})1\d{2,4}\z/) >> split(3..5) | # 2-digit NDCs Short
|
805
|
+
one_of('2') >> split(8) | # Bratislava
|
806
|
+
fixed(2) >> split(7) # 2-digit NDCs
|
484
807
|
|
485
808
|
country '422', todo # Spare code
|
486
809
|
country '423', none >> split(3,2,2) # Liechtenstein (Principality of)
|
@@ -491,53 +814,183 @@ Phony.define do
|
|
491
814
|
country '428', todo # -
|
492
815
|
country '429', todo # -
|
493
816
|
|
494
|
-
country '500',
|
495
|
-
country '501',
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
country '
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
country '
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
country '
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
country '
|
817
|
+
country '500', none >> split(2,3) # Falkland Islands (Malvinas) http://www.wtng.info/wtng-500-fk.html
|
818
|
+
country '501', fixed(3) >> split(4) # Belize
|
819
|
+
|
820
|
+
# Guatemala (Republic of) http://www.wtng.info/wtng-502-gt.html
|
821
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
822
|
+
#
|
823
|
+
country '502',
|
824
|
+
one_of('19') >> split(3,3,3) | # premium rate
|
825
|
+
fixed(1) >> split(3,4)
|
826
|
+
|
827
|
+
# El Salvador (Republic of)
|
828
|
+
country '503', fixed(4) >> split(4)
|
829
|
+
|
830
|
+
# Honduras (Republic of) http://www.wtng.info/wtng-504-hn.html
|
831
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
832
|
+
country '504',
|
833
|
+
one_of('800') >> split(3,4) | # freephone
|
834
|
+
fixed(2) >> split(3,3) # geographic, mobile
|
835
|
+
|
836
|
+
# Nicaragua http://www.wtng.info/wtng-505-ni.html
|
837
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
838
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=NI
|
839
|
+
country '505',
|
840
|
+
one_of('9') >> split(3,3) | # premium rate
|
841
|
+
fixed(2) >> split(3,3) # geographic, mobile
|
842
|
+
|
843
|
+
# Costa Rica http://www.wtng.info/wtng-506-cr.html
|
844
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
845
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=CR
|
846
|
+
country '506',
|
847
|
+
one_of('800') >> split(3,4) | # freephone
|
848
|
+
one_of(%w(905 909)) >> split(3,4) | # premium rate
|
849
|
+
fixed(1) >> split(3,4) # geographic
|
850
|
+
|
851
|
+
# Panama (Republic of) http://www.wtng.info/wtng-507-pa.html
|
852
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
853
|
+
country '507',
|
854
|
+
one_of(%w(800 809)) >> split(4) | # freephone
|
855
|
+
one_of('6') >> split(3,4) | # mobile
|
856
|
+
fixed(1) >> split(3,3) # geographic, VoIP telephony, mobile, premium rate, shared cost, pager
|
857
|
+
|
858
|
+
country '508', none >> split(3, 3) # Saint Pierre and Miquelon (Collectivité territoriale de la République française) http://www.wtng.info/wtng-508-pm.html
|
859
|
+
|
860
|
+
country '509', # Haiti (Republic of)
|
861
|
+
fixed(2) >> split(2,4)
|
862
|
+
|
863
|
+
# Guadeloupe (French Department of) http://www.wtng.info/wtng-590-fr.html
|
864
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
865
|
+
country '590', trunk('0') |
|
866
|
+
fixed(3) >> split(2,2,2)
|
867
|
+
|
868
|
+
country '591', # Bolivia (Republic of) http://www.itu.int/oth/T020200001A/en
|
869
|
+
fixed(1) >> split(3,4)
|
870
|
+
|
871
|
+
# Guyana http://www.wtng.info/wtng-592-gy.html
|
872
|
+
# https://www.numberingplans.com
|
873
|
+
country '592',
|
874
|
+
one_of('10') >> split(2) | # audiotext
|
875
|
+
one_of(%w(11 16 17 18 19)) >> split(3) | # audiotext
|
876
|
+
fixed(3) >> split(4) # geographic, audiotext
|
877
|
+
|
878
|
+
# Ecuador http://www.wtng.info/wtng-593-ec.html
|
879
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=EC¤t_page=1
|
880
|
+
# https://en.wikipedia.org/wiki/Telephone_numbers_in_Ecuador
|
881
|
+
country '593',
|
882
|
+
one_of('9') >> split(4,4) |
|
883
|
+
match(/\A([\d]{2})\d{7}\z/) >> split(3,4) |
|
884
|
+
fixed(1) >> split(3,4)
|
885
|
+
|
886
|
+
country '594', fixed(3) >> split(3, 3) # French Guiana (French Department of) http://www.wtng.info/wtng-594-fr.html
|
887
|
+
|
888
|
+
# country '595' # Paraguay (Republic of), see special file
|
889
|
+
|
890
|
+
# Martinique (French Department of) http://www.wtng.info/wtng-596-mq.html, https://www.numberingplans.com
|
891
|
+
country '596', trunk('0') |
|
892
|
+
fixed(3) >> split(2,2,2)
|
893
|
+
|
894
|
+
# Suriname (Republic of) http://www.wtng.info/wtng-597-sr.html, https://www.numberingplans.com
|
895
|
+
country '597',
|
896
|
+
none >> matched_split(
|
897
|
+
/\A[6789]\d+\z/ => [3,4], # freephone, mobile
|
898
|
+
/\A[2345]\d+\z/ => [3,3], # geographic, VoIP telephony
|
899
|
+
)
|
900
|
+
|
901
|
+
# country '598' # Uruguay (Eastern Republic of), see special file
|
902
|
+
|
903
|
+
country '599', one_of('9') >> split(3,4) | # Netherlands Antilles (Curacao)
|
904
|
+
fixed(3) >> split(4) # (other)
|
905
|
+
|
906
|
+
# Democratic Republic of Timor-Leste http://www.wtng.info/wtng-670-tl.html
|
907
|
+
country '670',
|
908
|
+
none >> matched_split(
|
909
|
+
/\A7\d+\z/ => [4,4], # mobile
|
910
|
+
/\A\d+\z/ => [3,4]
|
911
|
+
)
|
912
|
+
|
517
913
|
country '671', todo # Spare code
|
518
914
|
country '672', todo # Australian External Territories
|
519
|
-
country '673',
|
520
|
-
country '674',
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
country '
|
525
|
-
|
526
|
-
|
527
|
-
|
915
|
+
country '673', fixed(1) >> split(3, 3) # Brunei Darussalam http://www.wtng.info/wtng-673-bn.html
|
916
|
+
country '674', none >> split(3, 4) # Nauru (Republic of) http://www.wtng.info/wtng-674-nr.html
|
917
|
+
|
918
|
+
# Papua New Guinea
|
919
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=PG
|
920
|
+
country '675',
|
921
|
+
one_of(%w(180 181 182 183)) >> split(4) | # freephone
|
922
|
+
one_of('170') >> split(2) | # mobile
|
923
|
+
one_of('189') >> split(1) | # mobile
|
924
|
+
one_of('184') >> split(4,4) | # ISP, PSDN X.28
|
925
|
+
one_of(%w(185 270 271)) >> split(4) | # pager
|
926
|
+
one_of(%w(275 276)) >> split(4) | # satellite
|
927
|
+
one_of(%w(278 279)) >> split(2) | # satellite
|
928
|
+
one_of('115') >> split(4,4) | # voicemail (mobile)
|
929
|
+
one_of(%w(28 29)) >> split(3,2) | # pager
|
930
|
+
one_of(%w(16 18)) >> split(3,2) | # ISP
|
931
|
+
one_of(%w(70 71 72 74 75 76 78 79)) >> split(3,3) | # mobile
|
932
|
+
one_of(%w(731 732 733 734 735 736 738 739)) >> split(2,3) | # mobile
|
933
|
+
one_of(%w(770)) >> split(2,3) | # wireless geographic; Port Moresby, National Capital District
|
934
|
+
one_of(%w(771)) >> split(2,3) | # wireless geographic; Momase region
|
935
|
+
one_of(%w(772)) >> split(2,3) | # wireless geographic; Highlands region
|
936
|
+
one_of(%w(7730)) >> split(1,3) | # wireless geographic; Southern region
|
937
|
+
one_of(%w(774)) >> split(2,3) | # wireless geographic; Islands region
|
938
|
+
one_of(%w(775)) >> split(2,3) | # mobile
|
939
|
+
one_of(%w(80 81 82 83)) >> split(3,3) | # freephone
|
940
|
+
one_of(%w(90 91 92 93)) >> split(3,3) | # geographic, ISDN
|
941
|
+
one_of(%w(3 4 5 6 7 8 9)) >> split(3,3) # geographic
|
942
|
+
fixed(1) >> split(3,3) # geographic
|
943
|
+
|
944
|
+
# Tonga (Kingdom of)
|
945
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=TO
|
946
|
+
country '676',
|
947
|
+
none >> matched_split(
|
948
|
+
/\A(77|78|87|88|89)\d+\z/ => [2,3,2],
|
949
|
+
/\A\d+\z/ => [2,3]
|
950
|
+
)
|
951
|
+
|
952
|
+
# Solomon Islands http://www.wtng.info/wtng-677-sb.html, https://www.numberingplans.com
|
953
|
+
country '677',
|
954
|
+
none >> matched_split(
|
955
|
+
/\A7\d+\z/ => [4,3], # mobile
|
956
|
+
/\A\d+\z/ => [2,3] # freephone, geographic, mobile, VoIP telephony
|
957
|
+
)
|
958
|
+
|
959
|
+
# Vanuatu (Republic of) http://www.wtng.info/wtng-678-vu.html, https://www.numberingplans.com
|
960
|
+
country '678',
|
961
|
+
none >> matched_split(
|
962
|
+
/\A[579]\d+\z/ => [4,3], # mobile
|
963
|
+
/\A\d+\z/ => [2,3] # geographic, VoIP telephony
|
964
|
+
)
|
965
|
+
|
966
|
+
country '679', none >> split(3, 4) # Fiji (Republic of) http://www.wtng.info/wtng-679-fj.html
|
967
|
+
|
968
|
+
country '680', none >> split(3, 4) # Palau (Republic of) http://www.wtng.info/wtng-680-pw.html
|
528
969
|
country '681', todo # Wallis and Futuna (Territoire français d'outre-mer)
|
529
|
-
country '682',
|
530
|
-
country '683',
|
970
|
+
country '682', none >> split(2,3) # Cook Islands http://www.wtng.info/wtng-682-ck.html
|
971
|
+
country '683', none >> split(4) # Niue http://www.wtng.info/wtng-683-nu.html
|
531
972
|
country '684', todo # -
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
country '
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
973
|
+
|
974
|
+
# Samoa (Independent State of)
|
975
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=WS
|
976
|
+
country '685',
|
977
|
+
none >> matched_split(
|
978
|
+
/\A800\d+\z/ => [3,3], # freephone
|
979
|
+
/\A830\d+\z/ => [3,3], # shared cost
|
980
|
+
/\A60\d+\z/ => [3,3], # wireless geographic
|
981
|
+
/\A(71|72|75|76|77)\d+\z/ => [3,4], # mobile
|
982
|
+
/\A84\d+\z/ => [3,4], # wireless geographic
|
983
|
+
/\A\d+\z/ => [2,3] # geographic
|
984
|
+
)
|
985
|
+
|
986
|
+
country '686', none >> split(2,3) # Kiribati (Republic of) http://www.wtng.info/wtng-686-ki.html
|
987
|
+
country '687', none >> split(3,3) # New Caledonia (Territoire français d'outre-mer) http://www.wtng.info/wtng-687-nc.html
|
988
|
+
country '688', none >> split(5) # Tuvalu http://www.wtng.info/wtng-688-tv.html
|
989
|
+
country '689', none >> split(2,2,2,2) # French Polynesia (Territoire français d'outre-mer) http://www.wtng.info/wtng-689-pf.html
|
990
|
+
|
991
|
+
country '690', fixed(1) >> split(3) # Tokelau http://www.wtng.info/wtng-690-tk.html
|
992
|
+
country '691', none >> split(3, 4) # Micronesia (Federated States of) http://www.wtng.info/wtng-691-fm.html
|
993
|
+
country '692', none >> split(3, 4) # Marshall Islands (Republic of the) http://www.wtng.info/wtng-692-mh.html
|
541
994
|
country '693', todo # -
|
542
995
|
country '694', todo # -
|
543
996
|
country '695', todo # -
|
@@ -546,7 +999,10 @@ Phony.define do
|
|
546
999
|
country '698', todo # -
|
547
1000
|
country '699', todo # -
|
548
1001
|
|
549
|
-
|
1002
|
+
# International Freephone Service
|
1003
|
+
# https://www.itu.int/en/ITU-T/inr/unum/Pages/uifn.aspx
|
1004
|
+
country '800', none >> split(8)
|
1005
|
+
|
550
1006
|
country '801', todo # -
|
551
1007
|
country '802', todo # -
|
552
1008
|
country '803', todo # -
|
@@ -554,7 +1010,7 @@ Phony.define do
|
|
554
1010
|
country '805', todo # -
|
555
1011
|
country '806', todo # -
|
556
1012
|
country '807', todo # -
|
557
|
-
country '808',
|
1013
|
+
country '808', none >> split(12) # International Shared Cost Service (ISCS)
|
558
1014
|
country '809', todo # -
|
559
1015
|
|
560
1016
|
country '830', todo # -
|
@@ -568,18 +1024,40 @@ Phony.define do
|
|
568
1024
|
country '838', todo # -
|
569
1025
|
country '839', todo # -
|
570
1026
|
|
571
|
-
|
1027
|
+
# Democratic People's Republic of Korea
|
1028
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=KP
|
1029
|
+
country '850',
|
1030
|
+
one_of(%w(191 192 193)) >> split(3,4) | # mobile
|
1031
|
+
one_of('2') >> matched_split(
|
1032
|
+
/\A\d{5}\z/ => [3,2],
|
1033
|
+
/\A\d{7}\z/ => [3,4],
|
1034
|
+
#/\A(880|881|882|883|885)\d+\z/ => [4,4,4,4],
|
1035
|
+
/\A\d+\z/ => [3,3,3]) |
|
1036
|
+
one_of(%w(31 39 41 45 53 57 61 67 73 79)) >> split(3,3) |
|
1037
|
+
fixed(2) >> split(3,3)
|
1038
|
+
|
572
1039
|
country '851', todo # Spare code
|
573
|
-
|
574
|
-
|
1040
|
+
|
1041
|
+
# Hong Kong, China
|
1042
|
+
|
1043
|
+
country '852',
|
1044
|
+
match(/^(800)\d+$/) >> split(2, 4) |
|
1045
|
+
none >> split(4,4)
|
1046
|
+
|
1047
|
+
# Macao, China
|
1048
|
+
country '853', # Macao, China
|
1049
|
+
match(/^(28)\d+$/) >> split(2,4) | # Landline.
|
1050
|
+
match(/^(8)\d+$/) >> split(3,4) | # Landline.
|
1051
|
+
match(/^(6)\d+$/) >> split(3,4) # Mobile.
|
1052
|
+
|
575
1053
|
country '854', todo # Spare code
|
576
1054
|
|
577
|
-
#
|
578
|
-
|
579
|
-
|
580
|
-
|
1055
|
+
# Lao People's Democratic Republic http://www.wtng.info/wtng-856-la.html, https://www.numberingplans.com
|
1056
|
+
country '856',
|
1057
|
+
one_of('30') >> split(3,4) | # geographic
|
1058
|
+
one_of('20') >> split(4,4) | # mobile
|
1059
|
+
fixed(2) >> split(3,3) # geographic
|
581
1060
|
|
582
|
-
country '856', todo # Lao People's Democratic Republic
|
583
1061
|
country '857', todo # Spare code
|
584
1062
|
country '858', todo # Spare code
|
585
1063
|
country '859', todo # Spare code
|
@@ -589,21 +1067,28 @@ Phony.define do
|
|
589
1067
|
country '872', todo # Inmarsat (Pacific Ocean)
|
590
1068
|
country '873', todo # Inmarsat (Indian Ocean)
|
591
1069
|
country '874', todo # Inmarsat (Atlantic Ocean-West)
|
592
|
-
country '875', todo #
|
593
|
-
country '876', todo #
|
594
|
-
country '877', todo #
|
1070
|
+
country '875', todo # Maritime Mobile Service Applications
|
1071
|
+
country '876', todo # Maritime Mobile Service Applications
|
1072
|
+
country '877', todo # Maritime Mobile Service Applications
|
595
1073
|
country '878', todo # Universal Personal Telecommunication Service (UPT)
|
596
|
-
|
1074
|
+
reserved '879' # Reserved for national non-commercial purposes
|
1075
|
+
|
1076
|
+
# Bangladesh (People's Republic of)
|
1077
|
+
# country '880' # see special file
|
1078
|
+
|
1079
|
+
# Global Mobile Satellite System (i.e. Iridium, Globalstar, etc)
|
1080
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=QM
|
1081
|
+
country '881', fixed(1) >> split(3,5)
|
597
1082
|
|
598
|
-
country '880', todo # Bangladesh (People's Republic of)
|
599
|
-
country '881', todo # International Mobile, shared code
|
600
1083
|
country '882', todo # International Networks, shared code
|
601
1084
|
country '883', todo # -
|
602
1085
|
country '884', todo # -
|
603
1086
|
country '885', todo # -
|
604
|
-
|
1087
|
+
|
1088
|
+
# country '886' # Taiwan, see special file
|
1089
|
+
|
605
1090
|
country '887', todo # -
|
606
|
-
|
1091
|
+
reserved '888' # Reserved for future global service
|
607
1092
|
country '889', todo # -
|
608
1093
|
|
609
1094
|
country '890', todo # -
|
@@ -617,36 +1102,151 @@ Phony.define do
|
|
617
1102
|
country '898', todo # -
|
618
1103
|
country '899', todo # -
|
619
1104
|
|
620
|
-
|
621
|
-
country '
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
country '
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
country '
|
638
|
-
|
1105
|
+
# Maldives (Republic of) http://www.wtng.info/wtng-960-mv.html, https://www.numberingplans.com
|
1106
|
+
country '960',
|
1107
|
+
one_of(%w(800 900)) >> split(3,4) | # freephone, premium rate
|
1108
|
+
fixed(3) >> split(4) # geographic, mobile
|
1109
|
+
|
1110
|
+
# Lebanon
|
1111
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
1112
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=LB
|
1113
|
+
country '961',
|
1114
|
+
one_of(%w(70 71 76 78 79)) >> split(3,3) | # mobile
|
1115
|
+
one_of(%w(90 91)) >> split(3,3) | # premium rate
|
1116
|
+
one_of(%w(80 81)) >> split(3,3) | # shared cost
|
1117
|
+
one_of(%w(1 4 5 6 7 8 9)) >> split(3,3) | # geographic
|
1118
|
+
one_of('3') >> split(3,3) | # mobile
|
1119
|
+
fixed(1) >> split(3,3)
|
1120
|
+
|
1121
|
+
# Jordan (Hashemite Kingdom of)
|
1122
|
+
country '962',
|
1123
|
+
one_of(%w(6250 8790)) >> split(4) | # wireless geographic
|
1124
|
+
one_of(%w(800 801 802 803 804 805 806 807 808 809)) >> split(3,2) | # freephone
|
1125
|
+
one_of('810') >> split(3,2) | # ISP
|
1126
|
+
one_of('900') >> split(3,2) | # premium rate
|
1127
|
+
one_of('70') >> split(3,3) | # universal access
|
1128
|
+
one_of(%w(85 87)) >> split(3,3) | # shared cost
|
1129
|
+
one_of(%w(2 3 5 6)) >> split(3,4) | # geographic
|
1130
|
+
one_of('7') >> split(4,4) | # mobile, pager
|
1131
|
+
fixed(1) >> split(3,4)
|
1132
|
+
|
1133
|
+
# Syrian Arab Republic
|
1134
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=SY
|
1135
|
+
country '963',
|
1136
|
+
one_of(%w(11 14 31 33)) >> split(3,4) |
|
1137
|
+
one_of(%w(12 13 15 16 21 22 23 25 34 41 43 51 52 53)) >> split(3,3) |
|
1138
|
+
one_of('4') >> split(3,4) |
|
1139
|
+
one_of('9') >> split(4,4) | # mobile
|
1140
|
+
fixed(2) >> split(3,3)
|
1141
|
+
|
1142
|
+
# Iraq (Republic of)
|
1143
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
1144
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=IQ
|
1145
|
+
country '964',
|
1146
|
+
one_of(%w(21 23 24 25 30 32 33 36 37 40 42 43 50 53 60 62 66)) >> split(3,3) |
|
1147
|
+
one_of(%w(71 72 73 74 75 76 77 78 79)) >> split(4,4) | # mobile
|
1148
|
+
one_of('1') >> split(3,4) |
|
1149
|
+
fixed(2) >> split(3,3)
|
1150
|
+
|
1151
|
+
# Kuwait (State of) http://www.wtng.info/wtng-965-kw.html
|
1152
|
+
country '965',
|
1153
|
+
none >> matched_split(
|
1154
|
+
/\A65816\d+\z/ => [4,4,4], # voicemail (mobile), Wataniya Telecom
|
1155
|
+
/\A1\d+\z/ => [3,4], # geographic
|
1156
|
+
/\A2\d+\z/ => [4,4], # geographic
|
1157
|
+
/\A[569]\d+\z/ => [4,4], # mobile
|
1158
|
+
/\A8\d+\z/ => [3,3], # geographic
|
1159
|
+
)
|
1160
|
+
|
1161
|
+
# country '966' # Saudi Arabia (Kingdom of), see special file.
|
1162
|
+
|
1163
|
+
# Yemen (Republic of)
|
1164
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
1165
|
+
country '967',
|
1166
|
+
one_of(%w(70 71 73 77)) >> split(3,4) | # mobile
|
1167
|
+
one_of('58') >> split(4) | # pager
|
1168
|
+
one_of('1') >> matched_split(
|
1169
|
+
/\A\d{6}\z/ => [3,3],
|
1170
|
+
/\A\d+\z/ => [3,4]) |
|
1171
|
+
one_of(%w(2 3 4 5 6 7)) >> split(3,3) |
|
1172
|
+
fixed(1) >> split(3,3)
|
1173
|
+
|
1174
|
+
# Oman (Sultanate of), https://www.numberingplans.com/?page=dialling&sub=areacodes
|
1175
|
+
country '968', fixed(2) >> split(3,3)
|
1176
|
+
|
1177
|
+
reserved '969' # Reserved - reservation currently under investigation
|
1178
|
+
|
1179
|
+
country '970', # 970 is used in those countries that block access to 972 (Israel)
|
1180
|
+
one_of('1') >> split(3,3,3) | # special numbers
|
1181
|
+
one_of('2', '3', '4', '8', '9') >> split(3,4) | # 1 digit ndc
|
1182
|
+
match(/^(5[023456789]|7[23467])\d+$/) >> split(3,4) # 2 digit ndc
|
1183
|
+
|
1184
|
+
# United Arab Emirates
|
1185
|
+
# https://www.numberingplans.com/?page=dialling&sub=areacodes
|
1186
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=AE
|
1187
|
+
country '971',
|
1188
|
+
one_of(%w(200 300)) >> split(3,3) | # shared cost
|
1189
|
+
one_of('600') >> split(3,3) | # national rate
|
1190
|
+
one_of(%w(500 700 900)) >> split(3,3) | # premium rate
|
1191
|
+
one_of('800') >> matched_split(
|
1192
|
+
/\A\d{2}\z/ => [2],
|
1193
|
+
/\A\d{7}\z/ => [2,3,2],
|
1194
|
+
/\A\d+\z/ => [2,3,4]) | # freephone
|
1195
|
+
one_of(%w(50 52 54 55 56 58)) >> split(3,4) | # mobile
|
1196
|
+
one_of(%w(2 3 4 6 7 9)) >> split(3,4) |
|
1197
|
+
fixed(1) >> split(3,4)
|
1198
|
+
|
1199
|
+
# Israel (State of) (also works for numbers in Palestinian territories)
|
1200
|
+
country '972',
|
1201
|
+
trunk('0') |
|
1202
|
+
one_of('1') >> split(3,3,3) | # special numbers
|
1203
|
+
one_of('2', '3', '4', '8', '9') >> split(3,4) | # 1 digit ndc
|
1204
|
+
match(/^(5[012345689]|7[234679])\d+$/) >> split(3,4) # 2 digit ndc
|
1205
|
+
|
1206
|
+
country '973', none >> split(4,4..4) # Bahrain (Kingdom of) http://www.itu.int/oth/T0202000011/en
|
1207
|
+
|
1208
|
+
# Qatar (State of)
|
1209
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=QA
|
1210
|
+
country '974',
|
1211
|
+
one_of(%w(1245 1744)) >> split(3,3) | # voicemail
|
1212
|
+
one_of(%w(800 900)) >> split(2,2) | # freephone, audiotext
|
1213
|
+
one_of(%w(20 21 22 26)) >> split(3,2) | # pager
|
1214
|
+
one_of(%w(92 97)) >> split(3) | # mobile
|
1215
|
+
fixed(2) >> split(3,3)
|
1216
|
+
|
1217
|
+
country '975', fixed(1) >> split(3, 3) # Bhutan (Kingdom of) http://www.wtng.info/wtng-975-bt.html
|
1218
|
+
|
1219
|
+
# Mongolia
|
1220
|
+
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=MN
|
1221
|
+
country '976',
|
1222
|
+
one_of(%w(121 122 123 221 222 223)) >> matched_split(
|
1223
|
+
/\A\d{4}\z/ => [2,2],
|
1224
|
+
/\A\d+\z/ => [2,3]) |
|
1225
|
+
one_of(%w(11 12 13 14 15 21 22 23 24 25)) >> split(3,2) |
|
1226
|
+
one_of(%w(70 75 76 77 78 79)) >> split(3,3) | # VoIP telephony
|
1227
|
+
one_of(%w(88 89 90 91 94 95 96 99)) >> split(3,3) | # mobile
|
1228
|
+
one_of(%w(50 55 56 58 92)) >> split(3,3) | # wireless geographic
|
1229
|
+
fixed(2) >> split(3,3)
|
1230
|
+
|
1231
|
+
# country '977' # Nepal, see special file
|
1232
|
+
|
639
1233
|
country '978', todo # -
|
640
1234
|
country '979', todo # International Premium Rate Service (IPRS)
|
641
1235
|
|
642
1236
|
country '990', todo # Spare code
|
643
1237
|
country '991', todo # Trial of a proposed new international telecommunication public correspondence service, shared code
|
644
|
-
|
645
|
-
country '
|
646
|
-
|
647
|
-
country '
|
648
|
-
|
1238
|
+
|
1239
|
+
# country '992' # Tajikistan (Republic of), see special file
|
1240
|
+
|
1241
|
+
# country '993' # Turkmenistan, see special file
|
1242
|
+
|
1243
|
+
country '994', fixed(2) >> split(7) # Azerbaijani Republic
|
1244
|
+
|
1245
|
+
# country '995' # Georgia, see special file
|
1246
|
+
|
1247
|
+
# country '996' # Kyrgyz Republic, see special file
|
1248
|
+
|
649
1249
|
country '997', todo # Spare code
|
650
|
-
country '998',
|
651
|
-
|
1250
|
+
country '998', fixed(2) >> split(3, 4) # Uzbekistan (Republic of) http://www.wtng.info/wtng-998-uz.html
|
1251
|
+
reserved '999' # Reserved for possible future use within the Telecommunications for Disaster Relief (TDR) concept
|
652
1252
|
end
|