validation-br 1.6.4 → 1.6.5

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.
Files changed (50) hide show
  1. package/dist/cnh.d.ts +1 -1
  2. package/dist/cnh.js +1 -1
  3. package/dist/cnpj.d.ts +1 -1
  4. package/dist/cnpj.js +1 -1
  5. package/dist/esm/_exceptions/ValidationBRError.js +9 -0
  6. package/dist/esm/_exceptions/ValidationBRError.js.map +1 -0
  7. package/dist/esm/cnh.js +137 -0
  8. package/dist/esm/cnh.js.map +1 -0
  9. package/dist/esm/cnpj.js +181 -0
  10. package/dist/esm/cnpj.js.map +1 -0
  11. package/dist/esm/cpf.js +145 -0
  12. package/dist/esm/cpf.js.map +1 -0
  13. package/dist/esm/index.js +33 -0
  14. package/dist/esm/index.js.map +1 -0
  15. package/dist/esm/judicialProcess.js +187 -0
  16. package/dist/esm/judicialProcess.js.map +1 -0
  17. package/dist/esm/nup17.js +151 -0
  18. package/dist/esm/nup17.js.map +1 -0
  19. package/dist/esm/package.json +1 -0
  20. package/dist/esm/phone.js +123 -0
  21. package/dist/esm/phone.js.map +1 -0
  22. package/dist/esm/pisPasep.js +123 -0
  23. package/dist/esm/pisPasep.js.map +1 -0
  24. package/dist/esm/postalCode.js +132 -0
  25. package/dist/esm/postalCode.js.map +1 -0
  26. package/dist/esm/renavam.js +120 -0
  27. package/dist/esm/renavam.js.map +1 -0
  28. package/dist/esm/tituloEleitor.js +145 -0
  29. package/dist/esm/tituloEleitor.js.map +1 -0
  30. package/dist/esm/utils.js +176 -0
  31. package/dist/esm/utils.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.js +5 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/nup17.js +6 -2
  36. package/dist/nup17.js.map +1 -1
  37. package/dist/phone.d.ts +71 -0
  38. package/dist/phone.js +134 -0
  39. package/dist/phone.js.map +1 -0
  40. package/dist/pisPasep.d.ts +4 -5
  41. package/dist/pisPasep.js +4 -5
  42. package/dist/pisPasep.js.map +1 -1
  43. package/dist/postalCode.d.ts +1 -1
  44. package/dist/postalCode.js +1 -1
  45. package/dist/renavam.d.ts +3 -3
  46. package/dist/renavam.js +3 -3
  47. package/dist/utils.js +1 -1
  48. package/dist/utils.js.map +1 -1
  49. package/package.json +20 -2
  50. package/readme.md +32 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * judicialProcess
