File Coverage

blib/lib/Number/Phone/BR/Areas.pm
Criterion Covered Total %
statement 27 27 100.0
branch 6 6 100.0
condition n/a
subroutine 7 7 100.0
pod 2 2 100.0
total 42 42 100.0


line stmt bran cond sub pod time code
1             package Number::Phone::BR::Areas;
2 5     5   25071 use warnings;
  5         9  
  5         145  
3 5     5   23 use strict;
  5         10  
  5         174  
4 5     5   24 use utf8;
  5         11  
  5         37  
5 5     5   137 use base 'Exporter';
  5         9  
  5         2946  
6              
7             our $VERSION = '0.001'; # VERSION
8              
9             our @EXPORT_OK = qw/
10             code2name
11             mobile_phone_digits_by_area
12             /;
13              
14             my %TABLE = (
15             11 => 'SP - Região Metropolitana de São Paulo',
16             12 => 'SP - São José dos Campos e Região',
17             13 => 'SP - Região Metropolitana da Baixada Santista',
18             14 => 'SP - Bauru, Jaú, Marília, Botucatu e Região',
19             15 => 'SP - Sorocaba e Região',
20             16 => 'SP - Ribeirão Preto, São Carlos, Araraquara e Região',
21             17 => 'SP - São José do Rio Preto e Região',
22             18 => 'SP - Presidente Prudente, Araçatuba e Região',
23             19 => 'SP - Região Metropolitana de Campinas',
24             21 => 'RJ - Região Metropolitana do Rio de Janeiro',
25             22 => 'RJ - Campos dos Goytacazes e Região',
26             24 => 'RJ - Volta Redonda, Petrópolis e Região',
27             27 => 'ES - Região Metropolitana de Vitória',
28             28 => 'ES - Cachoeiro de Itapemirim e Região',
29             31 => 'MG - Região Metropolitana de Belo Horizonte',
30             32 => 'MG - Juiz de Fora e Região',
31             33 => 'MG - Governador Valadares e Região',
32             34 => 'MG - Uberlândia e região',
33             35 => 'MG - Poços de Caldas, Pouso Alegre, Varginha e Região',
34             37 => 'MG - Divinópolis, Itaúna e Região',
35             38 => 'MG - Montes Claros e Região',
36             41 => 'PR - Região Metropolitana de Curitiba',
37             42 => 'PR - Ponta Grossa e Região',
38             43 => 'PR - Londrina e Região',
39             44 => 'PR - Maringá e Região',
40             45 => 'PR - Cascavel e Região',
41             46 => 'PR - Francisco Beltrão, Pato Branco e Região',
42             47 => 'SC - Joinville, Blumenau, Balneário Camboriú e Região',
43             48 => 'SC - Região Metropolitana de Florianópolis e Criciúma',
44             49 => 'SC - Chapecó, Lages e Região',
45             51 => 'RS - Região Metropolitana de Porto Alegre',
46             53 => 'RS - Pelotas e Região',
47             54 => 'RS - Caxias do Sul e Região',
48             55 => 'RS - Santa Maria e Região',
49             61 => 'DF - Brasília e Região',
50             62 => 'GO - Região Metropolitana de Goiânia',
51             63 => 'Tocantins',
52             64 => 'GO - Rio Verde e Região',
53             65 => 'MT - Região Metropolitana de Cuiabá',
54             66 => 'MT',
55             67 => 'Mato Grosso do Sul',
56             68 => 'Acre',
57             69 => 'Rondônia',
58             71 => 'BA - Região Metropolitana de Salvador',
59             73 => 'BA - Itabuna, Ilhéus e Região',
60             74 => 'BA - Juazeiro e Região',
61             75 => 'BA - Feira de Santana e Região',
62             77 => 'BA - Vitória da Conquista e Região',
63             79 => 'Sergipe',
64             81 => 'Pernambuco',
65             82 => 'Alagoas',
66             83 => 'Paraíba',
67             84 => 'Rio Grande do Norte',
68             85 => 'CE - Região Metropolitana de Fortaleza',
69             86 => 'PI - Região de Teresina',
70             87 => 'PE - Região de Petrolina',
71             88 => 'CE - Região de Juazeiro do Norte',
72             89 => 'PI - Região de Picos e Floriano',
73             91 => 'PA - Região Metropolitana de Belém',
74             92 => 'AM - Região de Manaus',
75             93 => 'PA - Região de Santarém',
76             94 => 'PA - Região de Marabá',
77             95 => 'RR - Todos os municípios do estado',
78             96 => 'Amapá',
79             97 => 'AM - Região de Tefé e Coari',
80             98 => 'MA - Região Metropolitana de São Luís',
81             99 => 'MA - Região de Imperatriz',
82             );
83              
84 16     16 1 166 sub code2name { $TABLE{ "$_[0]" } }
85              
86             sub mobile_phone_digits_by_area {
87 66     66 1 2500 my ($area) = @_;
88              
89 66         161 my $current_year = _get_current_year();
90              
91             # as of today, in these area codes, all mobile phones have 9 digits:
92 66         248 my %nine_digits = map { $_ => 1 } qw/
  924         1793  
93             11 12 13 14 15 16 17 18 19
94             21 22 24 27 28
95             /;
96              
97 66 100       473 return 9 if $nine_digits{$area};
98              
99 36         341 my %codes_by_year = (
100             2014, [ qw/91 92 93 94 95 96 97 98 99/ ],
101             2015, [ qw/31 32 33 34 35 37 38 71 73 74 75 77 79 81 82 83 84 85 86 87 88 89/ ],
102             2016, [ qw/41 42 43 44 45 46 47 48 49 51 53 54 55 61 62 63 64 65 66 67 68 69/ ],
103             );
104              
105 36         168 for my $year (sort keys %codes_by_year) {
106 60 100       166 last if $current_year <= $year;
107              
108 42         52 for (@{ $codes_by_year{$year} }) {
  42         100  
109 573         962 $nine_digits{$_} = 1;
110             }
111              
112 42 100       313 return 9 if $nine_digits{$area};
113             }
114              
115 18         166 return 8;
116             }
117              
118 10     10   897 sub _get_current_year { 1900 + (localtime(time()))[5] }
119              
120             1;
121              
122             __END__