JapanTelephoneExchangeNumberUtil   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 461
Duplicated Lines 3.47 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 14
c 1
b 0
f 0
lcom 1
cbo 1
dl 16
loc 461
ccs 36
cts 36
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B telephoneNumberToPrefectureCode() 0 31 5
D telephoneNumberToPrefectureCodeStrict() 16 35 9

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
/*
4
 * This file is part of JapanUtil.
5
 *
6
 * (c) Takashi OGAWA
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace NinjaAnija\JapanUtil;
13
14
/**
15
 * 日本語文字列を扱うためのユーティリティ.
16
 *
17
 * @author Takashi OGAWA
18
 *
19
 */
20
class JapanTelephoneExchangeNumberUtil
21
{
22
    private static $telephoneExchangeNumberPrefectureCodeMap = [
23
        9969 => [46],
24
        9913 => [46],
25
        9912 => [46],
26
        9802 => [47],
27
        9496 => [40],
28
        8514 => [32],
29
        8512 => [32],
30
        8477 => [34],
31
        8396 => [35],
32
        8388 => [35],
33
        8387 => [35],
34
        7468 => [29],
35
        5979 => [24],
36
        5769 => [21],
37
        4998 => [13],
38
        4996 => [13],
39
        4994 => [13],
40
        4992 => [13],
41
        1658 => [1],
42
        1656 => [1],
43
        1655 => [1],
44
        1654 => [1],
45
        1648 => [1],
46
        1635 => [1],
47
        1634 => [1],
48
        1632 => [1],
49
        1587 => [1],
50
        1586 => [1],
51
        1564 => [1],
52
        1558 => [1],
53
        1547 => [1],
54
        1466 => [1],
55
        1457 => [1],
56
        1456 => [1],
57
        1398 => [1],
58
        1397 => [1],
59
        1392 => [1],
60
        1377 => [1],
61
        1374 => [1],
62
        1372 => [1],
63
        1267 => [1],
64
        997 => [46],
65
        996 => [46],
66
        995 => [46],
67
        994 => [46],
68
        993 => [46],
69
        987 => [45],
70
        986 => [46, 45],
71
        985 => [45],
72
        984 => [45],
73
        983 => [45],
74
        982 => [45],
75
        980 => [47],
76
        979 => [44, 40],
77
        978 => [44],
78
        977 => [44],
79
        974 => [44],
80
        973 => [44],
81
        972 => [44],
82
        969 => [43],
83
        968 => [43],
84
        967 => [43],
85
        966 => [43],
86
        965 => [43],
87
        964 => [43],
88
        959 => [42],
89
        957 => [42],
90
        956 => [42],
91
        955 => [41, 42],
92
        954 => [41],
93
        952 => [41],
94
        950 => [42],
95
        949 => [40],
96
        948 => [40],
97
        947 => [40],
98
        946 => [40],
99
        944 => [43, 40],
100
        943 => [40],
101
        942 => [41, 40],
102
        940 => [40],
103
        930 => [40],
104
        920 => [42],
105
        898 => [38],
106
        897 => [38],
107
        896 => [38, 37],
108
        895 => [38],
109
        894 => [38],
110
        893 => [38],
111
        892 => [38],
112
        889 => [39],
113
        887 => [39],
114
        885 => [36],
115
        884 => [36],
116
        883 => [36],
117
        880 => [39],
118
        879 => [37],
119
        877 => [37],
120
        875 => [37],
121
        869 => [33],
122
        868 => [33],
123
        867 => [33],
124
        866 => [33],
125
        865 => [33],
126
        863 => [33],
127
        859 => [31],
128
        858 => [31],
129
        857 => [31],
130
        856 => [32],
131
        855 => [32],
132
        854 => [32],
133
        853 => [32],
134
        852 => [32],
135
        848 => [34],
136
        847 => [34],
137
        846 => [34],
138
        845 => [34],
139
        838 => [35],
140
        837 => [35],
141
        836 => [35],
142
        835 => [35],
143
        834 => [35],
144
        833 => [35],
145
        829 => [34],
146
        827 => [34, 35],
147
        826 => [34],
148
        824 => [34],
149
        823 => [34],
150
        820 => [35],
151
        799 => [28],
152
        798 => [28],
153
        797 => [28],
154
        796 => [28],
155
        795 => [28],
156
        794 => [28],
157
        791 => [28],
158
        790 => [28],
159
        779 => [18],
160
        778 => [18],
161
        776 => [18],
162
        774 => [26],
163
        773 => [26],
164
        772 => [26],
165
        771 => [26],
166
        770 => [18],
167
        768 => [17],
168
        767 => [17],
169
        766 => [16],
170
        765 => [16],
171
        763 => [16],
172
        761 => [17],
173
        749 => [25],
174
        748 => [25],
175
        747 => [29],
176
        746 => [29],
177
        745 => [29],
178
        744 => [29],
179
        743 => [27, 26, 29],
180
        742 => [29],
181
        740 => [25],
182
        739 => [30],
183
        738 => [30],
184
        737 => [30],
185
        736 => [30],
186
        735 => [24, 30],
187
        725 => [27],
188
        721 => [27],
189
        599 => [24],
190
        598 => [24],
191
        597 => [24],
192
        596 => [24],
193
        595 => [24],
194
        594 => [24],
195
        587 => [23],
196
        586 => [23, 21],
197
        585 => [21],
198
        584 => [21],
199
        581 => [21],
200
        578 => [21],
201
        577 => [21],
202
        576 => [21],
203
        575 => [21],
204
        574 => [21],
205
        573 => [21, 20],
206
        572 => [21],
207
        569 => [23],
208
        568 => [23],
209
        567 => [23, 24],
210
        566 => [23],
211
        565 => [23],
212
        564 => [23],
213
        563 => [23],
214
        562 => [23],
215
        561 => [23],
216
        558 => [22],
217
        557 => [22],
218
        556 => [19],
219
        555 => [19],
220
        554 => [19],
221
        553 => [19],
222
        551 => [19],
223
        550 => [22],
224
        548 => [22],
225
        547 => [22],
226
        545 => [22],
227
        544 => [22],
228
        539 => [22],
229
        538 => [22],
230
        537 => [22],
231
        536 => [23],
232
        533 => [23],
233
        532 => [23],
234
        531 => [23],
235
        495 => [11],
236
        494 => [11],
237
        493 => [11],
238
        480 => [11],
239
        479 => [8, 12],
240
        478 => [12],
241
        476 => [12],
242
        475 => [12],
243
        470 => [12],
244
        467 => [14],
245
        466 => [14],
246
        465 => [14, 22],
247
        463 => [14],
248
        460 => [14, 22],
249
        439 => [12],
250
        438 => [12],
251
        436 => [12],
252
        428 => [13, 19],
253
        422 => [13],
254
        299 => [8],
255
        297 => [8],
256
        296 => [8, 9],
257
        295 => [8],
258
        294 => [8],
259
        293 => [8],
260
        291 => [8],
261
        289 => [9],
262
        288 => [9],
263
        287 => [9],
264
        285 => [9],
265
        284 => [10, 9],
266
        283 => [9],
267
        282 => [9],
268
        280 => [8, 11, 9],
269
        279 => [10],
270
        278 => [10],
271
        277 => [10],
272
        276 => [10, 11],
273
        274 => [10, 11],
274
        270 => [10],
275
        269 => [20],
276
        268 => [20],
277
        267 => [20],
278
        266 => [20],
279
        265 => [20],
280
        264 => [20],
281
        263 => [20],
282
        261 => [20],
283
        260 => [20],
284
        259 => [15],
285
        258 => [15],
286
        257 => [15],
287
        256 => [15],
288
        255 => [15],
289
        254 => [15],
290
        250 => [15],
291
        248 => [7],
292
        247 => [7],
293
        246 => [7],
294
        244 => [7],
295
        243 => [7],
296
        242 => [7],
297
        241 => [7],
298
        240 => [7],
299
        238 => [6],
300
        237 => [6],
301
        235 => [6],
302
        234 => [6],
303
        233 => [6],
304
        229 => [4],
305
        228 => [4],
306
        226 => [4],
307
        225 => [4],
308
        224 => [4],
309
        223 => [4],
310
        220 => [4],
311
        198 => [3],
312
        197 => [3],
313
        195 => [3],
314
        194 => [3],
315
        193 => [3],
316
        192 => [3],
317
        191 => [3],
318
        187 => [5],
319
        186 => [5],
320
        185 => [5],
321
        184 => [5],
322
        183 => [5],
323
        182 => [5],
324
        179 => [2],
325
        178 => [2],
326
        176 => [2],
327
        175 => [2],
328
        174 => [2],
329
        173 => [2],
330
        172 => [2],
331
        167 => [1],
332
        166 => [1],
333
        165 => [1],
334
        164 => [1],
335
        163 => [1],
336
        162 => [1],
337
        158 => [1],
338
        157 => [1],
339
        156 => [1],
340
        155 => [1],
341
        154 => [1],
342
        153 => [1],
343
        152 => [1],
344
        146 => [1],
345
        145 => [1],
346
        144 => [1],
347
        143 => [1],
348
        142 => [1],
349
        139 => [1],
350
        138 => [1],
351
        137 => [1],
352
        136 => [1],
353
        135 => [1],
354
        134 => [1],
355
        133 => [1],
356
        126 => [1],
357
        125 => [1],
358
        124 => [1],
359
        123 => [1],
360
        99 => [46],
361
        98 => [47],
362
        97 => [44],
363
        96 => [43],
364
        95 => [42],
365
        93 => [40],
366
        92 => [40],
367
        89 => [38],
368
        88 => [36, 39],
369
        87 => [37],
370
        86 => [33],
371
        84 => [34],
372
        83 => [35],
373
        82 => [34],
374
        79 => [28],
375
        78 => [28],
376
        77 => [26, 25],
377
        76 => [17, 16],
378
        75 => [27, 26],
379
        73 => [30],
380
        72 => [27, 28],
381
        59 => [24],
382
        58 => [21],
383
        55 => [19, 22],
384
        54 => [22],
385
        53 => [22],
386
        52 => [23],
387
        49 => [11],
388
        48 => [11],
389
        47 => [12],
390
        46 => [14],
391
        45 => [14],
392
        44 => [14, 13],
393
        43 => [12],
394
        42 => [13, 11, 14],
395
        29 => [8],
396
        28 => [9],
397
        27 => [10],
398
        26 => [20],
399
        25 => [15],
400
        24 => [7],
401
        23 => [6],
402
        22 => [4],
403
        19 => [3],
404
        18 => [5],
405
        17 => [2],
406
        15 => [1],
407
        11 => [1],
408
        6 => [27, 28],
409
        4 => [11, 12],
410
        3 => [13],
411
    ];
412
413 3
    public static function telephoneNumberToPrefectureCode($tel)
414
    {
415 3
        $tel = JapanStringUtil::standardize($tel);
416 3
        $tel = implode(explode('-', $tel));
417
418 3
        $needle = @substr($tel, 1, 4);
419
420 3
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
421 1
            return self::$telephoneExchangeNumberPrefectureCodeMap[$needle][0];
422
        }
423
424 3
        $needle = @substr($tel, 1, 3);
425
426 3
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
427 1
            return self::$telephoneExchangeNumberPrefectureCodeMap[$needle][0];
428
        }
