-
Notifications
You must be signed in to change notification settings - Fork 0
/
validate-cnpj.ts
59 lines (46 loc) · 1.3 KB
/
validate-cnpj.ts
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
/**
* validate cnpj
* @param cnpj cnpj
* @returns if is valid or not
*/
export function vlaidateCNPJ(cnpj: string) {
cnpj = cnpj.replace(/[^\d]+/g, "");
if (cnpj === "") return false;
if (cnpj.length !== 14) return false;
const commonCNPJ = [
"00000000000000",
"11111111111111",
"22222222222222",
"33333333333333",
"44444444444444",
"55555555555555",
"66666666666666",
"77777777777777",
"88888888888888",
"99999999999999",
];
if (commonCNPJ.some((ccnpj) => ccnpj === cnpj)) return false;
// Valida DVs
let tamanho = cnpj.length - 2;
let numeros = cnpj.substring(0, tamanho);
let digitos = cnpj.substring(tamanho);
let soma = 0;
let pos = tamanho - 7;
for (let i = tamanho; i >= 1; i--) {
soma += Number(numeros.charAt(tamanho - i)) * pos--;
if (pos < 2) pos = 9;
}
let resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);
if (resultado !== Number(digitos.charAt(0))) return false;
tamanho = tamanho + 1;
numeros = cnpj.substring(0, tamanho);
soma = 0;
pos = tamanho - 7;
for (let i = tamanho; i >= 1; i--) {
soma += Number(numeros.charAt(tamanho - i)) * pos--;
if (pos < 2) pos = 9;
}
resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);
if (resultado !== Number(digitos.charAt(1))) return false;
return true;
}