3
+ * Valida, mascara e cria números de processos judiciais
4
+ *
5
+ * @link
6
+ * https://juslaboris.tst.jus.br/bitstream/handle/20.500.12178/30318/2008_res0065_cnj_rep01.pdf?sequence=2
7
+ * http://ghiorzi.org/DVnew.htm#f
8
+ *
9
+ * @doc
10
+ * Os números de processos judiciais são usados a partir de 2010 para unificar a
11
+ * numeração de processos no Brasil e são usados em todos os tribunais.
12
+ *
13
+ * O número do processo, sem os caracteres especiais, devem possuir até 20 números
14
+ * e deve seguir o padrão abaixo:
15
+ *
16
+ * 1) Partes do número
17
+ * 0002080-25.2012.5.15.0049
18
+ * NNNNNNN-DD.AAAA.J.TR.OOOO
19
+ * |______|__|____|_|__|____|
20
+ * | | | | | |----> Unidade de origem do processo com 4 caracteres
21
+ * | | | | |--------> TR=Tribunal do segmento do poder judiciário com 2 caracteres
22
+ * | | | |----------> J=Órgão do poder Judiciário com 1 caractere
23
+ * | | |-------------> Ano do ajuizamento do processo com 4 caracteres
24
+ * | |-----------------> Dígito verificador com 2 caracteres
25
+ * |----------------------> Número sequencial do Processo, por unidade de
26
+ * origem, reiniciado anualmente com 7 caracteres
27
+ *
28
+ * Órgãos do Poder Judiciário
29
+ * 1 - Supremo Tribunal Federal
30
+ * 2 - Conselho Nacional de Justiça
31
+ * 3 - Superior Tribunal de Justiça
32
+ * 4 - Justiça Federal
33
+ * 5 - Justiça do Trabalho
34
+ * 6 - Justiça Eleitoral
35
+ * 7 - Justiça Militar da União
36
+ * 8 - Justiça dos Estados e do Distrito Federal e Territórios
37
+ * 9 - Justiça Militar Estadual
38
+ *
39
+ *
40
+ * 2) Dígito Verificador
41
+ *
42
+ * O algoritmo usado para o cálculo do DV chama-se Módulo 97 de Base 10 (ISO 7064).
43
+ *
44
+ * Nota: O número do processo possui 20 caracteres e ultrapassa o tamanho máximo
45
+ * do inteiro em javascript, impedindo que façamos o cálculo diretamente, desta
46
+ * forma, será nacessária uma fatoração para que o resultado seja o correto.
47
+ *
48
+ * 2.1) Cálculo do DV
49
+ * - Caso o DV seja conhecido, ele precisa ser removido do número e colocado
50
+ * como "00" ao final. Caso não esteja incluso no número, adicione '00' ao final.
51
+ *
52
+ * Ex.: O processo "00020802520125150049", cujo dv é "25", será calculado como
53
+ * "000208020125150049" e receberá "00" ao final. O número usado para o cálculo
54
+ * do DV será "00020802012515004900"
55
+ *
56
+ * 2.2) Etapas de Cálculo
57
+ *
58
+ * 00020802012515004900
59
+ * ↓↓
60
+ * DV ao final como "00"
61
+ *
62
+ * - Aplicamos o MOD 97 aos caracteres de 0 a 7 para calcular a primeira parte
63
+ * part1 = 0002080 % 97 = 43
64
+ *
65
+ * - Concatenamos part1 ao ano, órgão do poder judiciário e tribunal e aplicamos o MOD 97
66
+ * para obtermos o valor da part2
67
+ * part2 = ( part1 +''+ 2012 +''+ 5 +''+ 15 ) % 97 = 26
68
+ *
69
+ * - Concatemos part2 ao código do órgão de origem e ao "00" do final e aplicamos
70
+ * o MOD 97 ao resultado
71
+ * part3 = ( part2 + '0049' + '00') % 97 = 73
72
+ *
73
+ * - Subtraímos o resultado de 98
74
+ * dv = 98 - 73 = 25
75
+ *
76
+ * O Dígito verificador é 25 e deve ser aplicado após o 7º caractere do número do processo
77
+ *
78
+ * Fonte: https://juslaboris.tst.jus.br/bitstream/handle/20.500.12178/30318/2008_res0065_cnj_rep01.pdf?sequence=2
79
+ */
80
+ import ValidationBRError from './_exceptions/ValidationBRError.js';
81
+ import { clearValue, fakeNumber, applyMask, insertAtPosition, removeFromPosition } from './utils.js';
82
+ /**
83
+ *
84
+ *
85
+ */
86
+ export const dv = (value) => {
87
+ const judicialProcess = clearValue(value, 18, { trimAtRight: true, rejectEmpty: true });
88
+ const num = judicialProcess.substring(0, 7);
89
+ const yearAndCourt = judicialProcess.substring(7, 14);
90
+ const origin = judicialProcess.substring(14, 18);
91
+ return String(98 - (Number(`${Number(`${Number(num) % 97}${yearAndCourt}`) % 97}${origin}00`) % 97)).padStart(2, '0');
92
+ };
93
+ /**
94
+ * Aplica uma máscara ao número informado
95
+ *
96
+ * @param {String} value Número de Processo
97
+ * @returns {String} Valor com a máscara
98
+ */
99
+ export const mask = (value) => applyMask(value, '0000000-00.0000.0.00.0000');
100
+ /**
101
+ *
102
+ *
103
+ */
104
+ export const fake = (withMask = false) => {
105
+ const num = fakeNumber(7, true);
106
+ const year = new Date().getFullYear() - +fakeNumber(1);
107
+ let courte1 = fakeNumber(1, true); // Não pode ser '0'
108
+ courte1 = courte1 === '0' ? '1' : courte1;
109
+ const courte2 = _getSubCourt();
110
+ const courte = `${courte1}${courte2}`;
111
+ const origin = fakeNumber(4, true);
112
+ const judicialProcess = `${num}${year}${courte}${origin}`;
113
+ const digits = dv(judicialProcess);
114
+ const finalNumber = insertAtPosition(judicialProcess, digits, 7);
115
+ if (withMask)
116
+ return mask(finalNumber);
117
+ return finalNumber;
118
+ };
119
+ /**
120
+ * validateOrFail()
121
+ * Valida se um número é válido e
122
+ * retorna uma exceção se não estiver
123
+ *
124
+ * @param {String} value Número a ser validado
125
+ * @returns {Boolean}
126
+ */
127
+ export const validateOrFail = (value) => {
128
+ const judicialProcess = normalize(value);
129
+ const processWithoutDV = removeFromPosition(judicialProcess, 7, 9);
130
+ if (processWithoutDV.substring(11, 12) === '0') {
131
+ throw new Error('Código do Órgão Judiciário não pode ser "0"');
132
+ }
133
+ if (dv(processWithoutDV) !== judicialProcess.substring(7, 9)) {
134
+ throw ValidationBRError.INVALID_DV;
135
+ }
136
+ return true;
137
+ };
138
+ /**
139
+ * validate()
140
+ * Valida se um número é válido
141
+ *
142
+ * @param {String} value Número a ser validado
143
+ * @returns {Boolean}
144
+ */
145
+ export const validate = (value) => {
146
+ try {
147
+ return validateOrFail(value);
148
+ }
149
+ catch (error) {
150
+ return false;
151
+ }
152
+ };
153
+ // ////////////////////////////////////////////
154
+ //
155
+ // Funções auxiliares
156
+ //
157
+ // ////////////////////////////////////////////
158
+ /**
159
+ * Gera um número fake da sub corte de acordo com as regras:
160
+ * - Precisa ser uma string numérica de 2 dígitos.
161
+ * - Não pode ser '0'. CAso seja zero, mude para '01'.
162
+ *
163
+ * A função aceita um parâmetro para viabilizar os testes. Caso
164
+ * não seja definido, será gerado aleatoriamente.
165
+ *
166
+ * @param
167
+ *
168
+ */
169
+ export function _getSubCourt(courte = undefined) {
170
+ courte = courte !== null && courte !== void 0 ? courte : fakeNumber(2, true).toString();
171
+ return +courte === 0 ? '01' : courte;
172
+ }
173
+ /**
174
+ * Retorna String sem máscara
175
+ *
176
+ * @param {String|Number} value Valor a remover máscara
177
+ * @returns {String}
178
+ */
179
+ export const normalize = (value) => {
180
+ return clearValue(value, 20, {
181
+ fillZerosAtLeft: true,
182
+ rejectEmpty: true,
183
+ rejectHigherLength: true,
184
+ });
185
+ };
186
+ export default validate;
187
+ //# sourceMappingURL=judicialProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judicialProcess.js","sourceRoot":"","sources":["../src/judicialProcess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * isFederalProtocol()
3
+ * Calcula se é um número válido de protocolo do Governo Federal Brasileiro
4
+ *
5
+ * @doc
6
+ * O Número Unificado de Protocolo de processos do Governo Federal, também conhecido
7
+ * como NUP17, deve ter 17 caracteres, incluindo o dígito verificador de 2 caracteres.
8
+ *
9
+ * 1) Partes do número
10
+ *
11
+ * - Os caracteres 1 a 5 são um código do órgão que gerou o protocolo.
12
+ *
13
+ * - Os caracteres 6 a 11 são o número sequencial do protocolo, sendo que
14
+ * cada órgão emissor tem sua própria sequência e esta é reiniciada a cada ano.
15
+ *
16
+ * - Os caracteres 12 a 15 são referentes ao ano de protocolo
17
+ *
18
+ * - Os caracteres 16 a 17 são referentes ao Dígito Verificador
19
+ *
20
+ * 1.2) Exemplo
21
+ * ---------------------------------------------------------------
22
+ * | Código do órgão | Número Sequencial | Ano | D V
23
+ * 2 3 0 3 7 . 0 0 1 4 6 2 / 2 0 2 1 - 6 5
24
+ *
25
+ * 2) Cálculo do primeiro DV.
26
+ *
27
+ * - Soma-se o produto das algarismos 1 a 15 pelos números
28
+ * 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2
29
+ *
30
+ * 2 3 0 3 7 0 0 1 4 6 2 2 0 2 1
31
+ * x x x x x x x x x x x x x x x
32
+ * 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
33
+ * = 32 +45 +0 +39 +84 +0 +0 +9 +32 +42 +12 +10 +0 +6 +2 = 313
34
+ *
35
+ * - O somatório encontrado é dividido por 11. O resto da divisão é subtraído de 11.
36
+ * 313 / 11 tem resto 5. 11 - 5 = 6. DV1 é 6.
37
+ * Obs.: Caso o cálculo de DV1 retorne 10, o resultado será 0. Caso retorne 11, o DV
38
+ * será 1. Ou seja, se for maior ou igual a 10, desconsidere a casa das dezenas
39
+ *
40
+ * 3) Cálculo do segundo DV.
41
+ *
42
+ * - Acrescenta o valor do DV1 ao número e faz o somatório dos produtos pelos números
43
+ * 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2
44
+ *
45
+ * 2 3 0 3 7 0 0 1 4 6 2 2 0 2 1 6
46
+ * x x x x x x x x x x x x x x x x
47
+ * 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
48
+ * = 34 +48 +0 +42 +91 +0 +0 +10 +36 +48 +14 +12 +0 +8 +3 +12 = 358
49
+ *
50
+ * - O somatório encontrado é dividido por 11. O resto da divisão é subtraído de 11.
51
+ * 358 / 11 tem resto 6. 11 - 6 = 1. DV1 é 5.
52
+ * Obs.: Caso o cálculo de DV1 retorne 10, o resultado será 0. Caso retorne 11, o DV
53
+ * será 1. Ou seja, se for maior ou igual a 10, desconsidere a casa das dezenas.
54
+ *
55
+ * = DV = 65
56
+ *
57
+ * Fonte: https://www.gov.br/compras/pt-br/acesso-a-informacao/legislacao/portarias/portaria-interministerial-no-11-de-25-de-novembro-de-2019
58
+ *
59
+ * @param {String} value Título eleitoral
60
+ * @returns {Boolean}
61
+ */
62
+ import ValidationBRError from './_exceptions/ValidationBRError.js';
63
+ import { sumElementsByMultipliers, clearValue, fakeNumber, applyMask } from './utils.js';
64
+ /**
65
+ * dv()
66
+ * Calcula o dígito verificador
67
+ *
68
+ * @param {String} value
69
+ * @returns {String}
70
+ */
71
+ export const dv = (value) => {
72
+ const nup = clearValue(value, 15, { rejectEmpty: true, trimAtRight: true });
73
+ const nupReverse = nup.split('').reverse().join('');
74
+ const sum1 = sumElementsByMultipliers(nupReverse, [...Array(15)].map((_, i) => i + 2));
75
+ const dv1 = _specificSumToDV(sum1);
76
+ const sum2 = sumElementsByMultipliers(dv1 + nupReverse, [...Array(16)].map((_, i) => i + 2));
77
+ const dv2 = _specificSumToDV(sum2);
78
+ return `${dv1}${dv2}`;
79
+ };
80
+ /**
81
+ * Aplica uma máscara ao número informado
82
+ *
83
+ * @param {String} value Número de Processo
84
+ * @returns {String} Valor com a máscara
85
+ */
86
+ export const mask = (value) => applyMask(value, '00000.000000/0000-00');
87
+ /**
88
+ * fake()
89
+ * Gera um número válido
90
+ *
91
+ * @param {Boolean} withMask Define se o número deve ser gerado com ou sem máscara
92
+ * @returns {String}
93
+ */
94
+ export const fake = (withMask = false) => {
95
+ const orgao = fakeNumber(5, true);
96
+ const sequencial = fakeNumber(6, true);
97
+ const currentYear = new Date().getFullYear();
98
+ const ano = String(Math.floor(Math.random() * (currentYear - 2020 + 1)) + 2020);
99
+ const num = `${orgao}${sequencial}${ano}`;
100
+ const nup = `${num}${dv(num)}`;
101
+ if (withMask)
102
+ return mask(nup);
103
+ return nup;
104
+ };
105
+ /**
106
+ * validateOrFail()
107
+ * Valida se um número é válido e
108
+ * retorna uma exceção se não estiver
109
+ *
110
+ * @param {String} value Número a ser validado
111
+ * @returns {Boolean}
112
+ */
113
+ export const validateOrFail = (value) => {
114
+ const nup = normalize(value);
115
+ if (dv(nup) !== nup.substring(15, 17)) {
116
+ throw ValidationBRError.INVALID_DV;
117
+ }
118
+ return true;
119
+ };
120
+ /**
121
+ * validate()
122
+ * Valida se um número é válido
123
+ *
124
+ * @param {String} value Número a ser validado
125
+ * @returns {Boolean}
126
+ */
127
+ export const validate = (value) => {
128
+ try {
129
+ return validateOrFail(value);
130
+ }
131
+ catch (error) {
132
+ return false;
133
+ }
134
+ };
135
+ export const normalize = (value) => {
136
+ return clearValue(value, 17, {
137
+ rejectEmpty: true,
138
+ rejectHigherLength: true,
139
+ });
140
+ };
141
+ export default validate;
142
+ function _specificSumToDV(sum) {
143
+ const rest = 11 - (sum % 11);
144
+ const exceptions = [
145
+ { rest: 11, dv: 1 },
146
+ { rest: 10, dv: 0 },
147
+ ];
148
+ const inExceptions = exceptions.find((item) => item.rest === rest);
149
+ return !inExceptions ? rest : inExceptions.dv;
150
+ }
151
+ //# sourceMappingURL=nup17.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nup17.js","sourceRoot":"","sources":["../src/nup17.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * isPhone()
3
+ * Calcula se um número de telefone brasileiro, fixo ou celular, é válido.
4
+ *
5
+ * @doc
6
+ * - O número pode ser informado com ou sem DDD e com ou sem máscara.
7
+ *
8
+ * - Após a retirada dos caracteres não-numéricos, o número deve possuir entre 8 e
9
+ * 11 dígitos.
10
+ *
11
+ * - Quando informado com DDD (10 ou 11 dígitos), os dois primeiros dígitos formam o
12
+ * DDD e não podem conter o algarismo 0.
13
+ *
14
+ * - O número local possui 8 dígitos para telefones fixos e 9 dígitos para celulares.
15
+ *
16
+ * - Telefone fixo: o primeiro dígito do número local deve estar entre 2 e 8.
17
+ *
18
+ * - Celular: o primeiro dígito do número local deve ser 9.
19
+ *
20
+ * 1) Partes do número
21
+ * ______ _____________________
22
+ * | DDD | Número |
23
+ * | 1 1 9 8 7 6 5 4 3 2 1 |
24
+ * |______|_____________________|
25
+ *
26
+ *
27
+ * @param {String|Number} value Número de telefone
28
+ * @returns {Boolean}
29
+ */
30
+ import ValidationBRError from './_exceptions/ValidationBRError.js';
31
+ import { checkRepeatedSequence, fakeNumber, applyMask } from './utils.js';
32
+ /**
33
+ * fake()
34
+ * Gera um número válido
35
+ *
36
+ * @param {Boolean} withMask Define se o número deve ser gerado com máscara
37
+ * @returns {String}
38
+ */
39
+ export const fake = (withMask = false) => {
40
+ const ddd = `${1 + Math.floor(Math.random() * 9)}${1 + Math.floor(Math.random() * 9)}`;
41
+ const phone = `${ddd}9${fakeNumber(8, true)}`;
42
+ if (withMask)
43
+ return mask(phone);
44
+ return phone;
45
+ };
46
+ /**
47
+ * validateOrFail()
48
+ * Valida se um número é válido e
49
+ * retorna uma exceção se não estiver
50
+ *
51
+ * @param {String} value Número a ser validado
52
+ * @returns {Boolean}
53
+ */
54
+ export const validateOrFail = (value) => {
55
+ const phone = String(value).replace(/[^0-9]/g, '');
56
+ if (!phone)
57
+ throw ValidationBRError.EMPTY_VALUE;
58
+ if (checkRepeatedSequence(phone)) {
59
+ throw ValidationBRError.REPEATED_SEQUENCE;
60
+ }
61
+ if (phone.length < 8 || phone.length > 11) {
62
+ throw ValidationBRError.INVALID_FORMAT;
63
+ }
64
+ if (phone.length > 9 && [0, 1].indexOf(phone.indexOf('0')) !== -1) {
65
+ throw ValidationBRError.INVALID_FORMAT;
66
+ }
67
+ const localNumber = phone.length > 9 ? phone.substring(2) : phone;
68
+ if (localNumber.length === 8) {
69
+ if ([2, 3, 4, 5, 6, 7, 8].indexOf(Number(localNumber[0])) === -1) {
70
+ throw ValidationBRError.INVALID_FORMAT;
71
+ }
72
+ return true;
73
+ }
74
+ if (localNumber[0] !== '9') {
75
+ throw ValidationBRError.INVALID_FORMAT;
76
+ }
77
+ return true;
78
+ };
79
+ /**
80
+ * validate()
81
+ * Valida se um número é válido
82
+ *
83
+ * @param {String} value Número a ser validado
84
+ * @returns {Boolean}
85
+ */
86
+ export const validate = (value) => {
87
+ try {
88
+ return validateOrFail(value);
89
+ }
90
+ catch (error) {
91
+ return false;
92
+ }
93
+ };
94
+ /**
95
+ * normalize()
96
+ * Retira a máscara do número, retornando apenas os dígitos
97
+ *
98
+ * @param {String} value Número de telefone
99
+ * @returns {String} Número sem máscara
100
+ */
101
+ export const normalize = (value) => String(value).replace(/[^0-9]/g, '');
102
+ /**
103
+ * mask()
104
+ * Aplica a máscara correspondente ao tamanho do número
105
+ *
106
+ * @param {String} value Número de telefone
107
+ * @returns {String} Valor com a máscara
108
+ */
109
+ export const mask = (value) => {
110
+ const phone = normalize(value);
111
+ const masks = {
112
+ 8: '0000-0000',
113
+ 9: '0 0000-0000',
114
+ 10: '(00) 0000-0000',
115
+ 11: '(00) 0 0000-0000',
116
+ };
117
+ const pattern = masks[phone.length];
118
+ if (!pattern)
119
+ return phone;
120
+ return applyMask(phone, pattern);
121
+ };
122
+ export default validate;
123
+ //# sourceMappingURL=phone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.js","sourceRoot":"","sources":["../src/phone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * isPIS()
3
+ * Calcula se um código de PIS/PASEP/NIS/NIT no formato 268.27649.96-0 é válido. Não
4
+ * valida o formato, portanto, 26827649960 é equivalente a 268.27649.96-0 para efeitos
5
+ * desta validação.
6
+ *
7
+ * @doc
8
+ * - O número de PIS deve possuir 11 caracteres
9
+ *
10
+ * - Os caracteres de 1 a 10 são a numeração documento
11
+ *
12
+ * - O caractere 11 é o dígito verificador.
13
+ *
14
+ * 1) Partes do número
15
+ * _______________________________________________
16
+ * | Número | D V |
17
+ * | 2 6 8 . 2 7 6 4 9 . 9 6 - 0 |
18
+ * |_________________________________________|_____|
19
+ *
20
+ * 2) Cálculo do DV.
21
+ *
22
+ * - Soma-se o produto dos 10 algarismos pelos números 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
23
+ *
24
+ * 2 6 8 2 7 6 4 9 9 6
25
+ * x x x x x x x x x x
26
+ * 3 2 9 8 7 6 5 4 3 2
27
+ * = 6 +12 +72 +16 +49 +36 +20 +36 +27 +12 = 286
28
+ *
29
+ * - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
30
+ * 286 / 11 tem resto 0. DV é 0.
31
+ * Obs.: Se o resto da divisão for 0 ou 1, o DV é 0.
32
+ *
33
+ *
34
+ *
35
+ *
36
+ * Fonte: http://www.macoratti.net/alg_pis.htm
37
+ *
38
+ * @param {String} value Objeto postal no formato 268.27649.96-0
39
+ * @returns {Boolean}
40
+ */
41
+ import ValidationBRError from './_exceptions/ValidationBRError.js';
42
+ import { sumElementsByMultipliers, sumToDV, clearValue, fakeNumber, applyMask } from './utils.js';
43
+ /**
44
+ * dv()
45
+ * Calcula o dígito verificador
46
+ *
47
+ * @param {Number|String} value
48
+ * @returns {String}
49
+ */
50
+ export const dv = (value) => {
51
+ const pis = clearValue(value, 10, {
52
+ trimAtRight: true,
53
+ rejectEmpty: true,
54
+ });
55
+ const sum = sumElementsByMultipliers(pis, [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);
56
+ return String(sumToDV(sum));
57
+ };
58
+ /**
59
+ * Aplica uma máscara ao número informado
60
+ *
61
+ * @param {String} value Número de Processo
62
+ * @returns {String} Valor com a máscara
63
+ */
64
+ export const mask = (value) => applyMask(value, '000.00000.00-0');
65
+ /**
66
+ * fake()
67
+ * Gera um número válido
68
+ *
69
+ * @returns {String}
70
+ */
71
+ export const fake = (withMask = false) => {
72
+ const num = fakeNumber(10, true);
73
+ const pis = `${num}${dv(num)}`;
74
+ if (withMask)
75
+ return mask(pis);
76
+ return pis;
77
+ };
78
+ /**
79
+ * validateOrFail()
80
+ * Valida se um número é válido e
81
+ * retorna uma exceção se não estiver
82
+ *
83
+ * @param {String|Number} value Número a ser validado
84
+ * @returns {Boolean}
85
+ */
86
+ export const validateOrFail = (value) => {
87
+ const pis = normalize(value);
88
+ if (dv(pis) !== pis.substring(10, 11)) {
89
+ throw ValidationBRError.INVALID_DV;
90
+ }
91
+ return true;
92
+ };
93
+ /**
94
+ * validate()
95
+ * Valida se um número é válido
96
+ *
97
+ * @param {String|Number} value Número a ser validado
98
+ * @returns {Boolean}
99
+ */
100
+ export const validate = (value) => {
101
+ try {
102
+ return validateOrFail(value);
103
+ }
104
+ catch (error) {
105
+ return false;
106
+ }
107
+ };
108
+ /**
109
+ * Retorna String sem máscara
110
+ *
111
+ * @param {String|Number} value Valor a remover máscara
112
+ * @returns {String}
113
+ */
114
+ export const normalize = (value) => {
115
+ return clearValue(value, 11, {
116
+ fillZerosAtLeft: true,
117
+ rejectEmpty: true,
118
+ rejectHigherLength: true,
119
+ rejectEqualSequence: true,
120
+ });
121
+ };
122
+ export default validate;
123
+ //# sourceMappingURL=pisPasep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pisPasep.js","sourceRoot":"","sources":["../src/pisPasep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE/F;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAsB,EAAU,EAAE;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE;QAChC,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1E,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,WAAoB,KAAK,EAAU,EAAE;IACxD,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAEjC,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAE/B,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAW,EAAE;IAChE,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,iBAAiB,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAsB,EAAW,EAAE;IAC1D,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,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAsB,EAAU,EAAE;IAC1D,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE;QAC3B,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,IAAI;QACxB,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}