429
430 3
        $needle = @substr($tel, 1, 2);
431
432 3
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
433 1
            return self::$telephoneExchangeNumberPrefectureCodeMap[$needle][0];
434
        }
435
436 3
        $needle = @substr($tel, 1, 1);
437
438 3
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
439 2
            return self::$telephoneExchangeNumberPrefectureCodeMap[$needle][0];
440
        }
441
442 1
        return null;
443
    }
444
445 3
    public static function telephoneNumberToPrefectureCodeStrict($tel)
446
    {
447 3
        $tel = JapanStringUtil::standardize($tel);
448 3
        $tel = implode(explode('-', $tel));
449
450 3
        $needle = @substr($tel, 1, 4);
451
452 3 View Code Duplication
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
453 1
            $result = self::$telephoneExchangeNumberPrefectureCodeMap[$needle];
454 1
            return count($result) > 1 ? null : $result[0];
455
        }
456
457 3
        $needle = @substr($tel, 1, 3);
458
459 3 View Code Duplication
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
460 1
            $result = self::$telephoneExchangeNumberPrefectureCodeMap[$needle];
461 1
            return count($result) > 1 ? null : $result[0];
462
        }
463
464 3
        $needle = @substr($tel, 1, 2);
465
466 3 View Code Duplication
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
467 1
            $result = self::$telephoneExchangeNumberPrefectureCodeMap[$needle];
468 1
            return count($result) > 1 ? null : $result[0];
469
        }
470
471 3
        $needle = @substr($tel, 1, 1);
472
473 3 View Code Duplication
        if (isset(self::$telephoneExchangeNumberPrefectureCodeMap[$needle])) {
474 2
            $result = self::$telephoneExchangeNumberPrefectureCodeMap[$needle];
475 2
            return count($result) > 1 ? null : $result[0];
476
        }
477
478 1
        return null;
479
    }
480
}
481