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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +117 -0
  3. data/lib/phony/config.rb +25 -26
  4. data/lib/phony/countries/argentina.rb +352 -0
  5. data/lib/phony/countries/austria.rb +73 -74
  6. data/lib/phony/countries/bangladesh.rb +27 -28
  7. data/lib/phony/countries/belarus.rb +110 -111
  8. data/lib/phony/countries/brazil.rb +93 -93
  9. data/lib/phony/countries/cambodia.rb +10 -14
  10. data/lib/phony/countries/china.rb +22 -18
  11. data/lib/phony/countries/croatia.rb +6 -5
  12. data/lib/phony/countries/georgia.rb +84 -84
  13. data/lib/phony/countries/germany.rb +4067 -4068
  14. data/lib/phony/countries/guinea.rb +8 -8
  15. data/lib/phony/countries/india.rb +31 -34
  16. data/lib/phony/countries/indonesia.rb +57 -46
  17. data/lib/phony/countries/ireland.rb +10 -9
  18. data/lib/phony/countries/italy.rb +79 -60
  19. data/lib/phony/countries/japan.rb +456 -406
  20. data/lib/phony/countries/kyrgyzstan.rb +109 -109
  21. data/lib/phony/countries/latvia.rb +34 -34
  22. data/lib/phony/countries/libya.rb +109 -107
  23. data/lib/phony/countries/malaysia.rb +12 -12
  24. data/lib/phony/countries/moldova.rb +42 -42
  25. data/lib/phony/countries/montenegro.rb +24 -20
  26. data/lib/phony/countries/myanmar.rb +39 -39
  27. data/lib/phony/countries/namibia.rb +35 -29
  28. data/lib/phony/countries/nepal.rb +60 -62
  29. data/lib/phony/countries/netherlands.rb +13 -13
  30. data/lib/phony/countries/pakistan.rb +135 -111
  31. data/lib/phony/countries/paraguay.rb +135 -135
  32. data/lib/phony/countries/russia_kazakhstan_abkhasia_south_ossetia.rb +125 -128
  33. data/lib/phony/countries/saudi_arabia.rb +5 -5
  34. data/lib/phony/countries/serbia.rb +48 -36
  35. data/lib/phony/countries/somalia.rb +18 -18
  36. data/lib/phony/countries/south_korea.rb +16 -13
  37. data/lib/phony/countries/sweden.rb +356 -48
  38. data/lib/phony/countries/taiwan.rb +20 -18
  39. data/lib/phony/countries/tajikistan.rb +70 -70
  40. data/lib/phony/countries/turkmenistan.rb +65 -65
  41. data/lib/phony/countries/ukraine.rb +607 -607
  42. data/lib/phony/countries/united_kingdom.rb +66 -66
  43. data/lib/phony/countries/uruguay.rb +40 -41
  44. data/lib/phony/countries/vietnam.rb +20 -14
  45. data/lib/phony/countries/zimbabwe.rb +31 -31
  46. data/lib/phony/countries.rb +509 -453
  47. data/lib/phony/country.rb +50 -44
  48. data/lib/phony/country_codes.rb +77 -57
  49. data/lib/phony/dsl.rb +25 -28
  50. data/lib/phony/local_splitters/fixed.rb +24 -29
  51. data/lib/phony/local_splitters/regex.rb +30 -31
  52. data/lib/phony/national_code.rb +7 -10
  53. data/lib/phony/national_splitters/default.rb +9 -11
  54. data/lib/phony/national_splitters/dsl.rb +8 -18
  55. data/lib/phony/national_splitters/fixed.rb +12 -15
  56. data/lib/phony/national_splitters/none.rb +8 -14
  57. data/lib/phony/national_splitters/regex.rb +13 -17
  58. data/lib/phony/national_splitters/variable.rb +37 -38
  59. data/lib/phony/trunk_code.rb +23 -23
  60. data/lib/phony/vanity.rb +12 -13
  61. data/lib/phony.rb +84 -83
  62. metadata +14 -45
  63. data/README.textile +0 -112
  64. data/spec/functional/config_spec.rb +0 -44
  65. data/spec/functional/plausibility_spec.rb +0 -608
  66. data/spec/lib/phony/countries_spec.rb +0 -1391
  67. data/spec/lib/phony/country_codes_spec.rb +0 -203
  68. data/spec/lib/phony/country_spec.rb +0 -84
  69. data/spec/lib/phony/dsl_spec.rb +0 -24
  70. data/spec/lib/phony/local_splitters/fixed_spec.rb +0 -56
  71. data/spec/lib/phony/local_splitters/regex_spec.rb +0 -97
  72. data/spec/lib/phony/national_code_spec.rb +0 -91
  73. data/spec/lib/phony/national_splitters/default_spec.rb +0 -34
  74. data/spec/lib/phony/national_splitters/fixed_spec.rb +0 -49
  75. data/spec/lib/phony/national_splitters/none_spec.rb +0 -28
  76. data/spec/lib/phony/national_splitters/regex_spec.rb +0 -23
  77. data/spec/lib/phony/national_splitters/variable_spec.rb +0 -39
  78. data/spec/lib/phony/vanity_spec.rb +0 -30
  79. data/spec/lib/phony_spec.rb +0 -70
@@ -5,39 +5,51 @@
5
5
 
6
6
  Phony.define do
