validation-br 1.6.2-e → 1.6.3-b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -0
- package/.prettierrc.js +7 -0
- package/.publish/dist/_exceptions/ValidationBRError.d.ts +7 -0
- package/.publish/dist/_exceptions/ValidationBRError.js +11 -0
- package/.publish/dist/_exceptions/ValidationBRError.js.map +1 -0
- package/.publish/dist/cnh.d.ts +98 -0
- package/.publish/dist/cnh.js +149 -0
- package/.publish/dist/cnh.js.map +1 -0
- package/.publish/dist/cnpj.d.ts +121 -0
- package/.publish/dist/cnpj.js +193 -0
- package/.publish/dist/cnpj.js.map +1 -0
- package/.publish/dist/cpf.d.ts +106 -0
- package/.publish/dist/cpf.js +157 -0
- package/.publish/dist/cpf.js.map +1 -0
- package/.publish/dist/index.d.ts +21 -0
- package/.publish/dist/index.js +42 -0
- package/.publish/dist/index.js.map +1 -0
- package/.publish/dist/judicialProcess.d.ts +133 -0
- package/.publish/dist/judicialProcess.js +200 -0
- package/.publish/dist/judicialProcess.js.map +1 -0
- package/.publish/dist/nup17.d.ts +103 -0
- package/.publish/dist/nup17.js +159 -0
- package/.publish/dist/nup17.js.map +1 -0
- package/.publish/dist/pisPasep.d.ts +88 -0
- package/.publish/dist/pisPasep.js +136 -0
- package/.publish/dist/pisPasep.js.map +1 -0
- package/.publish/dist/postalCode.d.ts +92 -0
- package/.publish/dist/postalCode.js +144 -0
- package/.publish/dist/postalCode.js.map +1 -0
- package/.publish/dist/renavam.d.ts +82 -0
- package/.publish/dist/renavam.js +132 -0
- package/.publish/dist/renavam.js.map +1 -0
- package/.publish/dist/tituloEleitor.d.ts +100 -0
- package/.publish/dist/tituloEleitor.js +157 -0
- package/.publish/dist/tituloEleitor.js.map +1 -0
- package/.publish/dist/utils.d.ts +131 -0
- package/.publish/dist/utils.js +190 -0
- package/.publish/dist/utils.js.map +1 -0
- package/.publish/package-lock.json +4372 -0
- package/.publish/package.json +112 -0
- package/.publish/readme.md +492 -0
- package/eslint.config.js +82 -0
- package/jest.config.js +11 -0
- package/package.json +6 -8
- package/publish.sh +31 -0
- package/tsconfig.json +25 -0
package/.prettierignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dist/
|
package/.prettierrc.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export default class ValidationBRError extends Error {
|
|
2
|
+
static INVALID_DV: ValidationBRError;
|
|
3
|
+
static INVALID_FORMAT: ValidationBRError;
|
|
4
|
+
static EMPTY_VALUE: ValidationBRError;
|
|
5
|
+
static MAX_LEN_EXCEDEED: ValidationBRError;
|
|
6
|
+
static REPEATED_SEQUENCE: ValidationBRError;
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class ValidationBRError extends Error {
|
|
4
|
+
}
|
|
5
|
+
ValidationBRError.INVALID_DV = new ValidationBRError('Dígito verificador inválido');
|
|
6
|
+
ValidationBRError.INVALID_FORMAT = new ValidationBRError('Formato inválido');
|
|
7
|
+
ValidationBRError.EMPTY_VALUE = new ValidationBRError('Valor não preenchido');
|
|
8
|
+
ValidationBRError.MAX_LEN_EXCEDEED = new ValidationBRError('Número de caracteres excedido');
|
|
9
|
+
ValidationBRError.REPEATED_SEQUENCE = new ValidationBRError('Sequência de números repetidos não permitida');
|
|
10
|
+
exports.default = ValidationBRError;
|
|
11
|
+
//# sourceMappingURL=ValidationBRError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationBRError.js","sourceRoot":"","sources":["../../../src/_exceptions/ValidationBRError.ts"],"names":[],"mappings":";;AAAA,MAAqB,iBAAkB,SAAQ,KAAK;;AAC3C,4BAAU,GAAG,IAAI,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;AACjE,gCAAc,GAAG,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAA;AAC1D,6BAAW,GAAG,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,CAAA;AAC3D,kCAAgB,GAAG,IAAI,iBAAiB,CAAC,+BAA+B,CAAC,CAAA;AACzE,mCAAiB,GAAG,IAAI,iBAAiB,CAAC,8CAA8C,CAAC,CAAA;kBAL7E,iBAAiB"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isCNH()
|
|
3
|
+
* Calcula se uma CNH é válida
|
|
4
|
+
*
|
|
5
|
+
* @doc
|
|
6
|
+
* CNH deve possuir 11 caracteres
|
|
7
|
+
*
|
|
8
|
+
* - Os caracteres 1 a 9 são números sequenciais.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* - Os caracteres 10 e 11 são dígitos verificadores.
|
|
12
|
+
*
|
|
13
|
+
* 1) Partes do número
|
|
14
|
+
* ____________________________ ______
|
|
15
|
+
* | Número | D V |
|
|
16
|
+
* | 5 8 3 1 6 7 9 4 5 3 4 |
|
|
17
|
+
* |____________________________|_____|
|
|
18
|
+
*
|
|
19
|
+
* 2) Cálculo do primeiro DV.
|
|
20
|
+
*
|
|
21
|
+
* - Soma-se o produto das algarismos 1 a 9 pelos números 2, 3, 4, 5, 6, 7, 8, 9, 10.
|
|
22
|
+
*
|
|
23
|
+
* 5 8 3 1 6 7 9 4 5
|
|
24
|
+
* x x x x x x x x x
|
|
25
|
+
* 2 3 4 5 6 7 8 9 10
|
|
26
|
+
* = 10 +24 +12 +5 +36 +49 +72 +36 +50 = 294
|
|
27
|
+
*
|
|
28
|
+
* - O somatório encontrado é dividido por 11. O DV1 é 11 subtraído do resto da divisão. Se o
|
|
29
|
+
* resto for 10, o DV1 é 0.
|
|
30
|
+
*
|
|
31
|
+
* 2.1) 294 / 11 tem resto igual a 8. 11-7 = 3
|
|
32
|
+
* DV1 = 3
|
|
33
|
+
*
|
|
34
|
+
* 3) Cálculo do segundo DV
|
|
35
|
+
*
|
|
36
|
+
* - Soma-se o produto das algarismos 1 a 9 juntamente com o 10 caractere
|
|
37
|
+
* que é o DV1, pelos números 3, 4, 5, 6, 7, 8, 9, 10, 11, 2. O DV1 será
|
|
38
|
+
* multiplicado por 2 e ficará no final.
|
|
39
|
+
*
|
|
40
|
+
* 5 8 3 1 6 7 9 4 5 3
|
|
41
|
+
* x x x x x x x x x x
|
|
42
|
+
* 3 4 5 6 7 8 9 10 11 2
|
|
43
|
+
* = 10 +24 +12 +5 +36 +49 +72 +36 +50 +6 = 348
|
|
44
|
+
*
|
|
45
|
+
* 3.1) 348 / 11 tem resto igual a 7. 11 - 7 = 4.
|
|
46
|
+
* DV2 = 4
|
|
47
|
+
*
|
|
48
|
+
* - O somatório encontrado é dividido por 11. O DV2 é 11 subtraído do resto da divisão. Se o
|
|
49
|
+
* resto for 10, o DV2 é 0.
|
|
50
|
+
*
|
|
51
|
+
* Fonte: https://www.devmedia.com.br/forum/validacao-de-cnh/372972
|
|
52
|
+
*
|
|
53
|
+
* @param {String} value Título eleitoral
|
|
54
|
+
* @returns {Boolean}
|
|
55
|
+
*/
|
|
56
|
+
/**
|
|
57
|
+
* Calcula o Dígito Verificador de um RENAVAM informado
|
|
58
|
+
*
|
|
59
|
+
* @returns String Número fake de um cnh válido
|
|
60
|
+
*/
|
|
61
|
+
export declare const dv: (value: string | number) => string;
|
|
62
|
+
/**
|
|
63
|
+
* validateOrFail()
|
|
64
|
+
* Valida se um número é válido e
|
|
65
|
+
* retorna uma exceção se não estiver
|
|
66
|
+
*
|
|
67
|
+
* @param {String|Number} value Número a ser validado
|
|
68
|
+
* @returns {Boolean}
|
|
69
|
+
*/
|
|
70
|
+
export declare const validateOrFail: (value: string | number) => boolean;
|
|
71
|
+
/**
|
|
72
|
+
* validate()
|
|
73
|
+
* Valida se um número é válido
|
|
74
|
+
*
|
|
75
|
+
* @param {String|Number} value Número a ser validado
|
|
76
|
+
* @returns {Boolean}
|
|
77
|
+
*/
|
|
78
|
+
export declare const validate: (value: string | number) => boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Aplica uma máscara a uma string
|
|
81
|
+
*
|
|
82
|
+
* @returns String string com a máscara aplicada
|
|
83
|
+
*/
|
|
84
|
+
export declare const mask: (value: string | number) => string;
|
|
85
|
+
/**
|
|
86
|
+
* Cria um número fake
|
|
87
|
+
*
|
|
88
|
+
* @returns String Número fake porém válido
|
|
89
|
+
*/
|
|
90
|
+
export declare const fake: (withMask?: boolean) => string;
|
|
91
|
+
/**
|
|
92
|
+
* Retorna String sem máscara
|
|
93
|
+
*
|
|
94
|
+
* @param {String|Number} value Valor a remover máscara
|
|
95
|
+
* @returns {String}
|
|
96
|
+
*/
|
|
97
|
+
export declare const normalize: (value: string | number) => string;
|
|
98
|
+
export default validate;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* isCNH()
|
|
4
|
+
* Calcula se uma CNH é válida
|
|
5
|
+
*
|
|
6
|
+
* @doc
|
|
7
|
+
* CNH deve possuir 11 caracteres
|
|
8
|
+
*
|
|
9
|
+
* - Os caracteres 1 a 9 são números sequenciais.
|
|
10
|
+
*
|
|
11
|
+
*
|
|
12
|
+
* - Os caracteres 10 e 11 são dígitos verificadores.
|
|
13
|
+
*
|
|
14
|
+
* 1) Partes do número
|
|
15
|
+
* ____________________________ ______
|
|
16
|
+
* | Número | D V |
|
|
17
|
+
* | 5 8 3 1 6 7 9 4 5 3 4 |
|
|
18
|
+
* |____________________________|_____|
|
|
19
|
+
*
|
|
20
|
+
* 2) Cálculo do primeiro DV.
|
|
21
|
+
*
|
|
22
|
+
* - Soma-se o produto das algarismos 1 a 9 pelos números 2, 3, 4, 5, 6, 7, 8, 9, 10.
|
|
23
|
+
*
|
|
24
|
+
* 5 8 3 1 6 7 9 4 5
|
|
25
|
+
* x x x x x x x x x
|
|
26
|
+
* 2 3 4 5 6 7 8 9 10
|
|
27
|
+
* = 10 +24 +12 +5 +36 +49 +72 +36 +50 = 294
|
|
28
|
+
*
|
|
29
|
+
* - O somatório encontrado é dividido por 11. O DV1 é 11 subtraído do resto da divisão. Se o
|
|
30
|
+
* resto for 10, o DV1 é 0.
|
|
31
|
+
*
|
|
32
|
+
* 2.1) 294 / 11 tem resto igual a 8. 11-7 = 3
|
|
33
|
+
* DV1 = 3
|
|
34
|
+
*
|
|
35
|
+
* 3) Cálculo do segundo DV
|
|
36
|
+
*
|
|
37
|
+
* - Soma-se o produto das algarismos 1 a 9 juntamente com o 10 caractere
|
|
38
|
+
* que é o DV1, pelos números 3, 4, 5, 6, 7, 8, 9, 10, 11, 2. O DV1 será
|
|
39
|
+
* multiplicado por 2 e ficará no final.
|
|
40
|
+
*
|
|
41
|
+
* 5 8 3 1 6 7 9 4 5 3
|
|
42
|
+
* x x x x x x x x x x
|
|
43
|
+
* 3 4 5 6 7 8 9 10 11 2
|
|
44
|
+
* = 10 +24 +12 +5 +36 +49 +72 +36 +50 +6 = 348
|
|
45
|
+
*
|
|
46
|
+
* 3.1) 348 / 11 tem resto igual a 7. 11 - 7 = 4.
|
|
47
|
+
* DV2 = 4
|
|
48
|
+
*
|
|
49
|
+
* - O somatório encontrado é dividido por 11. O DV2 é 11 subtraído do resto da divisão. Se o
|
|
50
|
+
* resto for 10, o DV2 é 0.
|
|
51
|
+
*
|
|
52
|
+
* Fonte: https://www.devmedia.com.br/forum/validacao-de-cnh/372972
|
|
53
|
+
*
|
|
54
|
+
* @param {String} value Título eleitoral
|
|
55
|
+
* @returns {Boolean}
|
|
56
|
+
*/
|
|
57
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
58
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
59
|
+
};
|
|
60
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
61
|
+
exports.normalize = exports.fake = exports.mask = exports.validate = exports.validateOrFail = exports.dv = void 0;
|
|
62
|
+
const ValidationBRError_1 = __importDefault(require("./_exceptions/ValidationBRError"));
|
|
63
|
+
const utils_1 = require("./utils");
|
|
64
|
+
/**
|
|
65
|
+
* Calcula o Dígito Verificador de um RENAVAM informado
|
|
66
|
+
*
|
|
67
|
+
* @returns String Número fake de um cnh válido
|
|
68
|
+
*/
|
|
69
|
+
const dv = (value) => {
|
|
70
|
+
const cnh = (0, utils_1.clearValue)(value, 9, {
|
|
71
|
+
trimAtRight: true,
|
|
72
|
+
rejectEmpty: true,
|
|
73
|
+
});
|
|
74
|
+
const sum1 = (0, utils_1.sumElementsByMultipliers)(cnh.substring(0, 9), [2, 3, 4, 5, 6, 7, 8, 9, 10]);
|
|
75
|
+
const dv1 = (0, utils_1.sumToDV)(sum1);
|
|
76
|
+
const sum2 = (0, utils_1.sumElementsByMultipliers)(cnh.substring(0, 9) + dv1, [3, 4, 5, 6, 7, 8, 9, 10, 11, 2]);
|
|
77
|
+
const dv2 = (0, utils_1.sumToDV)(sum2);
|
|
78
|
+
return `${dv1}${dv2}`;
|
|
79
|
+
};
|
|
80
|
+
exports.dv = dv;
|
|
81
|
+
/**
|
|
82
|
+
* validateOrFail()
|
|
83
|
+
* Valida se um número é válido e
|
|
84
|
+
* retorna uma exceção se não estiver
|
|
85
|
+
*
|
|
86
|
+
* @param {String|Number} value Número a ser validado
|
|
87
|
+
* @returns {Boolean}
|
|
88
|
+
*/
|
|
89
|
+
const validateOrFail = (value) => {
|
|
90
|
+
const cnh = (0, exports.normalize)(value);
|
|
91
|
+
if ((0, exports.dv)(cnh) !== cnh.substring(9, 11)) {
|
|
92
|
+
throw ValidationBRError_1.default.INVALID_DV;
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
};
|
|
96
|
+
exports.validateOrFail = validateOrFail;
|
|
97
|
+
/**
|
|
98
|
+
* validate()
|
|
99
|
+
* Valida se um número é válido
|
|
100
|
+
*
|
|
101
|
+
* @param {String|Number} value Número a ser validado
|
|
102
|
+
* @returns {Boolean}
|
|
103
|
+
*/
|
|
104
|
+
const validate = (value) => {
|
|
105
|
+
try {
|
|
106
|
+
return (0, exports.validateOrFail)(value);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
exports.validate = validate;
|
|
113
|
+
/**
|
|
114
|
+
* Aplica uma máscara a uma string
|
|
115
|
+
*
|
|
116
|
+
* @returns String string com a máscara aplicada
|
|
117
|
+
*/
|
|
118
|
+
const mask = (value) => (0, utils_1.applyMask)(value, '000000000-00');
|
|
119
|
+
exports.mask = mask;
|
|
120
|
+
/**
|
|
121
|
+
* Cria um número fake
|
|
122
|
+
*
|
|
123
|
+
* @returns String Número fake porém válido
|
|
124
|
+
*/
|
|
125
|
+
const fake = (withMask = false) => {
|
|
126
|
+
const value = (0, utils_1.fakeNumber)(9, true);
|
|
127
|
+
const cnh = `${value}${(0, exports.dv)(value)}`;
|
|
128
|
+
if (withMask)
|
|
129
|
+
return (0, exports.mask)(cnh);
|
|
130
|
+
return cnh;
|
|
131
|
+
};
|
|
132
|
+
exports.fake = fake;
|
|
133
|
+
/**
|
|
134
|
+
* Retorna String sem máscara
|
|
135
|
+
*
|
|
136
|
+
* @param {String|Number} value Valor a remover máscara
|
|
137
|
+
* @returns {String}
|
|
138
|
+
*/
|
|
139
|
+
const normalize = (value) => {
|
|
140
|
+
return (0, utils_1.clearValue)(value, 11, {
|
|
141
|
+
fillZerosAtLeft: true,
|
|
142
|
+
rejectEmpty: true,
|
|
143
|
+
rejectHigherLength: true,
|
|
144
|
+
rejectEqualSequence: true,
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
exports.normalize = normalize;
|
|
148
|
+
exports.default = exports.validate;
|
|
149
|
+
//# sourceMappingURL=cnh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cnh.js","sourceRoot":"","sources":["../../src/cnh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isCNPJ()
|
|
3
|
+
* Calcula se um CNPJ é válido
|
|
4
|
+
*
|
|
5
|
+
* A partir da Nota Técnica conjunta COCAD/SUARA/RFB nº 49 de 14 de maio de 2024, CNPJ passa
|
|
6
|
+
* a poder ser criado com letras e números, ao invés de apenas números. Esta alteração entra
|
|
7
|
+
* em vigor em 2026.
|
|
8
|
+
*
|
|
9
|
+
*
|
|
10
|
+
* @doc
|
|
11
|
+
* - CNPJ deve possuir 14 dígitos no formato AA.AAA.AAA/AAAA-NN, onde A representa letras
|
|
12
|
+
* ou números e N representa números (Nota Técnica conjunta COCAD/SUARA/RFB nº 49 de 14 de maio de 2024)
|
|
13
|
+
*
|
|
14
|
+
* - Os caracteres 1 a 8 são a identificação da empresa definida pela Receita Federal. Podem ser letras ou números
|
|
15
|
+
*
|
|
16
|
+
* - Os caracteres 9 a 12 são a identificação das filiais da empresa. Podendo ser letras ou números
|
|
17
|
+
*
|
|
18
|
+
* - Os caracteres 13 e 14 são os dígitos verificadores
|
|
19
|
+
*
|
|
20
|
+
* 1) Partes do número
|
|
21
|
+
* _______________________________ _______________ _______
|
|
22
|
+
* | Número | Filiais | DV |
|
|
23
|
+
* | 1 1 . 2 2 2 . 3 3 3 / 0 0 0 1 - X Y |
|
|
24
|
+
* |_______________________________|_______________|_______|
|
|
25
|
+
*
|
|
26
|
+
*
|
|
27
|
+
* 2.1) Conversão dos números para tabela ASCII
|
|
28
|
+
* Converte os caracteres do CNPJ em valores numéricos, mesmo que alguns deles
|
|
29
|
+
* sejam numéricos. A conversão será baseada na tabela ASCII
|
|
30
|
+
*
|
|
31
|
+
* Tabela ASCII
|
|
32
|
+
* 0 = 48 1 = 49 2 = 50 3 = 51 4 = 52
|
|
33
|
+
* 5 = 53 6 = 54 7 = 55 8 = 56 9 = 57
|
|
34
|
+
* A = 65 B = 66 C = 67 D = 68 E = 69
|
|
35
|
+
* F = 70 G = 71 H = 72 I = 73 J = 74
|
|
36
|
+
* K = 75 L = 76 M = 77 N = 78 O = 79
|
|
37
|
+
* P = 80 Q = 81 R = 82 S = 83 T = 84
|
|
38
|
+
* U = 85 V = 86 W = 87 X = 88 Y = 89
|
|
39
|
+
* Z = 90
|
|
40
|
+
*
|
|
41
|
+
* Ao converter cada dígito do CNPJ para o seu equivalente na tabela ASCII, subtraia de 48
|
|
42
|
+
* para obter o número que será multiplicado.
|
|
43
|
+
* Como o "0" é 48 e deve-se subtrair de 48, não há mudanças nos números.
|
|
44
|
+
*
|
|
45
|
+
*
|
|
46
|
+
*
|
|
47
|
+
* 2) Cálculo do primeiro DV.
|
|
48
|
+
*
|
|
49
|
+
* - Soma-se o produto das algarismos 1 a 12 pelos números 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
|
|
50
|
+
*
|
|
51
|
+
* 1 1 2 2 2 3 3 3 0 0 0 1
|
|
52
|
+
* x x x x x x x x x x x x
|
|
53
|
+
* 5 4 3 2 9 8 7 6 5 4 3 2
|
|
54
|
+
* = 5 +4 +6 +4 +18 +24 +21 +18 +0 +0 +0 +2 = 102
|
|
55
|
+
*
|
|
56
|
+
* - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
|
|
57
|
+
* 102 / 11 tem resto 8. 11 - 3 = 8. DV1 é 8.
|
|
58
|
+
* Obs.: Caso o cálculo de DV1 retorne 10, o resultado será 0.
|
|
59
|
+
*
|
|
60
|
+
* 3) Cálculo do segundo DV.
|
|
61
|
+
*
|
|
62
|
+
* - Soma-se o produto das algarismos 1 a 13 (incluindo o DV1 calculado) pelos
|
|
63
|
+
* números 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2.
|
|
64
|
+
*
|
|
65
|
+
* 1 1 2 2 2 3 3 3 0 0 0 1 8
|
|
66
|
+
* x x x x x x x x x x x x x
|
|
67
|
+
* 6 5 4 3 2 9 8 7 6 5 4 3 2
|
|
68
|
+
* = 6 +5 +8 +6 +4 +27 +24 +21 +0 +0 +0 +3 +16 = 120
|
|
69
|
+
*
|
|
70
|
+
* - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
|
|
71
|
+
* 120 / 11 tem resto 10. 11 - 10 = 1. DV2 é 1.
|
|
72
|
+
* Obs.: Caso o cálculo de DV2 retorne 10, o resultado será 0.
|
|
73
|
+
*
|
|
74
|
+
* Fonte: http://www.macoratti.net/alg_cnpj.htm
|
|
75
|
+
*
|
|
76
|
+
* @param {String} value Título eleitoral
|
|
77
|
+
* @returns {Boolean}
|
|
78
|
+
*/
|
|
79
|
+
type FakeInput = {
|
|
80
|
+
withMask?: boolean;
|
|
81
|
+
alphanumeric?: boolean;
|
|
82
|
+
};
|
|
83
|
+
export declare function dv(value: string | number): string;
|
|
84
|
+
/**
|
|
85
|
+
* Aplica uma máscara ao número informado
|
|
86
|
+
*
|
|
87
|
+
* @param {String} value Número de Processo
|
|
88
|
+
* @returns {String} Valor com a máscara
|
|
89
|
+
*/
|
|
90
|
+
export declare function mask(value: string | number): string;
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
*
|
|
94
|
+
*/
|
|
95
|
+
export declare function fake(options?: FakeInput): string;
|
|
96
|
+
export declare function fake(withMask?: boolean): string;
|
|
97
|
+
/**
|
|
98
|
+
* validateOrFail()
|
|
99
|
+
* Valida se um número é válido e
|
|
100
|
+
* retorna uma exceção se não estiver
|
|
101
|
+
*
|
|
102
|
+
* @param {String|Number} value Número a ser validado
|
|
103
|
+
* @returns {Boolean}
|
|
104
|
+
*/
|
|
105
|
+
export declare function validateOrFail(value: string | number): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* validate()
|
|
108
|
+
* Valida se um número é válido
|
|
109
|
+
*
|
|
110
|
+
* @param {String|Number} value Número a ser validado
|
|
111
|
+
* @returns {Boolean}
|
|
112
|
+
*/
|
|
113
|
+
export declare function validate(value: string | number): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Retorna String sem máscara
|
|
116
|
+
*
|
|
117
|
+
* @param {String|Number} value Valor a remover máscara
|
|
118
|
+
* @returns {String}
|
|
119
|
+
*/
|
|
120
|
+
export declare const normalize: (value: string | number) => string;
|
|
121
|
+
export default validate;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* isCNPJ()
|
|
4
|
+
* Calcula se um CNPJ é válido
|
|
5
|
+
*
|
|
6
|
+
* A partir da Nota Técnica conjunta COCAD/SUARA/RFB nº 49 de 14 de maio de 2024, CNPJ passa
|
|
7
|
+
* a poder ser criado com letras e números, ao invés de apenas números. Esta alteração entra
|
|
8
|
+
* em vigor em 2026.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* @doc
|
|
12
|
+
* - CNPJ deve possuir 14 dígitos no formato AA.AAA.AAA/AAAA-NN, onde A representa letras
|
|
13
|
+
* ou números e N representa números (Nota Técnica conjunta COCAD/SUARA/RFB nº 49 de 14 de maio de 2024)
|
|
14
|
+
*
|
|
15
|
+
* - Os caracteres 1 a 8 são a identificação da empresa definida pela Receita Federal. Podem ser letras ou números
|
|
16
|
+
*
|
|
17
|
+
* - Os caracteres 9 a 12 são a identificação das filiais da empresa. Podendo ser letras ou números
|
|
18
|
+
*
|
|
19
|
+
* - Os caracteres 13 e 14 são os dígitos verificadores
|
|
20
|
+
*
|
|
21
|
+
* 1) Partes do número
|
|
22
|
+
* _______________________________ _______________ _______
|
|
23
|
+
* | Número | Filiais | DV |
|
|
24
|
+
* | 1 1 . 2 2 2 . 3 3 3 / 0 0 0 1 - X Y |
|
|
25
|
+
* |_______________________________|_______________|_______|
|
|
26
|
+
*
|
|
27
|
+
*
|
|
28
|
+
* 2.1) Conversão dos números para tabela ASCII
|
|
29
|
+
* Converte os caracteres do CNPJ em valores numéricos, mesmo que alguns deles
|
|
30
|
+
* sejam numéricos. A conversão será baseada na tabela ASCII
|
|
31
|
+
*
|
|
32
|
+
* Tabela ASCII
|
|
33
|
+
* 0 = 48 1 = 49 2 = 50 3 = 51 4 = 52
|
|
34
|
+
* 5 = 53 6 = 54 7 = 55 8 = 56 9 = 57
|
|
35
|
+
* A = 65 B = 66 C = 67 D = 68 E = 69
|
|
36
|
+
* F = 70 G = 71 H = 72 I = 73 J = 74
|
|
37
|
+
* K = 75 L = 76 M = 77 N = 78 O = 79
|
|
38
|
+
* P = 80 Q = 81 R = 82 S = 83 T = 84
|
|
39
|
+
* U = 85 V = 86 W = 87 X = 88 Y = 89
|
|
40
|
+
* Z = 90
|
|
41
|
+
*
|
|
42
|
+
* Ao converter cada dígito do CNPJ para o seu equivalente na tabela ASCII, subtraia de 48
|
|
43
|
+
* para obter o número que será multiplicado.
|
|
44
|
+
* Como o "0" é 48 e deve-se subtrair de 48, não há mudanças nos números.
|
|
45
|
+
*
|
|
46
|
+
*
|
|
47
|
+
*
|
|
48
|
+
* 2) Cálculo do primeiro DV.
|
|
49
|
+
*
|
|
50
|
+
* - Soma-se o produto das algarismos 1 a 12 pelos números 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
|
|
51
|
+
*
|
|
52
|
+
* 1 1 2 2 2 3 3 3 0 0 0 1
|
|
53
|
+
* x x x x x x x x x x x x
|
|
54
|
+
* 5 4 3 2 9 8 7 6 5 4 3 2
|
|
55
|
+
* = 5 +4 +6 +4 +18 +24 +21 +18 +0 +0 +0 +2 = 102
|
|
56
|
+
*
|
|
57
|
+
* - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
|
|
58
|
+
* 102 / 11 tem resto 8. 11 - 3 = 8. DV1 é 8.
|
|
59
|
+
* Obs.: Caso o cálculo de DV1 retorne 10, o resultado será 0.
|
|
60
|
+
*
|
|
61
|
+
* 3) Cálculo do segundo DV.
|
|
62
|
+
*
|
|
63
|
+
* - Soma-se o produto das algarismos 1 a 13 (incluindo o DV1 calculado) pelos
|
|
64
|
+
* números 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2.
|
|
65
|
+
*
|
|
66
|
+
* 1 1 2 2 2 3 3 3 0 0 0 1 8
|
|
67
|
+
* x x x x x x x x x x x x x
|
|
68
|
+
* 6 5 4 3 2 9 8 7 6 5 4 3 2
|
|
69
|
+
* = 6 +5 +8 +6 +4 +27 +24 +21 +0 +0 +0 +3 +16 = 120
|
|
70
|
+
*
|
|
71
|
+
* - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
|
|
72
|
+
* 120 / 11 tem resto 10. 11 - 10 = 1. DV2 é 1.
|
|
73
|
+
* Obs.: Caso o cálculo de DV2 retorne 10, o resultado será 0.
|
|
74
|
+
*
|
|
75
|
+
* Fonte: http://www.macoratti.net/alg_cnpj.htm
|
|
76
|
+
*
|
|
77
|
+
* @param {String} value Título eleitoral
|
|
78
|
+
* @returns {Boolean}
|
|
79
|
+
*/
|
|
80
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
81
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
82
|
+
};
|
|
83
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
84
|
+
exports.normalize = void 0;
|
|
85
|
+
exports.dv = dv;
|
|
86
|
+
exports.mask = mask;
|
|
87
|
+
exports.fake = fake;
|
|
88
|
+
exports.validateOrFail = validateOrFail;
|
|
89
|
+
exports.validate = validate;
|
|
90
|
+
const ValidationBRError_1 = __importDefault(require("./_exceptions/ValidationBRError"));
|
|
91
|
+
const utils_1 = require("./utils");
|
|
92
|
+
function dv(value) {
|
|
93
|
+
const cnpj = (0, utils_1.clearValue)(value, 12, {
|
|
94
|
+
trimAtRight: true,
|
|
95
|
+
rejectEmpty: true,
|
|
96
|
+
});
|
|
97
|
+
const dv1Factors = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
|
|
98
|
+
const dv1 = sumToDvWithAlpha(cnpj.substring(0, 12), dv1Factors);
|
|
99
|
+
const dv2Factors = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
|
|
100
|
+
const dv2 = sumToDvWithAlpha(cnpj.substring(0, 12) + dv1, dv2Factors);
|
|
101
|
+
return `${dv1}${dv2}`;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Aplica uma máscara ao número informado
|
|
105
|
+
*
|
|
106
|
+
* @param {String} value Número de Processo
|
|
107
|
+
* @returns {String} Valor com a máscara
|
|
108
|
+
*/
|
|
109
|
+
function mask(value) {
|
|
110
|
+
return (0, utils_1.applyMask)(value, '00.000.000/0000-00');
|
|
111
|
+
}
|
|
112
|
+
function fake(input = false) {
|
|
113
|
+
const options = typeof input === 'boolean'
|
|
114
|
+
? { withMask: input, alphanumeric: true }
|
|
115
|
+
: { withMask: false, alphanumeric: true, ...input };
|
|
116
|
+
const first = (0, utils_1.fakeNumber)(8, true, options.alphanumeric);
|
|
117
|
+
const branch = '0001';
|
|
118
|
+
const num = first + branch;
|
|
119
|
+
const cnpj = `${num}${dv(num)}`;
|
|
120
|
+
if (options.withMask)
|
|
121
|
+
return mask(cnpj);
|
|
122
|
+
return cnpj;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* validateOrFail()
|
|
126
|
+
* Valida se um número é válido e
|
|
127
|
+
* retorna uma exceção se não estiver
|
|
128
|
+
*
|
|
129
|
+
* @param {String|Number} value Número a ser validado
|
|
130
|
+
* @returns {Boolean}
|
|
131
|
+
*/
|
|
132
|
+
function validateOrFail(value) {
|
|
133
|
+
const cnpj = (0, exports.normalize)(value);
|
|
134
|
+
if (dv(cnpj) !== cnpj.substring(12, 14)) {
|
|
135
|
+
throw ValidationBRError_1.default.INVALID_DV;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* validate()
|
|
141
|
+
* Valida se um número é válido
|
|
142
|
+
*
|
|
143
|
+
* @param {String|Number} value Número a ser validado
|
|
144
|
+
* @returns {Boolean}
|
|
145
|
+
*/
|
|
146
|
+
function validate(value) {
|
|
147
|
+
try {
|
|
148
|
+
return validateOrFail(value);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Retorna String sem máscara
|
|
156
|
+
*
|
|
157
|
+
* @param {String|Number} value Valor a remover máscara
|
|
158
|
+
* @returns {String}
|
|
159
|
+
*/
|
|
160
|
+
const normalize = (value) => {
|
|
161
|
+
return (0, utils_1.clearValue)(value, 14, {
|
|
162
|
+
fillZerosAtLeft: false,
|
|
163
|
+
rejectEmpty: true,
|
|
164
|
+
rejectHigherLength: true,
|
|
165
|
+
rejectEqualSequence: true,
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
exports.normalize = normalize;
|
|
169
|
+
exports.default = validate;
|
|
170
|
+
/**
|
|
171
|
+
*
|
|
172
|
+
* Converte o número para
|
|
173
|
+
*
|
|
174
|
+
*
|
|
175
|
+
*/
|
|
176
|
+
function asciiTableConverter(character) {
|
|
177
|
+
if (/^\d$/.test(character))
|
|
178
|
+
return +character;
|
|
179
|
+
const ascii = character.toLocaleUpperCase().charCodeAt(0) - 48;
|
|
180
|
+
return ascii;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
*
|
|
184
|
+
*
|
|
185
|
+
*
|
|
186
|
+
*/
|
|
187
|
+
function sumToDvWithAlpha(value, multiplier) {
|
|
188
|
+
const sum = [...value]
|
|
189
|
+
.map(character => asciiTableConverter(character))
|
|
190
|
+
.reduce((sum, asciiChar, index) => sum + asciiChar * multiplier[index], 0);
|
|
191
|
+
return (0, utils_1.sumToDV)(sum);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=cnpj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cnpj.js","sourceRoot":"","sources":["../../src/cnpj.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;;;;;;AAUH,gBAaC;AAQD,oBAEC;AAQD,oBAaC;AAUD,wCAQC;AASD,4BAMC;AArFD,wFAAgE;AAChE,mCAA+F;AAO/F,SAAgB,EAAE,CAAC,KAAsB;IACvC,MAAM,IAAI,GAAG,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,EAAE;QACjC,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,IAAI,CAAC,KAAsB;IACzC,OAAO,IAAA,iBAAS,EAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAChD,CAAC;AAQD,SAAgB,IAAI,CAAC,QAA6B,KAAK;IAErD,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,SAAS;QACxC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE;QACzC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;IAEtD,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,KAAsB;IACnD,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC;IAE9B,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,2BAAiB,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,KAAsB;IAC7C,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CAAC,KAAsB,EAAU,EAAE;IAC1D,OAAO,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,EAAE;QAC3B,eAAe,EAAE,KAAK;QACtB,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEF,kBAAe,QAAQ,CAAC;AAGxB;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,SAAS,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAE/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAa,EAAE,UAAoB;IAC3D,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;SACnB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,GAAW,EAAE,SAAc,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAElG,OAAO,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
|