phony 1.9.0 → 2.19.14
Sign up to get free protection for your applications and to get access to all the features.
- 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
|