7
7
  country '381',
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(230)) >> matched_split(
12
- /\A\d{4}\z/ => [4],
13
- /\A\d+\z/ => [3,2]) |
14
- one_of(%w(11 21)) >> matched_split(
15
- /\A\d{6}\z/ => [3,3],
16
- /\A\d+\z/ => [3,4]) |
17
- one_of(%w(26 31 35)) >> split(3,3) |
18
- 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(
19
- /\A\d{5}\z/ => [3,2],
20
- /\A\d+\z/ => [3,3]) |
21
- one_of(%w(72)) >> split(3,3) | # ISP
22
- one_of(%w(60 61 68 69)) >> matched_split(
23
- /\A\d{3}\z/ => [3],
24
- /\A\d{7}\z/ => [3,4],
25
- /\A\d+\z/ => [3,3,4]) | # mobile, voicemail (mobile)
26
- one_of(%w(66 63)) >> matched_split(
27
- /\A\d{3}\z/ => [3],
28
- /\A\d{6}\z/ => [3,3],
29
- /\A\d{7}\z/ => [3,4],
30
- /\A\d+\z/ => [3,3,4]) | # mobile, voicemail (mobile)
31
- one_of(%w(62 64 65)) >> matched_split(
32
- /\A\d{2}\z/ => [2],
33
- /\A\d{3}\z/ => [3],
34
- /\A\d{6}\z/ => [3,3],
35
- /\A\d{7}\z/ => [3,4],
36
- /\A\d+\z/ => [3,3,4]) | # mobile, voicemail (mobile)
37
- one_of(%w(70)) >> split(3,3) | # universal access
38
- one_of(%w(42 78)) >> split(3,3) | # premium rate
39
- one_of(%w(9)) >> split(3,4) | # premium rate
40
- fixed(2) >> matched_split(
41
- /\A\d{5}\z/ => [3,2],
42
- /\A\d+\z/ => [3,3])
43
- end
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
- 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)
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(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 134 141 182 188)
13
- # NOTE was:
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(10 11 12 13 14 15 16 17 18 19)
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
- trunk('0') |
21
- match(/^(#{special.join("|")})$/) >> split(3,3) | # Special actually don't need to be split – but better err.
22
- one_of(*mobile) >> split(4,4) |
23
- one_of('2') >> matched_split(
24
- /\A\d{7}\z/ => [3,4],
25
- /\A\d{8}\z/ => [4,4]) | # Seoul, also includes "services".
26
- fixed(2) >> matched_split(
27
- /\A\d{7}\z/ => [3,4],
28
- /\A\d{8}\z/ => [4,4]) # Rest of cities
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 from length 2 to 3.
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
- ndcs = [
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', # Umeå
37
- '77', # Dalarna
31
+ '90' # Umeå; NB: Conflicts with 900 (Premium cost services)
38
32
  ]
39
- mobile = [
40
- '70', # Mobile
41
- '71', # Telematics
42
- '72', # Mobile
43
- '73', # Mobile
44
- '74', # Pagers
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
- services = [
49
- '112', # Emergency Service
50
- '1177', # Health Care Advice
51
- '11414', # Police
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
- '99', # Premium Rate
55
- '900', # Premium Rate
56
- '939', # Premium Rate
57
- '944', # Premium Rate
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
- three_digit_service = [
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', # Number enquiries (118 xxx)
338
+ '118' # Number enquiries (118 xxx)
62
339
  ]
63
340
 
64
341
  Phony.define do
65
342
  country '46',
66
- trunk('0') |
67
- match(/^(#{services.join('|')})$/) >> split(0) |
68
- one_of(service_ndcs) >> split(3,3) |
69
- match(/^(#{three_digit_service.join('|')})\d{3}$/) >> split(3) |
70
- one_of(ndcs + mobile) >> matched_split(
71
- /^\d{5}$/ => [3, 2],
72
- /^\d{6}$/ => [2, 2, 2],
73
- /^\d{7}$/ => [3, 2, 2],
74
- /^\d{8}$/ => [3, 2, 3]
75
- ) |
76
- fixed(3) >> matched_split(
77
- /^\d{5}$/ => [3, 2],
78
- /^\d{6}$/ => [2, 2, 2]
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
- 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(8)\d{7}\z/) >> split(3,4) | # 屏東, start with 08, plus 7 digits
15
- match(/\A(49)\d{7}\z/) >> split(3,4) | # 南投, start with 049, plus 7 digits
16
- one_of(%w(4)) >> matched_split(
17
- /\A\d{7}\z/ => [3,4], # 彰化, start with 04, plus 7 digits
18
- /\A\d+\z/ => [4,4])| # 臺中, start with 04, plus 8 digits
19
- match(/\A(37)\d{6}\z/) >> split(2,4) | # 苗栗, start with 037, plus 6 digits
20
- match(/\A(3)\d{7}\z/) >> split(3,4) | # 桃園 新竹 花蓮 宜蘭, start with 03, plus 7 digits
21
- match(/\A(5)\d{7}\z/) >> split(3,4) | # 嘉義 雲林, start with 05, plus 7 digits
22
- match(/\A(6)\d{7}\z/) >> split(3,4) | # 臺南 澎湖, start with 06, plus 7 digits
23
- match(/\A(7)\d{7}\z/) >> split(3,4) | # 高雄, start with 07, plus 7 digits
24
- match(/\A(2)\d{8}\z/) >> split(4,4) | # 臺北, start with 02, plus 8 digits
25
- 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.
26
- fixed(2) >> split(4,4) # fallback unknown
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