-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvalidatuga.js
205 lines (185 loc) · 5.49 KB
/
validatuga.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
"use strict";
//Dados PT
const {
indicativosTlfFixoPT,
indicativosTelemovel,
validationSets,
codigosPostal
} = require("./data");
//Utilitários
const { soNumeros } = require("./util");
const Validatuga = {
//Validações comuns
Comuns: {
/**
* Verifica se é um endereço de email válido.
* @param {string} email recebe um endereço de email.
* @returns true se for um email válido.
*/
emailVal: function (email) {
const padrao = /^([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})$/; //regex
return padrao.test(email.trim());
},
/**
* Verifica se o input é composto apenas por caracteres a-z e A-Z.
* @param {string} input recebe uma cadeia de caracteres.
* @returns true se o input é composto apenas por caracteres a-z e A-Z.
*/
soLetras: function (input) {
const padrao = /^[a-zA-Z]*$/;
return padrao.test(input.trim());
},
},
/**
* Validações de dados de Portugal como numeros
* de telefone, CC, telemovel, num etc...
*/
PT: {
/**
* Valida telefone fixo Local.
* @param {string} num numero de telefone fixo(PT).
* @returns devolve verdadeiro se for um numero de telefone fixo local válido.
*/
telefoneFixoVal: function (num) {
const tamanho = num.length === 9;
const listaDeIndicativos = indicativosTlfFixoPT.map((i) => {
return i[1];
});
let indicativoValido = false;
for (let i of listaDeIndicativos) {
if (num.startsWith(i)) {
indicativoValido = true;
break;
}
}
return tamanho && soNumeros(num) && indicativoValido;
},
/**
* Valida numero de telemovel.
* @param {string} num Recebe um numeros de telemovel(PT).
* @returns true se for um número válido.
*/
telemovelVal: function (num) {
const tamanho = num.length === 9;
const listaDeIndicativos = indicativosTelemovel.map((i) => {
return i[1];
});
let indicativoValido = false;
for (let i of listaDeIndicativos) {
if (num.startsWith(i)) {
indicativoValido = true;
break;
}
}
return tamanho && soNumeros(num) && indicativoValido;
},
//SEM TESTES
/**
* Devolve o nome da operadora do numero fornecido.
* @param {string} num Recebe um numero de telemovel(PT).
* @returns nome da operadora (ex. 'meo', 'nos', 'vodafone').
*/
telemovelOp: function (num) {
const invalido = false;
if (this.telemovelVal(num)) {
for (const arr of indicativosTelemovel) {
if (num.startsWith(arr[1])) return arr[0];
}
return invalido;
}
return invalido;
},
/**
* Valida código postal (PT)
* @param {string} cp Recebe um codigo postal no seguinte formato: ('8100')
* @returns true se for um código postal válido.
*/
codPostalVal: function (cp) {
const tamanho = cp.length === 4;
let codInicialValido = false;
const listaCodigos = codigosPostal.map(i => {return i[1]})
listaCodigos.forEach(cod => {
if(cp.startsWith(cod)) codInicialValido = true;
})
return tamanho && soNumeros(cp) && codInicialValido;
},
/**
* Devolve nome da região a que o cod. postal representa.(PT)
* @param {string} cp Recebe um codigo postal no seguinte formato: ('8100')
* @returns nome da região (ex. 'Faro', 'Lisboa', 'Loulé')
*/
codPostalArea: function (cp) {
const invalido = false;
if (this.codPostalVal(cp)) {
for (const arr of codigosPostal) {
if (cp.startsWith(arr[1])) return arr[0];
}
return invalido;
}
return invalido;
},
/**
* Valida o número de cartão de cidadão. (PT)
* @param {string} num Recebe um número de CC.
* @returns verdadeiro se for um número válido.
*/
ccidadaoVal: function (num) {
return null;
},
/**
* Valida um número de identificação fiscal. (PT)
* @param {string} num Recebe um número nif.
* @returns verdadeiro se for um número válido.
*/
nifVal: function (num) {
if (soNumeros(num) === false) return false;
if (num.length !== 9) return false;
if (
!validationSets.one.includes(num.substr(0, 1)) &&
!validationSets.two.includes(num.substr(0, 2))
) {
return false;
}
const total =
num[0] * 9 +
num[1] * 8 +
num[2] * 7 +
num[3] * 6 +
num[4] * 5 +
num[5] * 4 +
num[6] * 3 +
num[7] * 2;
const modulo11 = Number(total) % 11;
const checkDigit = modulo11 < 2 ? 0 : 11 - modulo11;
return checkDigit === Number(num[8]);
},
/**
* Valida um número do sistema nacional de saúde. (PT)
* @param {string} num Recebe um número niss.
* @returns verdadeiro se for um número válido.
*/
nissVal: function (num) {
return null;
},
/**
* Valida um número de carta de condução. (PT)
* @param {string} num Recebe um número carta de condução.
* @returns verdadeiro se for um número válido.
*/
cConducaoVal: function (num) {
return null;
},
//Adicionar mais validações abaixo.
},
/**
* Validações de dados sociais do Brazil como numeros
* de telefone, CC, telemovel, num etc...
*/
BR: {},
/**
* Validações de dados de Angola como numeros
* de telefone, CC, telemovel, num etc...
*/
ANG: {},
};
module.exports = Validatuga;