validation-br 0.8.3 → 1.0.0-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/.eslintignore +2 -0
- package/.eslintrc.js +76 -11
- package/.github/workflows/test.yml +39 -0
- package/.prettierignore +1 -0
- package/.prettierrc.js +7 -0
- package/dist/cnh.js +123 -0
- package/dist/cnh.js.map +1 -0
- package/dist/cnh.test.js +117 -0
- package/dist/cnh.test.js.map +1 -0
- package/dist/cnpj.js +112 -0
- package/dist/cnpj.js.map +1 -0
- package/dist/cnpj.test.js +141 -0
- package/dist/cnpj.test.js.map +1 -0
- package/dist/cpf.js +134 -0
- package/dist/cpf.js.map +1 -0
- package/dist/cpf.test.js +130 -0
- package/dist/cpf.test.js.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.js +33 -0
- package/dist/index.test.js.map +1 -0
- package/dist/judicialProcess.js +153 -0
- package/dist/judicialProcess.js.map +1 -0
- package/dist/judicialProcess.test.js +123 -0
- package/dist/judicialProcess.test.js.map +1 -0
- package/dist/pisPasep.js +113 -0
- package/dist/pisPasep.js.map +1 -0
- package/dist/pisPasep.test.js +129 -0
- package/dist/pisPasep.test.js.map +1 -0
- package/dist/postalCode.js +150 -0
- package/dist/postalCode.js.map +1 -0
- package/dist/postalCode.test.js +135 -0
- package/dist/postalCode.test.js.map +1 -0
- package/dist/renavam.js +108 -0
- package/dist/renavam.js.map +1 -0
- package/dist/renavam.test.js +113 -0
- package/dist/renavam.test.js.map +1 -0
- package/dist/tituloEleitor.js +130 -0
- package/dist/tituloEleitor.js.map +1 -0
- package/dist/tituloEleitor.test.js +132 -0
- package/dist/tituloEleitor.test.js.map +1 -0
- package/dist/utils-applyMask.test.js +17 -0
- package/dist/utils-applyMask.test.js.map +1 -0
- package/dist/utils-clearValue.test.js +50 -0
- package/dist/utils-clearValue.test.js.map +1 -0
- package/dist/utils-fakeNumber.test.js +17 -0
- package/dist/utils-fakeNumber.test.js.map +1 -0
- package/dist/utils-insertAtPosition.test.js +16 -0
- package/dist/utils-insertAtPosition.test.js.map +1 -0
- package/dist/utils-invalidListGenerator.test.js +23 -0
- package/dist/utils-invalidListGenerator.test.js.map +1 -0
- package/dist/utils-removeFromPosition.test.js +16 -0
- package/dist/utils-removeFromPosition.test.js.map +1 -0
- package/dist/utils-sumElementsByMultipliers.test.js +32 -0
- package/dist/utils-sumElementsByMultipliers.test.js.map +1 -0
- package/dist/utils-sumToDV.test.js +16 -0
- package/dist/utils-sumToDV.test.js.map +1 -0
- package/dist/utils.js +167 -0
- package/dist/utils.js.map +1 -0
- package/jest.config.js +14 -0
- package/package.json +40 -48
- package/readme.md +243 -88
- package/src/cnh.test.ts +114 -0
- package/src/cnh.ts +140 -0
- package/src/cnpj.test.ts +136 -0
- package/{dist/documents/cnpj.js → src/cnpj.ts} +74 -21
- package/src/cpf.test.ts +125 -0
- package/src/cpf.ts +150 -0
- package/src/index.test.ts +35 -0
- package/src/index.ts +19 -0
- package/src/judicialProcess.test.ts +118 -0
- package/src/judicialProcess.ts +167 -0
- package/src/pisPasep.test.ts +124 -0
- package/src/pisPasep.ts +128 -0
- package/src/postalCode.test.ts +132 -0
- package/src/postalCode.ts +164 -0
- package/src/renavam.test.ts +110 -0
- package/src/renavam.ts +122 -0
- package/src/tituloEleitor.test.ts +129 -0
- package/src/tituloEleitor.ts +146 -0
- package/src/utils-applyMask.test.ts +17 -0
- package/src/utils-clearValue.test.ts +55 -0
- package/src/utils-fakeNumber.test.ts +19 -0
- package/src/utils-insertAtPosition.test.ts +15 -0
- package/src/utils-invalidListGenerator.test.ts +27 -0
- package/src/utils-removeFromPosition.test.ts +15 -0
- package/src/utils-sumElementsByMultipliers.test.ts +34 -0
- package/src/utils-sumToDV.test.ts +16 -0
- package/src/utils.ts +172 -0
- package/tsconfig.json +23 -0
- package/.babelrc +0 -15
- package/.prettierrc +0 -9
- package/dist/documents/cnh.js +0 -77
- package/dist/documents/cnh.js.map +0 -1
- package/dist/documents/cnpj.js.map +0 -1
- package/dist/documents/cpf.js +0 -83
- package/dist/documents/cpf.js.map +0 -1
- package/dist/documents/index.js +0 -23
- package/dist/documents/index.js.map +0 -1
- package/dist/documents/pis-pasep.js +0 -71
- package/dist/documents/pis-pasep.js.map +0 -1
- package/dist/documents/postal-code.js +0 -72
- package/dist/documents/postal-code.js.map +0 -1
- package/dist/documents/titulo-eleitor.js +0 -74
- package/dist/documents/titulo-eleitor.js.map +0 -1
- package/dist/lib/utils.js +0 -60
- package/dist/lib/utils.js.map +0 -1
- package/docs.md +0 -0
- package/index.js +0 -3
package/src/cnpj.test.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// import { isCNPJ } from './cnpj'
|
|
2
|
+
import isCNPJ, { dv, fake, mask, validate, validateOrFail } from './cnpj'
|
|
3
|
+
|
|
4
|
+
describe('CNPJ', () => {
|
|
5
|
+
test('isCNPJ() - Números válidos', () => {
|
|
6
|
+
const list = [
|
|
7
|
+
// Com máscara
|
|
8
|
+
'11.222.333/0001-81',
|
|
9
|
+
'73.797.980/0001-79',
|
|
10
|
+
'06.946.762/0001-61',
|
|
11
|
+
'96.051.576/0001-57',
|
|
12
|
+
'55.585.709/0001-98',
|
|
13
|
+
// inteiro
|
|
14
|
+
99360938000180,
|
|
15
|
+
23693443000100,
|
|
16
|
+
// string
|
|
17
|
+
'32432147000147',
|
|
18
|
+
'91951438000100',
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
list.forEach((cnpj) => {
|
|
22
|
+
expect(isCNPJ(cnpj)).toBeTruthy()
|
|
23
|
+
})
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('validate() - Números válidos', () => {
|
|
27
|
+
const list = [
|
|
28
|
+
// Com máscara
|
|
29
|
+
'11.222.333/0001-81',
|
|
30
|
+
'73.797.980/0001-79',
|
|
31
|
+
'06.946.762/0001-61',
|
|
32
|
+
'96.051.576/0001-57',
|
|
33
|
+
'55.585.709/0001-98',
|
|
34
|
+
// inteiro
|
|
35
|
+
99360938000180,
|
|
36
|
+
23693443000100,
|
|
37
|
+
// string
|
|
38
|
+
'32432147000147',
|
|
39
|
+
'91951438000100',
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
list.forEach((cnpj) => {
|
|
43
|
+
expect(validate(cnpj)).toBeTruthy()
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
test('validate() - Números inválidos', () => {
|
|
48
|
+
const list = [
|
|
49
|
+
'53.797.980/0001-79',
|
|
50
|
+
'36.946.762/0001-61',
|
|
51
|
+
'26.051.576/0001-57',
|
|
52
|
+
'85.585.709/0001-98',
|
|
53
|
+
'39360938000180',
|
|
54
|
+
'93693443000100',
|
|
55
|
+
'12432147000147',
|
|
56
|
+
'61951438000100',
|
|
57
|
+
'11111111111111',
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
list.forEach((cnpj) => {
|
|
61
|
+
expect(validate(cnpj)).toBeFalsy()
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test('validateOrFail() - Números inválidos', () => {
|
|
66
|
+
const list = [
|
|
67
|
+
'53.797.980/0001-79',
|
|
68
|
+
'36.946.762/0001-61',
|
|
69
|
+
'26.051.576/0001-57',
|
|
70
|
+
'85.585.709/0001-98',
|
|
71
|
+
'39360938000180',
|
|
72
|
+
'93693443000100',
|
|
73
|
+
'12432147000147',
|
|
74
|
+
'61951438000100',
|
|
75
|
+
'11111111111111',
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
list.forEach((cnpj) => {
|
|
79
|
+
expect(() => validateOrFail(cnpj)).toThrow()
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
test('Parâmetro não informado', () => {
|
|
84
|
+
expect(isCNPJ('')).toBeFalsy()
|
|
85
|
+
expect(validate('')).toBeFalsy()
|
|
86
|
+
expect(() => validateOrFail('')).toThrow()
|
|
87
|
+
expect(() => dv('')).toThrow()
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
test('fake() - Gera fakes sem máscara', () => {
|
|
91
|
+
for (let i = 0; i < 5; i += 1) {
|
|
92
|
+
const cnpj = fake()
|
|
93
|
+
expect(validate(cnpj)).toBeTruthy()
|
|
94
|
+
expect(cnpj).toHaveLength(14)
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
test('fake() - Gera fakes com máscara', () => {
|
|
99
|
+
for (let i = 0; i < 5; i += 1) {
|
|
100
|
+
const cnpj = fake(true)
|
|
101
|
+
expect(validate(cnpj)).toBeTruthy()
|
|
102
|
+
expect(cnpj).toHaveLength(18)
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
test('dv() - Verificando se o DV gerado está correto', () => {
|
|
107
|
+
const list = [
|
|
108
|
+
{ num: '112223330001', expected: '81' },
|
|
109
|
+
{ num: 993609380001, expected: '80' },
|
|
110
|
+
{ num: '324321470001', expected: '47' },
|
|
111
|
+
]
|
|
112
|
+
|
|
113
|
+
list.forEach((item) => {
|
|
114
|
+
const calcDv = dv(item.num)
|
|
115
|
+
|
|
116
|
+
expect(calcDv).toBe(item.expected)
|
|
117
|
+
expect(typeof calcDv).toBe('string')
|
|
118
|
+
})
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
test('mask() - Testando se a máscara foi gerada corretamente', () => {
|
|
122
|
+
const list = [
|
|
123
|
+
{ value: '11222333000181', expected: '11.222.333/0001-81' },
|
|
124
|
+
{ value: 99360938000180, expected: '99.360.938/0001-80' },
|
|
125
|
+
{ value: '32432147000147', expected: '32.432.147/0001-47' },
|
|
126
|
+
{ value: 432147000147, expected: '00.432.147/0001-47' },
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
list.forEach((item) => {
|
|
130
|
+
const masked = mask(item.value)
|
|
131
|
+
|
|
132
|
+
expect(masked).toBe(item.expected)
|
|
133
|
+
expect(masked).toHaveLength(18)
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
})
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _require = require('../lib/utils'),
|
|
4
|
-
invalidListGenerator = _require.invalidListGenerator,
|
|
5
|
-
sumElementsByMultipliers = _require.sumElementsByMultipliers,
|
|
6
|
-
sumToDV = _require.sumToDV;
|
|
7
1
|
/**
|
|
8
2
|
* isCNPJ()
|
|
9
3
|
* Calcula se um CNPJ é válido
|
|
@@ -56,20 +50,79 @@ var _require = require('../lib/utils'),
|
|
|
56
50
|
* @returns {Boolean}
|
|
57
51
|
*/
|
|
58
52
|
|
|
53
|
+
import {
|
|
54
|
+
invalidListGenerator,
|
|
55
|
+
sumElementsByMultipliers,
|
|
56
|
+
sumToDV,
|
|
57
|
+
clearValue,
|
|
58
|
+
fakeNumber,
|
|
59
|
+
applyMask,
|
|
60
|
+
} from './utils'
|
|
61
|
+
|
|
62
|
+
export const dv = (value: string | number): string => {
|
|
63
|
+
const cnpj = clearValue(value, 12)
|
|
64
|
+
|
|
65
|
+
const blackList = invalidListGenerator(12)
|
|
66
|
+
if (blackList.includes(cnpj)) {
|
|
67
|
+
throw new Error('CNPJ é obrigatório')
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const sum1 = sumElementsByMultipliers(cnpj.substring(0, 12), '543298765432')
|
|
71
|
+
const dv1 = sumToDV(sum1)
|
|
72
|
+
|
|
73
|
+
const sum2 = sumElementsByMultipliers(cnpj.substring(0, 12) + dv1, '6543298765432')
|
|
74
|
+
const dv2 = sumToDV(sum2)
|
|
75
|
+
|
|
76
|
+
return `${dv1}${dv2}`
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Aplica uma máscara ao número informado
|
|
81
|
+
*
|
|
82
|
+
* @param {String} value Número de Processo
|
|
83
|
+
* @returns {String} Valor com a máscara
|
|
84
|
+
*/
|
|
85
|
+
export const mask = (value: string | number): string => applyMask(value, '00.000.000/0000-00')
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
*
|
|
89
|
+
*
|
|
90
|
+
*/
|
|
91
|
+
export const fake = (withMask: boolean = false): string => {
|
|
92
|
+
const num = fakeNumber(12, true)
|
|
93
|
+
|
|
94
|
+
const cnpj = `${num}${dv(num)}`
|
|
95
|
+
|
|
96
|
+
if (withMask) return mask(cnpj)
|
|
97
|
+
return cnpj
|
|
98
|
+
}
|
|
59
99
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
100
|
+
/**
|
|
101
|
+
* validate()
|
|
102
|
+
* Valida se um número de processo está correto
|
|
103
|
+
*
|
|
104
|
+
*/
|
|
105
|
+
export const validateOrFail = (value: string | number): boolean => {
|
|
106
|
+
const cnpj = clearValue(value, 14)
|
|
107
|
+
|
|
108
|
+
if (dv(cnpj) !== cnpj.substring(12, 14)) {
|
|
109
|
+
throw new Error('Dígito verificador inválido')
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return true
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* validate()
|
|
117
|
+
* Valida se um número de processo está correto
|
|
118
|
+
*
|
|
119
|
+
*/
|
|
120
|
+
export const validate = (value: string | number): boolean => {
|
|
121
|
+
try {
|
|
122
|
+
return validateOrFail(value)
|
|
123
|
+
} catch (error) {
|
|
124
|
+
return false
|
|
125
|
+
}
|
|
126
|
+
}
|
|
73
127
|
|
|
74
|
-
|
|
75
|
-
//# sourceMappingURL=cnpj.js.map
|
|
128
|
+
export default validate
|
package/src/cpf.test.ts
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import isCPF, { dv, fake, mask, validate, validateOrFail } from './cpf'
|
|
2
|
+
|
|
3
|
+
describe('CPF', () => {
|
|
4
|
+
test('isCPF() - Números válidos', () => {
|
|
5
|
+
const list = [
|
|
6
|
+
// masked
|
|
7
|
+
'133.782.710-00',
|
|
8
|
+
'400.448.260-79',
|
|
9
|
+
// integer
|
|
10
|
+
8796742020, // começa com zero
|
|
11
|
+
74172316085,
|
|
12
|
+
// string
|
|
13
|
+
'15886489070',
|
|
14
|
+
'90889477086',
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
list.forEach((cpf) => {
|
|
18
|
+
expect(isCPF(cpf)).toBeTruthy()
|
|
19
|
+
})
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
test('validate() - Números válidos', () => {
|
|
23
|
+
const list = [
|
|
24
|
+
// masked
|
|
25
|
+
'133.782.710-00',
|
|
26
|
+
'400.448.260-79',
|
|
27
|
+
// integer
|
|
28
|
+
8796742020, // começa com zero
|
|
29
|
+
74172316085,
|
|
30
|
+
// string
|
|
31
|
+
'15886489070',
|
|
32
|
+
'90889477086',
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
list.forEach((cpf) => {
|
|
36
|
+
expect(validate(cpf)).toBeTruthy()
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
test('validate() - Números inválidos', () => {
|
|
41
|
+
const list = [
|
|
42
|
+
'287.967.420-20',
|
|
43
|
+
'333.782.710-00',
|
|
44
|
+
'200.448.260-79',
|
|
45
|
+
'24172316085',
|
|
46
|
+
'25886489070',
|
|
47
|
+
'20889477086',
|
|
48
|
+
'11111111111',
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
list.forEach((cpf) => {
|
|
52
|
+
expect(validate(cpf)).toBeFalsy()
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
test('validateOrFail() - Números inválidos', () => {
|
|
57
|
+
const list = [
|
|
58
|
+
'287.967.420-20',
|
|
59
|
+
'333.782.710-00',
|
|
60
|
+
'200.448.260-79',
|
|
61
|
+
'24172316085',
|
|
62
|
+
'25886489070',
|
|
63
|
+
'20889477086',
|
|
64
|
+
'11111111111',
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
list.forEach((cpf) => {
|
|
68
|
+
expect(() => validateOrFail(cpf)).toThrow()
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
test('Parâmetro não informado', () => {
|
|
73
|
+
expect(isCPF('')).toBeFalsy()
|
|
74
|
+
expect(validate('')).toBeFalsy()
|
|
75
|
+
expect(() => validateOrFail('')).toThrow()
|
|
76
|
+
expect(() => dv('')).toThrow()
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
test('fake() - Gera fakes sem máscara', () => {
|
|
80
|
+
for (let i = 0; i < 5; i += 1) {
|
|
81
|
+
const cpf = fake()
|
|
82
|
+
expect(validate(cpf)).toBeTruthy()
|
|
83
|
+
expect(cpf).toHaveLength(11)
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
test('fake() - Gera fakes com máscara', () => {
|
|
88
|
+
for (let i = 0; i < 5; i += 1) {
|
|
89
|
+
const cpf = fake(true)
|
|
90
|
+
expect(validate(cpf)).toBeTruthy()
|
|
91
|
+
expect(cpf).toHaveLength(14)
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
test('dv() - Verificando se o DV gerado está correto', () => {
|
|
96
|
+
const list = [
|
|
97
|
+
{ num: '741723160', expected: '85' },
|
|
98
|
+
{ num: 158864890, expected: '70' },
|
|
99
|
+
{ num: '908894770', expected: '86' },
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
list.forEach((item) => {
|
|
103
|
+
const calcDv = dv(item.num)
|
|
104
|
+
|
|
105
|
+
expect(calcDv).toBe(item.expected)
|
|
106
|
+
expect(typeof calcDv).toBe('string')
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
test('mask() - Testando se a máscara foi gerada corretamente', () => {
|
|
111
|
+
const list = [
|
|
112
|
+
{ num: '74172316085', expected: '741.723.160-85' },
|
|
113
|
+
{ num: 15886489070, expected: '158.864.890-70' },
|
|
114
|
+
{ num: '90889477086', expected: '908.894.770-86' },
|
|
115
|
+
{ num: 889477086, expected: '008.894.770-86' },
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
list.forEach((item) => {
|
|
119
|
+
const masked = mask(item.num)
|
|
120
|
+
|
|
121
|
+
expect(masked).toBe(item.expected)
|
|
122
|
+
expect(masked).toHaveLength(14)
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
})
|
package/src/cpf.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isCPF()
|
|
3
|
+
* Calcula se um CPF é válido
|
|
4
|
+
*
|
|
5
|
+
* @doc
|
|
6
|
+
* CPF deve possuir 11 dígitos.
|
|
7
|
+
*
|
|
8
|
+
* - Os caracteres 1 a 8 são números sequenciais definidos pela Receita Federal
|
|
9
|
+
*
|
|
10
|
+
* - O caractere 9 refere-se à região fiscal emissora do documento
|
|
11
|
+
* 1 – DF, GO, MS, MT e TO
|
|
12
|
+
* 2 – AC, AM, AP, PA, RO e RR
|
|
13
|
+
* 3 – CE, MA e PI
|
|
14
|
+
* 4 – AL, PB, PE, RN
|
|
15
|
+
* 5 – BA e SE
|
|
16
|
+
* 6 – MG
|
|
17
|
+
* 7 – ES e RJ
|
|
18
|
+
* 8 – SP
|
|
19
|
+
* 9 – PR e SC
|
|
20
|
+
* 0 – RS
|
|
21
|
+
*
|
|
22
|
+
* - Os caracteres 10 e 11 são dígitos verificadores.
|
|
23
|
+
*
|
|
24
|
+
* 1) Partes do número
|
|
25
|
+
* ------------------------------------------------
|
|
26
|
+
* | Número | R | DV |
|
|
27
|
+
* 2 8 0 . 0 1 2 . 3 8 9 - 3 8
|
|
28
|
+
*
|
|
29
|
+
* 2) Cálculo do primeiro DV.
|
|
30
|
+
*
|
|
31
|
+
* - Soma-se o produto das algarismos 1 a 9 pelos números 10, 9, 8, 7, 6, 5, 4, 3, 2
|
|
32
|
+
*
|
|
33
|
+
* 2 8 0 0 1 2 3 8 9
|
|
34
|
+
* x x x x x x x x x
|
|
35
|
+
* 10 9 8 7 6 5 4 3 2
|
|
36
|
+
* = 20 +72 +0 +0 +6 +10 +12 +24 +18 = 162
|
|
37
|
+
*
|
|
38
|
+
* - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
|
|
39
|
+
* 162 / 11 tem resto 8. 11 - 8 = 3. DV1 é 3.
|
|
40
|
+
* Obs.: Caso o cálculo de DV1 retorne 10, o resultado será 0.
|
|
41
|
+
*
|
|
42
|
+
* 3) Cálculo do segundo DV.
|
|
43
|
+
*
|
|
44
|
+
* - Soma-se o produto das algarismos 1 a 10 pelos números 11, 10, 9, 8, 7, 6, 5, 4, 3, 2
|
|
45
|
+
*
|
|
46
|
+
* 2 8 0 0 1 2 3 8 9 3
|
|
47
|
+
* x x x x x x x x x x
|
|
48
|
+
* 11 10 9 8 7 6 5 4 3 2
|
|
49
|
+
* = 22 +80 +0 +0 +7 +12 +15 +32 +27 = 201
|
|
50
|
+
*
|
|
51
|
+
* - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
|
|
52
|
+
* 201 / 11 tem resto 3. 11 - 3 = 8. DV2 é 8.
|
|
53
|
+
* Obs.: Caso o cálculo de DV2 retorne 10, o resultado será 0.
|
|
54
|
+
*
|
|
55
|
+
* Fonte: http://clubes.obmep.org.br/blog/a-matematica-nos-documentos-cpf/
|
|
56
|
+
*
|
|
57
|
+
* @param {String} value Título eleitoral
|
|
58
|
+
* @returns {Boolean}
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
import {
|
|
62
|
+
invalidListGenerator,
|
|
63
|
+
sumElementsByMultipliers,
|
|
64
|
+
sumToDV,
|
|
65
|
+
clearValue,
|
|
66
|
+
fakeNumber,
|
|
67
|
+
applyMask,
|
|
68
|
+
} from './utils'
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* dv()
|
|
72
|
+
* Calcula o dígito verificador de um CPF
|
|
73
|
+
*
|
|
74
|
+
* @param {Number|String} value
|
|
75
|
+
* @returns {String}
|
|
76
|
+
*/
|
|
77
|
+
export const dv = (value: string | number): string => {
|
|
78
|
+
if (!value) throw new Error('CPF não informado')
|
|
79
|
+
|
|
80
|
+
const cpf = clearValue(value, 9)
|
|
81
|
+
|
|
82
|
+
const invalidList = invalidListGenerator(9)
|
|
83
|
+
if (invalidList.includes(cpf)) {
|
|
84
|
+
throw new Error('CPF não pode ser uma sequência de números iguais')
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const sum1 = sumElementsByMultipliers(cpf, [10, 9, 8, 7, 6, 5, 4, 3, 2])
|
|
88
|
+
const dv1 = sumToDV(sum1)
|
|
89
|
+
|
|
90
|
+
const sum2 = sumElementsByMultipliers(cpf + dv1, [11, 10, 9, 8, 7, 6, 5, 4, 3, 2])
|
|
91
|
+
const dv2 = sumToDV(sum2)
|
|
92
|
+
|
|
93
|
+
return `${dv1}${dv2}`
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Aplica uma máscara ao número informado
|
|
98
|
+
*
|
|
99
|
+
* @param {String} value Número de Processo
|
|
100
|
+
* @returns {String} Valor com a máscara
|
|
101
|
+
*/
|
|
102
|
+
export const mask = (value: string | number): string => applyMask(value, '000.000.000-00')
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* fake()
|
|
106
|
+
* Gera um número válido
|
|
107
|
+
*
|
|
108
|
+
* @returns {String}
|
|
109
|
+
*/
|
|
110
|
+
export const fake = (withMask: boolean = false): string => {
|
|
111
|
+
const num = fakeNumber(9, true)
|
|
112
|
+
|
|
113
|
+
const cpf = `${num}${dv(num)}`
|
|
114
|
+
|
|
115
|
+
if (withMask) return mask(cpf)
|
|
116
|
+
return cpf
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* validateOrFail()
|
|
121
|
+
* Valida se um número de processo está correto e
|
|
122
|
+
* retorna uma exceção se não estiver
|
|
123
|
+
*
|
|
124
|
+
* @returns {Boolean}
|
|
125
|
+
*/
|
|
126
|
+
export const validateOrFail = (value: string | number): boolean => {
|
|
127
|
+
const cpf = clearValue(value, 11)
|
|
128
|
+
|
|
129
|
+
if (dv(cpf) !== cpf.substring(9, 11)) {
|
|
130
|
+
throw new Error('Dígito verificador inválido')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return true
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* validate()
|
|
138
|
+
* Valida se um número de processo está correto
|
|
139
|
+
*
|
|
140
|
+
* @returns {Boolean}
|
|
141
|
+
*/
|
|
142
|
+
export const validate = (value: string | number): boolean => {
|
|
143
|
+
try {
|
|
144
|
+
return validateOrFail(value)
|
|
145
|
+
} catch (error) {
|
|
146
|
+
return false
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export default validate
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import ValidateBR from './index'
|
|
2
|
+
|
|
3
|
+
describe('ValidateBR', () => {
|
|
4
|
+
test('Deve importar isCNH', () => {
|
|
5
|
+
expect(ValidateBR.isCNH).toBeDefined()
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
test('Deve importar isCNPJ', () => {
|
|
9
|
+
expect(ValidateBR.isCNPJ).toBeDefined()
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
test('Deve importar isCPF', () => {
|
|
13
|
+
expect(ValidateBR.isCPF).toBeDefined()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
test('Deve importar isJudicialProcess', () => {
|
|
17
|
+
expect(ValidateBR.isJudicialProcess).toBeDefined()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
test('Deve importar isPIS', () => {
|
|
21
|
+
expect(ValidateBR.isPIS).toBeDefined()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
test('Deve importar isPostalCode', () => {
|
|
25
|
+
expect(ValidateBR.isPostalCode).toBeDefined()
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('Deve importar isRenavam', () => {
|
|
29
|
+
expect(ValidateBR.isRenavam).toBeDefined()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('Deve importar isTituloEleitor', () => {
|
|
33
|
+
expect(ValidateBR.isTituloEleitor).toBeDefined()
|
|
34
|
+
})
|
|
35
|
+
})
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import isCNH from './cnh'
|
|
2
|
+
import isCNPJ from './cnpj'
|
|
3
|
+
import isCPF from './cpf'
|
|
4
|
+
import isJudicialProcess from './judicialProcess'
|
|
5
|
+
import isPIS from './pisPasep'
|
|
6
|
+
import isPostalCode from './postalCode'
|
|
7
|
+
import isRenavam from './renavam'
|
|
8
|
+
import isTituloEleitor from './tituloEleitor'
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
isCNH,
|
|
12
|
+
isCNPJ,
|
|
13
|
+
isCPF,
|
|
14
|
+
isJudicialProcess,
|
|
15
|
+
isPIS,
|
|
16
|
+
isPostalCode,
|
|
17
|
+
isRenavam,
|
|
18
|
+
isTituloEleitor,
|
|
19
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import isJudicialProcess, { dv, fake, mask, validate, validateOrFail } from './judicialProcess'
|
|
2
|
+
|
|
3
|
+
describe('JudicialProcess', () => {
|
|
4
|
+
test('isJudicialProcess() - Números válidos', () => {
|
|
5
|
+
const list = [
|
|
6
|
+
'20802520125150049',
|
|
7
|
+
'61052838320098130024',
|
|
8
|
+
'00110060720168200100',
|
|
9
|
+
'08002785520134058400',
|
|
10
|
+
'08002732820164058400',
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
list.forEach((judicialProcess) => {
|
|
14
|
+
expect(isJudicialProcess(judicialProcess)).toBeTruthy()
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('validate() - Números válidos', () => {
|
|
19
|
+
const list = [
|
|
20
|
+
'20802520125150049',
|
|
21
|
+
'61052838320098130024',
|
|
22
|
+
'00110060720168200100',
|
|
23
|
+
'08002785520134058400',
|
|
24
|
+
'08002732820164058400',
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
list.forEach((judicialProcess) => {
|
|
28
|
+
expect(validate(judicialProcess)).toBeTruthy()
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('validate() - Números inválidos', () => {
|
|
33
|
+
const list = [
|
|
34
|
+
'20802520125150044',
|
|
35
|
+
'61052838320098130023',
|
|
36
|
+
'00110060720168200102',
|
|
37
|
+
'08002785520134058401',
|
|
38
|
+
'08002732820164058406',
|
|
39
|
+
'08002732820160058400', // Órgão judiciário igual a 0
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
list.forEach((judicialProcess) => {
|
|
43
|
+
expect(validate(judicialProcess)).toBeFalsy()
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
test('validateOrFail() - Números inválidos', () => {
|
|
48
|
+
const list = [
|
|
49
|
+
'20802520125150044',
|
|
50
|
+
'61052838320098130023',
|
|
51
|
+
'00110060720168200102',
|
|
52
|
+
'08002785520134058401',
|
|
53
|
+
'08002732820164058406',
|
|
54
|
+
'08002732820160058400', // Órgão judiciário igual a 0
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
list.forEach((judicialProcess) => {
|
|
58
|
+
expect(() => validateOrFail(judicialProcess)).toThrow()
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
test('Parâmetro não informado', () => {
|
|
63
|
+
expect(isJudicialProcess('')).toBeFalsy()
|
|
64
|
+
expect(validate('')).toBeFalsy()
|
|
65
|
+
expect(() => validateOrFail('')).toThrow()
|
|
66
|
+
expect(() => dv('')).toThrow()
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test('fake() - Gera fakes sem máscara', () => {
|
|
70
|
+
for (let i = 0; i < 5; i += 1) {
|
|
71
|
+
const judicialProcess = fake()
|
|
72
|
+
expect(validate(judicialProcess)).toBeTruthy()
|
|
73
|
+
expect(judicialProcess).toHaveLength(20)
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
test('fake() - Gera fakes com máscara', () => {
|
|
78
|
+
for (let i = 0; i < 5; i += 1) {
|
|
79
|
+
const judicialProcess = fake(true)
|
|
80
|
+
expect(validate(judicialProcess)).toBeTruthy()
|
|
81
|
+
expect(judicialProcess).toHaveLength(25)
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
test('dv() - Verificando se o DV gerado está correto', () => {
|
|
86
|
+
const list = [
|
|
87
|
+
{ num: '000208020125150049', expected: '25' },
|
|
88
|
+
{ num: '610528320098130024', expected: '83' },
|
|
89
|
+
{ num: '001100620168200100', expected: '07' },
|
|
90
|
+
{ num: '080027820134058400', expected: '55' },
|
|
91
|
+
{ num: '080027320164058400', expected: '28' },
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
list.forEach((item) => {
|
|
95
|
+
const calcDv = dv(item.num)
|
|
96
|
+
|
|
97
|
+
expect(calcDv).toBe(item.expected)
|
|
98
|
+
expect(typeof calcDv).toBe('string')
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
test('mask() - Testando se a máscara foi gerada corretamente', () => {
|
|
103
|
+
const list = [
|
|
104
|
+
{ num: '20802520125150049', expected: '0002080-25.2012.5.15.0049' },
|
|
105
|
+
{ num: '61052838320098130024', expected: '6105283-83.2009.8.13.0024' },
|
|
106
|
+
{ num: '00110060720168200100', expected: '0011006-07.2016.8.20.0100' },
|
|
107
|
+
{ num: '08002785520134058400', expected: '0800278-55.2013.4.05.8400' },
|
|
108
|
+
{ num: '08002732820164058400', expected: '0800273-28.2016.4.05.8400' },
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
list.forEach((item) => {
|
|
112
|
+
const masked = mask(item.num)
|
|
113
|
+
|
|
114
|
+
expect(masked).toBe(item.expected)
|
|
115
|
+
expect(masked).toHaveLength(25)
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
})
|