-
Notifications
You must be signed in to change notification settings - Fork 12
/
index.js
98 lines (92 loc) · 2.66 KB
/
index.js
1
2
3
4
5
6
7
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
'use strict'
// Retorna o código de um dado município (string de 7 dígitos)
// estado é uma string de 2 caracteres ('RN') ou o nome do estado ('Santa Catarina')
// municipio é uma string
// A busca não leva em consideração acentos, maíusculas/minúsculas ou caracteres especiais,
// ou seja, 'sp', 'Sp', 'SP', 'Sao-Paulo', 'SãoPaulo' representam o mesmo estado
// Retorna string vazia se não encontrado
module.exports = function (estado, municipio) {
estado = module.exports.normalizar(estado)
municipio = module.exports.normalizar(municipio)
if (estado.length !== 2) {
// 'SAOPAULO' -> 'SP'
estado = module.exports.estados[estado]
}
return (module.exports.dados[estado] || {})[municipio] || ''
}
// Remove acentos, coloca tudo em caixa alta e remove outros caracteres
// Ex: 'São Paulo' -> 'SAOPAULO'
// Isso é usado para facilitar comparações normalizar('São Paulo') === normalizar('sao-paulo')
module.exports.normalizar = function (str) {
return String(str).replace(/[áàãâäÁÀÃÂÄ]/g, 'A')
.replace(/[éèêëÉÈÊË]/g, 'E')
.replace(/[íìîïÍÌÎÏ]/g, 'I')
.replace(/[óòõôöÓÒÕÔÖ]/g, 'O')
.replace(/[úùûüÚÙÛÜ]/g, 'U')
.replace(/[ñÑ]/g, 'N')
.replace(/[çÇ]/g, 'C')
.toUpperCase()
.replace(/[^A-Z]/g, '')
}
// dados[siglaDoEstado][nomeMunicipioNormalizado] = codigo (string de 7 dígitos)
var path = require('path').join(__dirname, 'dados.json')
module.exports.dados = JSON.parse(require('fs').readFileSync(path, 'utf8'))
// Map de:
// nome de estado normalizado -> sigla
// sigla -> nome de estado não normalizado
module.exports.estados = {
'ACRE': 'AC',
'ALAGOAS': 'AL',
'AMAPA': 'AP',
'AMAZONAS': 'AM',
'BAHIA': 'BA',
'CEARA': 'CE',
'DISTRITOFEDERAL': 'DF',
'ESPIRITOSANTO': 'ES',
'GOIAS': 'GO',
'MARANHAO': 'MA',
'MATOGROSSO': 'MT',
'MATOGROSSODOSUL': 'MS',
'MINASGERAIS': 'MG',
'PARANA': 'PR',
'PARAIBA': 'PB',
'PARA': 'PA',
'PERNAMBUCO': 'PE',
'PIAUI': 'PI',
'RIOGRANDEDONORTE': 'RN',
'RIOGRANDEDOSUL': 'RS',
'RIODEJANEIRO': 'RJ',
'RONDONIA': 'RO',
'RORAIMA': 'RR',
'SANTACATARINA': 'SC',
'SERGIPE': 'SE',
'SAOPAULO': 'SP',
'TOCANTINS': 'TO',
'AC': 'Acre',
'AL': 'Alagoas',
'AP': 'Amapá',
'AM': 'Amazonas',
'BA': 'Bahia',
'CE': 'Ceará',
'DF': 'Distrito Federal',
'ES': 'Espírito Santo',
'GO': 'Goiás',
'MA': 'Maranhão',
'MT': 'Mato Grosso',
'MS': 'Mato Grosso do Sul',
'MG': 'Minas Gerais',
'PR': 'Paraná',
'PB': 'Paraíba',
'PA': 'Pará',
'PE': 'Pernambuco',
'PI': 'Piauí',
'RN': 'Rio Grande do Norte',
'RS': 'Rio Grande do Sul',
'RJ': 'Rio de Janeiro',
'RO': 'Rondônia',
'RR': 'Roraima',
'SC': 'Santa Catarina',
'SE': 'Sergipe',
'SP': 'São Paulo',
'TO': 'Tocantins'
}