phony 2.18.3 → 3.0.3
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 +4 -4
- data/README.md +117 -0
- data/lib/phony/config.rb +25 -26
- data/lib/phony/countries/argentina.rb +352 -0
- data/lib/phony/countries/austria.rb +73 -74
- data/lib/phony/countries/bangladesh.rb +27 -28
- data/lib/phony/countries/belarus.rb +110 -111
- data/lib/phony/countries/brazil.rb +93 -93
- data/lib/phony/countries/cambodia.rb +10 -14
- data/lib/phony/countries/china.rb +22 -18
- data/lib/phony/countries/croatia.rb +6 -5
- data/lib/phony/countries/georgia.rb +84 -84
- data/lib/phony/countries/germany.rb +4067 -4068
- data/lib/phony/countries/guinea.rb +8 -8
- data/lib/phony/countries/india.rb +31 -34
- data/lib/phony/countries/indonesia.rb +57 -46
- data/lib/phony/countries/ireland.rb +10 -9
- data/lib/phony/countries/italy.rb +79 -60
- data/lib/phony/countries/japan.rb +456 -406
- data/lib/phony/countries/kyrgyzstan.rb +109 -109
- data/lib/phony/countries/latvia.rb +34 -34
- data/lib/phony/countries/libya.rb +109 -107
- data/lib/phony/countries/malaysia.rb +12 -12
- data/lib/phony/countries/moldova.rb +42 -42
- data/lib/phony/countries/montenegro.rb +24 -20
- data/lib/phony/countries/myanmar.rb +39 -39
- data/lib/phony/countries/namibia.rb +35 -29
- data/lib/phony/countries/nepal.rb +60 -62
- data/lib/phony/countries/netherlands.rb +13 -13
- data/lib/phony/countries/pakistan.rb +135 -111
- data/lib/phony/countries/paraguay.rb +135 -135
- data/lib/phony/countries/russia_kazakhstan_abkhasia_south_ossetia.rb +125 -128
- data/lib/phony/countries/saudi_arabia.rb +5 -5
- data/lib/phony/countries/serbia.rb +48 -36
- data/lib/phony/countries/somalia.rb +18 -18
- data/lib/phony/countries/south_korea.rb +16 -13
- data/lib/phony/countries/sweden.rb +356 -48
- data/lib/phony/countries/taiwan.rb +20 -18
- data/lib/phony/countries/tajikistan.rb +70 -70
- data/lib/phony/countries/turkmenistan.rb +65 -65
- data/lib/phony/countries/ukraine.rb +607 -607
- data/lib/phony/countries/united_kingdom.rb +66 -66
- data/lib/phony/countries/uruguay.rb +40 -41
- data/lib/phony/countries/vietnam.rb +20 -14
- data/lib/phony/countries/zimbabwe.rb +31 -31
- data/lib/phony/countries.rb +509 -453
- data/lib/phony/country.rb +50 -44
- data/lib/phony/country_codes.rb +77 -57
- data/lib/phony/dsl.rb +25 -28
- data/lib/phony/local_splitters/fixed.rb +24 -29
- data/lib/phony/local_splitters/regex.rb +30 -31
- data/lib/phony/national_code.rb +7 -10
- data/lib/phony/national_splitters/default.rb +9 -11
- data/lib/phony/national_splitters/dsl.rb +8 -18
- data/lib/phony/national_splitters/fixed.rb +12 -15
- data/lib/phony/national_splitters/none.rb +8 -14
- data/lib/phony/national_splitters/regex.rb +13 -17
- data/lib/phony/national_splitters/variable.rb +37 -38
- data/lib/phony/trunk_code.rb +23 -23
- data/lib/phony/vanity.rb +12 -13
- data/lib/phony.rb +84 -83
- metadata +14 -45
- data/README.textile +0 -112
- data/spec/functional/config_spec.rb +0 -44
- data/spec/functional/plausibility_spec.rb +0 -608
- data/spec/lib/phony/countries_spec.rb +0 -1391
- data/spec/lib/phony/country_codes_spec.rb +0 -203
- data/spec/lib/phony/country_spec.rb +0 -84
- data/spec/lib/phony/dsl_spec.rb +0 -24
- data/spec/lib/phony/local_splitters/fixed_spec.rb +0 -56
- data/spec/lib/phony/local_splitters/regex_spec.rb +0 -97
- data/spec/lib/phony/national_code_spec.rb +0 -91
- data/spec/lib/phony/national_splitters/default_spec.rb +0 -34
- data/spec/lib/phony/national_splitters/fixed_spec.rb +0 -49
- data/spec/lib/phony/national_splitters/none_spec.rb +0 -28
- data/spec/lib/phony/national_splitters/regex_spec.rb +0 -23
- data/spec/lib/phony/national_splitters/variable_spec.rb +0 -39
- data/spec/lib/phony/vanity_spec.rb +0 -30
- data/spec/lib/phony_spec.rb +0 -70
|
@@ -5,39 +5,51 @@
|
|
|
5
5
|
|
|
6
6
|
Phony.define do
|
|
7
7
|
country '381',
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
8
|
+
trunk('0') |
|
|
9
|
+
one_of(%w[800]) >> split(3, 2) | # freephone
|
|
10
|
+
one_of(%w[808]) >> split(3, 2) | # payphone
|
|
11
|
+
one_of(%w[677 678]) >> matched_split(
|
|
12
|
+
/\A\d{4}\z/ => [3],
|
|
13
|
+
/\A\d+\z/ => [3, 3]
|
|
14
|
+
) |
|
|
15
|
+
one_of(%w[230]) >> matched_split(
|
|
16
|
+
/\A\d{4}\z/ => [4],
|
|
17
|
+
/\A\d+\z/ => [3, 2]
|
|
18
|
+
) |
|
|
19
|
+
one_of(%w[11 21]) >> matched_split(
|
|
20
|
+
/\A\d{6}\z/ => [3, 3],
|
|
21
|
+
/\A\d+\z/ => [3, 4]
|
|
22
|
+
) |
|
|
23
|
+
one_of(%w[26 31 35]) >> split(3, 3) |
|
|
24
|
+
one_of(%w[10 12 13 14 15 16 17 18 19 20 22 23 24 25 27 30 32 33 34 36 37]) >> matched_split(
|
|
25
|
+
/\A\d{5}\z/ => [3, 2],
|
|
26
|
+
/\A\d+\z/ => [3, 3]
|
|
27
|
+
) |
|
|
28
|
+
one_of(%w[72]) >> split(3, 3) | # ISP
|
|
29
|
+
one_of(%w[60 61 68 69]) >> matched_split(
|
|
30
|
+
/\A\d{3}\z/ => [3],
|
|
31
|
+
/\A\d{6}\z/ => [3, 3],
|
|
32
|
+
/\A\d{7}\z/ => [3, 4],
|
|
33
|
+
/\A\d+\z/ => [3, 3, 4]
|
|
34
|
+
) | # mobile, voicemail (mobile)
|
|
35
|
+
one_of(%w[66 63]) >> matched_split(
|
|
36
|
+
/\A\d{3}\z/ => [3],
|
|
37
|
+
/\A\d{6}\z/ => [3, 3],
|
|
38
|
+
/\A\d{7}\z/ => [3, 4],
|
|
39
|
+
/\A\d+\z/ => [3, 3, 4]
|
|
40
|
+
) | # mobile, voicemail (mobile)
|
|
41
|
+
one_of(%w[62 64 65]) >> matched_split(
|
|
42
|
+
/\A\d{2}\z/ => [2],
|
|
43
|
+
/\A\d{3}\z/ => [3],
|
|
44
|
+
/\A\d{6}\z/ => [3, 3],
|
|
45
|
+
/\A\d{7}\z/ => [3, 4],
|
|
46
|
+
/\A\d+\z/ => [3, 3, 4]
|
|
47
|
+
) | # mobile, voicemail (mobile)
|
|
48
|
+
one_of(%w[70]) >> split(3, 3) | # universal access
|
|
49
|
+
one_of(%w[42 78]) >> split(3, 3) | # premium rate
|
|
50
|
+
one_of(%w[9]) >> split(3, 4) | # premium rate
|
|
51
|
+
fixed(2) >> matched_split(
|
|
52
|
+
/\A\d{5}\z/ => [3, 2],
|
|
53
|
+
/\A\d+\z/ => [3, 3]
|
|
54
|
+
)
|
|
55
|
+
end
|
|
@@ -5,22 +5,22 @@ Phony.define do
|
|
|
5
5
|
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=SO
|
|
6
6
|
# https://en.wikipedia.org/wiki/Telecommunications_in_Somaliland#Telesom
|
|
7
7
|
country '252',
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
8
|
+
one_of('88216') >> split(3) | # Thuraya Satellite Telecommunications Company
|
|
9
|
+
one_of(%w[1034 1043]) >> split(3, 2) | # Hortel
|
|
10
|
+
one_of(%w[1313]) >> split(3) | # Telcom Somalia
|
|
11
|
+
one_of(%w[160 161 162 163 164 165 166 167 168]) >> split(2, 2) | # Hortel
|
|
12
|
+
one_of(%w[200 203 211 212 213 313]) >> split(3) | # Telcom Somalia
|
|
13
|
+
one_of(%w[201 204 208 210 214]) >> split(2, 2) | # Telcom Somalia
|
|
14
|
+
one_of(%w[500 501 502 503 504 505 506 507 508 509]) >> split(3, 2) | # mobile NationLink Telecom
|
|
15
|
+
one_of(%w[523 525 526]) >> split(2, 2) | # Netco
|
|
16
|
+
match(/\A(61|62|63|64|65|66|67|68|69|90)\d{7}\z/) >> split(3, 4) | # mobile Hormuud, Somtel Mogadishu, Telesom, Hormuud, Somtel, Somtel Puntland, Nationlink Mogadishu, Nationlink Mogadishu, Nationlink, Golis
|
|
17
|
+
one_of(%w[642 643 644 648 649]) >> split(2, 2) | # Galcom
|
|
18
|
+
one_of(%w[33 51 52 54 55 56 57 58 59 68 71 76 78 79 88]) >> split(3, 2) |
|
|
19
|
+
match(/\A(67)\d{5}\z/) >> split(3, 2) | # Golis Telecom Somalia
|
|
20
|
+
one_of(%w[15 40 42 45 46 60 61 90 91]) >> split(3, 3) | # mobile Somafone, Hortel
|
|
21
|
+
one_of(%w[18]) >> split(3, 2) | # Hortel
|
|
22
|
+
one_of(%w[27 28 29 62 63 87]) >> split(2, 2) | # Telcom Somalia, Emir Set
|
|
23
|
+
one_of(%w[67 69]) >> split(4, 3) | # mobile NationLink Telecom
|
|
24
|
+
one_of('1') >> split(3, 3) |
|
|
25
|
+
fixed(1) >> split(3, 3)
|
|
26
26
|
end
|
|
@@ -6,24 +6,27 @@
|
|
|
6
6
|
# https://www.numberingplans.com/?page=plans&sub=phonenr&alpha_2_input=KR
|
|
7
7
|
#
|
|
8
8
|
|
|
9
|
-
# TODO 4-digit services, like "unreasonable infringement of livelihood report" number :)
|
|
9
|
+
# TODO: 4-digit services, like "unreasonable infringement of livelihood report" number :)
|
|
10
10
|
#
|
|
11
11
|
|
|
12
|
-
special = %w
|
|
13
|
-
|
|
12
|
+
special = %w[100 101 105 106 107 108 109 111 112 113 114 115 116 117 118 119 120 121 122 123 125 127 128 129 131 132
|
|
13
|
+
134 141 182 188]
|
|
14
|
+
# NOTE: was:
|
|
14
15
|
# mobile = ('10'..'19').to_a
|
|
15
16
|
# but this was not frozen so easily.
|
|
16
|
-
mobile = %w
|
|
17
|
+
mobile = %w[10 11 12 13 14 15 16 17 18 19]
|
|
17
18
|
|
|
18
19
|
Phony.define do
|
|
19
20
|
country '82',
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
trunk('0') |
|
|
22
|
+
match(/^(#{special.join("|")})$/) >> split(3, 3) | # Special actually don't need to be split – but better err.
|
|
23
|
+
one_of(*mobile) >> split(4, 4) |
|
|
24
|
+
one_of('2') >> matched_split(
|
|
25
|
+
/\A\d{7}\z/ => [3, 4],
|
|
26
|
+
/\A\d{8}\z/ => [4, 4]
|
|
27
|
+
) | # Seoul, also includes "services".
|
|
28
|
+
fixed(2) >> matched_split(
|
|
29
|
+
/\A\d{7}\z/ => [3, 4],
|
|
30
|
+
/\A\d{8}\z/ => [4, 4]
|
|
31
|
+
) # Rest of cities
|
|
29
32
|
end
|
|
@@ -2,27 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
# Sweden uses a variable-length ndc code, thus we use a separate file to not let all_other.rb explode.
|
|
4
4
|
#
|
|
5
|
-
# Note: Sweden use a variable ndc format
|
|
6
|
-
# To save space, we only use ndcs of length 1 and 2 (and use the fallback of 3 to handle the rest).
|
|
7
|
-
#
|
|
8
|
-
# Taken from: http://en.wikipedia.org/wiki/Telephone_numbers_in_Sweden
|
|
9
|
-
# http://www.pts.se/upload/Ovrigt/Tele/Nummerfragor/bilaga-2b.pdf
|
|
5
|
+
# Note: Sweden use a variable ndc format with length 1 to 3.
|
|
10
6
|
#
|
|
7
|
+
# Taken from: https://pts.se/globalassets/globala-block/nummertillstand/the-swedish-numbering-plan-for-telephony-according-to-itu---2024-01-08.pdf
|
|
8
|
+
# https://nummer.pts.se/NbrPlanSearch
|
|
9
|
+
# https://www.sosalarm.se/en/112-and-other-important-numbers/important-phone-numbers/
|
|
10
|
+
|
|
11
|
+
regional_ndcs_1 = [
|
|
12
|
+
'8' # Stockholm
|
|
13
|
+
]
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
# '7', # Non-geographic - conflicts with mobile
|
|
14
|
-
'8', # Stockholm
|
|
15
|
-
'10', # VOIP
|
|
15
|
+
regional_ndcs_2 = [
|
|
16
16
|
'11', # Norrköping
|
|
17
17
|
'13', # Linköping
|
|
18
18
|
'16', # Eskilstuna-Torshälla
|
|
19
|
-
'18', # Uppsala
|
|
20
|
-
'19', # Örebro-Kumla
|
|
21
|
-
'20', # toll-free
|
|
22
19
|
'21', # Västerås
|
|
23
20
|
'23', # Falun
|
|
24
21
|
'26', # Gävle-Sandviken
|
|
25
|
-
'31', # Göteborg
|
|
26
22
|
'33', # Borås
|
|
27
23
|
'35', # Halmstad
|
|
28
24
|
'36', # Jönköping-Huskvarna
|
|
@@ -30,51 +26,363 @@ ndcs = [
|
|
|
30
26
|
'42', # Helsingborg-Höganäs
|
|
31
27
|
'44', # Kristianstad
|
|
32
28
|
'46', # Lund
|
|
33
|
-
'54', # Karlstad
|
|
34
29
|
'60', # Sundsvall-Timrå
|
|
35
30
|
'63', # Östersund
|
|
36
|
-
'90'
|
|
37
|
-
'77', # Dalarna
|
|
31
|
+
'90' # Umeå; NB: Conflicts with 900 (Premium cost services)
|
|
38
32
|
]
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
'76', # Mobile
|
|
46
|
-
'79', # Mobile
|
|
33
|
+
|
|
34
|
+
large_regional_ndcs_2 = [
|
|
35
|
+
'18', # Uppsala
|
|
36
|
+
'19', # Örebro-Kumla
|
|
37
|
+
'31', # Göteborg
|
|
38
|
+
'54' # Karlstad
|
|
47
39
|
]
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
'
|
|
40
|
+
|
|
41
|
+
regional_ndcs_3 = [
|
|
42
|
+
'120', # Åtvidaberg
|
|
43
|
+
'121', # Söderköping
|
|
44
|
+
'122', # Finspång
|
|
45
|
+
'123', # Valdemarsvik
|
|
46
|
+
'125', # Vikbolandet
|
|
47
|
+
'140', # Tranås
|
|
48
|
+
'141', # Motala
|
|
49
|
+
'142', # Mjöby-Skänninge-Boxholm
|
|
50
|
+
'143', # Vadstena
|
|
51
|
+
'144', # Ödeshög
|
|
52
|
+
'150', # Katrineholm
|
|
53
|
+
'151', # Vingåker
|
|
54
|
+
'152', # Strängnäs
|
|
55
|
+
'155', # Nyköping-Oxelösund
|
|
56
|
+
'156', # Trosa-Vagnhärad
|
|
57
|
+
'157', # Flen Malmköping
|
|
58
|
+
'158', # Gnesta
|
|
59
|
+
'159', # Mariefred
|
|
60
|
+
'171', # Enköping
|
|
61
|
+
'173', # Öregrund-Östhammar
|
|
62
|
+
'174', # Alunda
|
|
63
|
+
'175', # Hallstavik-Rimbo
|
|
64
|
+
'176', # Norrtälje
|
|
65
|
+
'220', # Hallstahammar-Surahammar
|
|
66
|
+
'221', # Köping
|
|
67
|
+
'222', # Skinnskatteberg
|
|
68
|
+
'223', # Fagersta-Norberg
|
|
69
|
+
'224', # Sala-Heby
|
|
70
|
+
'225', # Hedemora-Säter
|
|
71
|
+
'226', # Avesta-Krylbo
|
|
72
|
+
'227', # Kungsör
|
|
73
|
+
'240', # Ludvika-Smedjebacken
|
|
74
|
+
'241', # Gagnef-Floda
|
|
75
|
+
'243', # Borlänge
|
|
76
|
+
'246', # Svärdsjö-Enviken
|
|
77
|
+
'247', # Leksand-Insjön
|
|
78
|
+
'248', # Rättvik
|
|
79
|
+
'250', # Mora-Orsa
|
|
80
|
+
'251', # Älvdalen
|
|
81
|
+
'253', # Idre-Särna
|
|
82
|
+
'258', # Furudal
|
|
83
|
+
'270', # Söderhamn
|
|
84
|
+
'271', # Alfta-Edsbyn
|
|
85
|
+
'278', # Bollnäs
|
|
86
|
+
'280', # Malung
|
|
87
|
+
'281', # Vansbro
|
|
88
|
+
'290', # Hofors-Storvik
|
|
89
|
+
'291', # Hedesunda-Österfärnebo
|
|
90
|
+
'292', # Tärnsjö-Östervåla
|
|
91
|
+
'293', # Tierp-Söderfors
|
|
92
|
+
'294', # Karlholmsbruk-Skärplinge
|
|
93
|
+
'295', # Örbyhus-Dannemora
|
|
94
|
+
'297', # Ockelbo-Hamrånge
|
|
95
|
+
'300', # Kungsbacka
|
|
96
|
+
'301', # Hindås
|
|
97
|
+
'302', # Lerum
|
|
98
|
+
'303', # Kungälv
|
|
99
|
+
'304', # Orust-Tjörn
|
|
100
|
+
'320', # Kinna
|
|
101
|
+
'321', # Ulricehamn
|
|
102
|
+
'322', # Alingsås-Vårgårda
|
|
103
|
+
'325', # Svenljunga-Tranemo
|
|
104
|
+
'340', # Varberg
|
|
105
|
+
'345', # Hyltebruk-Torup
|
|
106
|
+
'346', # Falkenberg
|
|
107
|
+
'370', # Värnamo
|
|
108
|
+
'371', # Gislaved-Anderstorp
|
|
109
|
+
'372', # Ljungby
|
|
110
|
+
'380', # Nässjö
|
|
111
|
+
'381', # Eksjö
|
|
112
|
+
'382', # Sävsjö
|
|
113
|
+
'383', # Vetlanda
|
|
114
|
+
'390', # Gränna
|
|
115
|
+
'392', # Mullsjö
|
|
116
|
+
'393', # Vaggeryd
|
|
117
|
+
'410', # Trelleborg
|
|
118
|
+
'411', # Ystad
|
|
119
|
+
'413', # Eslöv-Höör
|
|
120
|
+
'414', # Simrishamn
|
|
121
|
+
'415', # Hörby
|
|
122
|
+
'416', # Sjöbo
|
|
123
|
+
'417', # Tomelilla
|
|
124
|
+
'418', # Landskrona-Svalöv
|
|
125
|
+
'430', # Laholm
|
|
126
|
+
'431', # Ängelholm-Båstad
|
|
127
|
+
'433', # Markaryd-Strömsnäsbruk
|
|
128
|
+
'435', # Klippan-Perstorp
|
|
129
|
+
'451', # Hässleholm
|
|
130
|
+
'454', # Karlshamn-Olofström
|
|
131
|
+
'455', # Karlskrona
|
|
132
|
+
'456', # Sölvesborg-Bromölla
|
|
133
|
+
'457', # Ronneby
|
|
134
|
+
'459', # Ryd
|
|
135
|
+
'470', # Växjö
|
|
136
|
+
'471', # Emmaboda
|
|
137
|
+
'472', # Alvesta-Rydaholm
|
|
138
|
+
'474', # Åseda-Lenhovda
|
|
139
|
+
'476', # Älmhult
|
|
140
|
+
'477', # Tingsryd
|
|
141
|
+
'478', # Lessebo
|
|
142
|
+
'479', # Osby
|
|
143
|
+
'480', # Kalmar
|
|
144
|
+
'481', # Nybro
|
|
145
|
+
'485', # Öland
|
|
146
|
+
'486', # Torsås
|
|
147
|
+
'490', # Västervik
|
|
148
|
+
'491', # Oskarshamn-Högsby
|
|
149
|
+
'492', # Vimmerby
|
|
150
|
+
'493', # Gamleby
|
|
151
|
+
'494', # Kisa
|
|
152
|
+
'495', # Hultsfred-Virserum
|
|
153
|
+
'496', # Mariannelund
|
|
154
|
+
'498', # Gotland
|
|
155
|
+
'499', # Mönsterås
|
|
156
|
+
'500', # Skövde
|
|
157
|
+
'501', # Mariestad
|
|
158
|
+
'502', # Tidaholm
|
|
159
|
+
'503', # Hjo
|
|
160
|
+
'504', # Tibro
|
|
161
|
+
'505', # Karlsborg
|
|
162
|
+
'506', # Töreboda-Hova
|
|
163
|
+
'510', # Lidköping
|
|
164
|
+
'511', # Skara-Götene
|
|
165
|
+
'512', # Vara-Nossebro
|
|
166
|
+
'513', # Herrljunga
|
|
167
|
+
'514', # Grästorp
|
|
168
|
+
'515', # Falköping
|
|
169
|
+
'520', # Trollhättan
|
|
170
|
+
'521', # Vänerborg
|
|
171
|
+
'522', # Uddevalla
|
|
172
|
+
'523', # Lysekil
|
|
173
|
+
'524', # Munkedal
|
|
174
|
+
'525', # Grebbestad
|
|
175
|
+
'526', # Strömstad
|
|
176
|
+
'528', # Färgelanda
|
|
177
|
+
'530', # Mellerud
|
|
178
|
+
'531', # Bengtsfors
|
|
179
|
+
'532', # Åmål
|
|
180
|
+
'533', # Säffle
|
|
181
|
+
'534', # Ed
|
|
182
|
+
'550', # Kristinehamn
|
|
183
|
+
'551', # Gullspång
|
|
184
|
+
'552', # Deje
|
|
185
|
+
'553', # Molkom
|
|
186
|
+
'554', # Kil
|
|
187
|
+
'555', # Grums
|
|
188
|
+
'560', # Torsby
|
|
189
|
+
'563', # Hagfors-Munkfors
|
|
190
|
+
'564', # Sysslebäck
|
|
191
|
+
'565', # Sunne
|
|
192
|
+
'570', # Arvika
|
|
193
|
+
'571', # Charlottenberg-Åmotfors
|
|
194
|
+
'573', # Årjäng
|
|
195
|
+
'580', # Kopparberg
|
|
196
|
+
'581', # Lindesberg
|
|
197
|
+
'582', # Hallsberg
|
|
198
|
+
'583', # Askersund
|
|
199
|
+
'584', # Laxå
|
|
200
|
+
'585', # Fjugesta-Svartå
|
|
201
|
+
'586', # Karlskoga-Degerfors
|
|
202
|
+
'587', # Nora
|
|
203
|
+
'589', # Arboga
|
|
204
|
+
'590', # Filipstad
|
|
205
|
+
'591', # Hällefors-Grythyttan
|
|
206
|
+
'611', # Härnösand
|
|
207
|
+
'612', # Kramfors
|
|
208
|
+
'613', # Ullånger
|
|
209
|
+
'620', # Sollefteå
|
|
210
|
+
'621', # Junsele
|
|
211
|
+
'622', # Näsåker
|
|
212
|
+
'623', # Ramsele
|
|
213
|
+
'624', # Backe
|
|
214
|
+
'640', # Krokom
|
|
215
|
+
'642', # Lit
|
|
216
|
+
'643', # Hallen-Oviken
|
|
217
|
+
'644', # Hammerdal
|
|
218
|
+
'645', # Föllinge
|
|
219
|
+
'647', # Åre-Järpen
|
|
220
|
+
'650', # Hudiksvall
|
|
221
|
+
'651', # Ljusdal
|
|
222
|
+
'652', # Bergsjö
|
|
223
|
+
'653', # Delsbo
|
|
224
|
+
'657', # Los
|
|
225
|
+
'660', # Örnsköldsvik
|
|
226
|
+
'661', # Bredbyn
|
|
227
|
+
'662', # Björna
|
|
228
|
+
'663', # Husum
|
|
229
|
+
'670', # Strömsund
|
|
230
|
+
'671', # Hoting
|
|
231
|
+
'672', # Gäddede
|
|
232
|
+
'680', # Sveg
|
|
233
|
+
'682', # Rätan
|
|
234
|
+
'684', # Hede-Funäsdalen
|
|
235
|
+
'687', # Svenstavik
|
|
236
|
+
'690', # Ånge
|
|
237
|
+
'691', # Torpshammar
|
|
238
|
+
'692', # Liden
|
|
239
|
+
'693', # Bräcke-Gällö
|
|
240
|
+
'695', # Stugun
|
|
241
|
+
'696', # Hammarstrand
|
|
242
|
+
'910', # Skellefteå
|
|
243
|
+
'911', # Piteå
|
|
244
|
+
'912', # Byske
|
|
245
|
+
'913', # Lövånger
|
|
246
|
+
'914', # Burträsk
|
|
247
|
+
'915', # Bastuträsk
|
|
248
|
+
'916', # Jörn
|
|
249
|
+
'918', # Norsjö
|
|
250
|
+
'920', # Luleå
|
|
251
|
+
'921', # Boden
|
|
252
|
+
'922', # Haparanda
|
|
253
|
+
'923', # Kalix
|
|
254
|
+
'924', # Råneå
|
|
255
|
+
'925', # Lakaträsk
|
|
256
|
+
'926', # Överkalix
|
|
257
|
+
'927', # Övertorneå
|
|
258
|
+
'928', # Harads
|
|
259
|
+
'929', # Älvsbyn
|
|
260
|
+
'930', # Nordmaling
|
|
261
|
+
'932', # Bjurholm
|
|
262
|
+
'933', # Vindeln
|
|
263
|
+
'934', # Robertsfors
|
|
264
|
+
'935', # Vännäs
|
|
265
|
+
'940', # Vilhelmina
|
|
266
|
+
'941', # Åsele
|
|
267
|
+
'942', # Dorotea
|
|
268
|
+
'943', # Fredrika
|
|
269
|
+
'950', # Lycksele
|
|
270
|
+
'951', # Storuman
|
|
271
|
+
'952', # Sorsele
|
|
272
|
+
'953', # Malå
|
|
273
|
+
'954', # Tärnaby
|
|
274
|
+
'960', # Arvidsjaur
|
|
275
|
+
'961', # Arjeplog
|
|
276
|
+
'970', # Gällivare
|
|
277
|
+
'971', # Jokkmokk
|
|
278
|
+
'973', # Porjus
|
|
279
|
+
'975', # Hakkas
|
|
280
|
+
'976', # Vuollerim
|
|
281
|
+
'977', # Korpilombolo
|
|
282
|
+
'978', # Pajala
|
|
283
|
+
'980', # Kiruna
|
|
284
|
+
'981' # Vittangi
|
|
52
285
|
]
|
|
286
|
+
|
|
287
|
+
location_independent_ndcs = [
|
|
288
|
+
'10', # Location independent services (VoIP)
|
|
289
|
+
'70', # Mobile telephony services
|
|
290
|
+
'72', # Mobile telephony services
|
|
291
|
+
'73', # Mobile telephony services
|
|
292
|
+
'74', # Paging services
|
|
293
|
+
'75', # Personal numbering services
|
|
294
|
+
'76', # Mobile telephony services
|
|
295
|
+
'77', # Shared cost services
|
|
296
|
+
'79' # Mobile telephony services
|
|
297
|
+
]
|
|
298
|
+
|
|
53
299
|
service_ndcs = [
|
|
54
|
-
'
|
|
55
|
-
'900', # Premium
|
|
56
|
-
'939', # Premium
|
|
57
|
-
'944'
|
|
300
|
+
'20', # Toll-free services
|
|
301
|
+
'900', # Premium cost services; NB: Conflicts with 90 (Umeå)
|
|
302
|
+
'939', # Premium cost services
|
|
303
|
+
'944' # Premium cost services
|
|
58
304
|
]
|
|
59
|
-
|
|
305
|
+
|
|
306
|
+
mobile_telematic_service_ndcs = ['71']
|
|
307
|
+
fixed_telematic_service_ndcs = ['378']
|
|
308
|
+
operator_specific_ndcs = ['78']
|
|
309
|
+
mass_call_service_ndcs = ['99']
|
|
310
|
+
routing_ndcs = [
|
|
311
|
+
'252', # Routing address - Assigned to Tele2 Sverige AB
|
|
312
|
+
'254', # Routing address – Assigned to Tele2 Sverige AB
|
|
313
|
+
'255', # Routing address – Assigned to Telenor Sverige AB
|
|
314
|
+
'673', # Routing address – Assigned to TeliaSonera Sverige AB
|
|
315
|
+
'674', # Routing address – Assigned to Telenor Sverige AB
|
|
316
|
+
'675', # Routing address – Assigned to Hi3G Access AB
|
|
317
|
+
'676', # Routing address – Assigned to Spring Mobil AB
|
|
318
|
+
'678' # Routing address – Assigned to Götalandsnätet AB
|
|
319
|
+
]
|
|
320
|
+
|
|
321
|
+
misc_ndcs = [
|
|
322
|
+
'649', # Routing address – Assigned to Eniro 118118 AB
|
|
323
|
+
'655', # Sample number (national use)
|
|
324
|
+
'656', # Sample number (national use)
|
|
325
|
+
'958' # Routing address – Assigned to TeliaSonera Sverige AB
|
|
326
|
+
]
|
|
327
|
+
|
|
328
|
+
services = [
|
|
329
|
+
'112', # For emergencies when there is a danger to life, property, or the environment
|
|
330
|
+
'1177', # Healthcare advice for private individuals
|
|
331
|
+
'11313', # National information number for severe accidents and crises
|
|
332
|
+
'11414', # National police number for non-urgent police matters
|
|
333
|
+
'116000' # EU-wide hotline number to report missing children
|
|
334
|
+
]
|
|
335
|
+
|
|
336
|
+
three_digit_service_ndcs = [
|
|
60
337
|
'116', # Psychological Help (116 xxx)
|
|
61
|
-
'118'
|
|
338
|
+
'118' # Number enquiries (118 xxx)
|
|
62
339
|
]
|
|
63
340
|
|
|
64
341
|
Phony.define do
|
|
65
342
|
country '46',
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
343
|
+
trunk('0') |
|
|
344
|
+
match(/^(#{services.join('|')})$/) >> split(0) |
|
|
345
|
+
match(/^(#{three_digit_service_ndcs.join('|')})\d{3}$/) >> split(3) |
|
|
346
|
+
one_of(service_ndcs) >> matched_split( # NB: Must be *before* the regional NDCs due to ambiguity of 0900
|
|
347
|
+
/^\d{4}$/ => [4],
|
|
348
|
+
/^\d{5}$/ => [3, 2],
|
|
349
|
+
/^\d{6}$/ => [2, 2, 2],
|
|
350
|
+
/^\d{7}$/ => [3, 2, 2]
|
|
351
|
+
) |
|
|
352
|
+
one_of(fixed_telematic_service_ndcs) >> split(3, 2, 2) |
|
|
353
|
+
one_of(routing_ndcs) >> split(3, 3, 3) |
|
|
354
|
+
one_of(regional_ndcs_3) >> matched_split(
|
|
355
|
+
/^11\d$/ => [3],
|
|
356
|
+
/^95\d{2}$/ => [4],
|
|
357
|
+
/^\d{5}$/ => [3, 2],
|
|
358
|
+
/^\d{6}$/ => [2, 2, 2]
|
|
359
|
+
) |
|
|
360
|
+
one_of(large_regional_ndcs_2) >> matched_split(
|
|
361
|
+
/^11\d$/ => [3],
|
|
362
|
+
/^95\d{2}$/ => [4],
|
|
363
|
+
/^90\d{3}$/ => [3, 2],
|
|
364
|
+
/^\d{6}$/ => [2, 2, 2],
|
|
365
|
+
/^\d{7}$/ => [3, 2, 2]
|
|
366
|
+
) |
|
|
367
|
+
one_of(regional_ndcs_2) >> matched_split(
|
|
368
|
+
/^11\d$/ => [3],
|
|
369
|
+
/^95\d{2}$/ => [4],
|
|
370
|
+
/^\d{5}$/ => [3, 2],
|
|
371
|
+
/^\d{6}$/ => [2, 2, 2],
|
|
372
|
+
/^\d{7}$/ => [3, 2, 2]
|
|
373
|
+
) |
|
|
374
|
+
one_of(location_independent_ndcs) >> split(3, 2, 2) |
|
|
375
|
+
one_of(mobile_telematic_service_ndcs) >> split(3, 3, 3, 2) |
|
|
376
|
+
one_of(mass_call_service_ndcs) >> split(3, 2) |
|
|
377
|
+
one_of(regional_ndcs_1) >> matched_split(
|
|
378
|
+
/^11\d$/ => [3],
|
|
379
|
+
/^95\d$/ => [3],
|
|
380
|
+
/^95\d{2}$/ => [4],
|
|
381
|
+
/^90\d{3}$/ => [3, 2],
|
|
382
|
+
/^\d{6}$/ => [3, 3],
|
|
383
|
+
/^\d{7}$/ => [3, 2, 2],
|
|
384
|
+
/^\d{8}$/ => [3, 2, 3]
|
|
385
|
+
) |
|
|
386
|
+
one_of(operator_specific_ndcs) >> split(1..11) |
|
|
387
|
+
one_of(misc_ndcs) >> split(1..10)
|
|
80
388
|
end
|
|
@@ -6,22 +6,24 @@
|
|
|
6
6
|
|
|
7
7
|
Phony.define do
|
|
8
8
|
country '886',
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
9
|
+
trunk('0') |
|
|
10
|
+
match(/\A(826)\d{5}\z/) >> split(1, 4) | # 烏坵, start with 0826, plus 5 digits
|
|
11
|
+
match(/\A(836)\d{5}\z/) >> split(1, 4) | # 馬祖, start with 0836, plus 5 digits
|
|
12
|
+
match(/\A(82)\d{6}\z/) >> split(2, 4) | # 金門, start with 082, plus 6 digits
|
|
13
|
+
match(/\A(89)\d{6}\z/) >> split(2, 4) | # 臺東, start with 089, plus 6 digits
|
|
14
|
+
match(/\A(80\d)\d{6}\z/) >> split(3, 4) | # Toll-free number
|
|
15
|
+
match(/\A(8)\d{7}\z/) >> split(3, 4) | # 屏東, start with 08, plus 7 digits
|
|
16
|
+
match(/\A(49)\d{7}\z/) >> split(3, 4) | # 南投, start with 049, plus 7 digits
|
|
17
|
+
one_of(%w[4]) >> matched_split(
|
|
18
|
+
/\A\d{7}\z/ => [3, 4], # 彰化, start with 04, plus 7 digits
|
|
19
|
+
/\A\d+\z/ => [4, 4]
|
|
20
|
+
)| # 臺中, start with 04, plus 8 digits
|
|
21
|
+
match(/\A(37)\d{6}\z/) >> split(2, 4) | # 苗栗, start with 037, plus 6 digits
|
|
22
|
+
match(/\A(3)\d{7}\z/) >> split(3, 4) | # 桃園 新竹 花蓮 宜蘭, start with 03, plus 7 digits
|
|
23
|
+
match(/\A(5)\d{7}\z/) >> split(3, 4) | # 嘉義 雲林, start with 05, plus 7 digits
|
|
24
|
+
match(/\A(6)\d{7}\z/) >> split(3, 4) | # 臺南 澎湖, start with 06, plus 7 digits
|
|
25
|
+
match(/\A(7)\d{7}\z/) >> split(3, 4) | # 高雄, start with 07, plus 7 digits
|
|
26
|
+
match(/\A(2)\d{8}\z/) >> split(4, 4) | # 臺北, start with 02, plus 8 digits
|
|
27
|
+
match(/\A(9\d\d)\d{6}\z/) >> split(3, 3) | # mobile phone, start with 09, plus 8 digits, but local usually show 4-3-3.
|
|
28
|
+
fixed(2) >> split(4, 4) # fallback unknown
|
|
27
29
|
end
|