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.
Files changed (109) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +76 -11
  3. package/.github/workflows/test.yml +39 -0
  4. package/.prettierignore +1 -0
  5. package/.prettierrc.js +7 -0
  6. package/dist/cnh.js +123 -0
  7. package/dist/cnh.js.map +1 -0
  8. package/dist/cnh.test.js +117 -0
  9. package/dist/cnh.test.js.map +1 -0
  10. package/dist/cnpj.js +112 -0
  11. package/dist/cnpj.js.map +1 -0
  12. package/dist/cnpj.test.js +141 -0
  13. package/dist/cnpj.test.js.map +1 -0
  14. package/dist/cpf.js +134 -0
  15. package/dist/cpf.js.map +1 -0
  16. package/dist/cpf.test.js +130 -0
  17. package/dist/cpf.test.js.map +1 -0
  18. package/dist/index.js +24 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.test.js +33 -0
  21. package/dist/index.test.js.map +1 -0
  22. package/dist/judicialProcess.js +153 -0
  23. package/dist/judicialProcess.js.map +1 -0
  24. package/dist/judicialProcess.test.js +123 -0
  25. package/dist/judicialProcess.test.js.map +1 -0
  26. package/dist/pisPasep.js +113 -0
  27. package/dist/pisPasep.js.map +1 -0
  28. package/dist/pisPasep.test.js +129 -0
  29. package/dist/pisPasep.test.js.map +1 -0
  30. package/dist/postalCode.js +150 -0
  31. package/dist/postalCode.js.map +1 -0
  32. package/dist/postalCode.test.js +135 -0
  33. package/dist/postalCode.test.js.map +1 -0
  34. package/dist/renavam.js +108 -0
  35. package/dist/renavam.js.map +1 -0
  36. package/dist/renavam.test.js +113 -0
  37. package/dist/renavam.test.js.map +1 -0
  38. package/dist/tituloEleitor.js +130 -0
  39. package/dist/tituloEleitor.js.map +1 -0
  40. package/dist/tituloEleitor.test.js +132 -0
  41. package/dist/tituloEleitor.test.js.map +1 -0
  42. package/dist/utils-applyMask.test.js +17 -0
  43. package/dist/utils-applyMask.test.js.map +1 -0
  44. package/dist/utils-clearValue.test.js +50 -0
  45. package/dist/utils-clearValue.test.js.map +1 -0
  46. package/dist/utils-fakeNumber.test.js +17 -0
  47. package/dist/utils-fakeNumber.test.js.map +1 -0
  48. package/dist/utils-insertAtPosition.test.js +16 -0
  49. package/dist/utils-insertAtPosition.test.js.map +1 -0
  50. package/dist/utils-invalidListGenerator.test.js +23 -0
  51. package/dist/utils-invalidListGenerator.test.js.map +1 -0
  52. package/dist/utils-removeFromPosition.test.js +16 -0
  53. package/dist/utils-removeFromPosition.test.js.map +1 -0
  54. package/dist/utils-sumElementsByMultipliers.test.js +32 -0
  55. package/dist/utils-sumElementsByMultipliers.test.js.map +1 -0
  56. package/dist/utils-sumToDV.test.js +16 -0
  57. package/dist/utils-sumToDV.test.js.map +1 -0
  58. package/dist/utils.js +167 -0
  59. package/dist/utils.js.map +1 -0
  60. package/jest.config.js +14 -0
  61. package/package.json +40 -48
  62. package/readme.md +243 -88
  63. package/src/cnh.test.ts +114 -0
  64. package/src/cnh.ts +140 -0
  65. package/src/cnpj.test.ts +136 -0
  66. package/{dist/documents/cnpj.js → src/cnpj.ts} +74 -21
  67. package/src/cpf.test.ts +125 -0
  68. package/src/cpf.ts +150 -0
  69. package/src/index.test.ts +35 -0
  70. package/src/index.ts +19 -0
  71. package/src/judicialProcess.test.ts +118 -0
  72. package/src/judicialProcess.ts +167 -0
  73. package/src/pisPasep.test.ts +124 -0
  74. package/src/pisPasep.ts +128 -0
  75. package/src/postalCode.test.ts +132 -0
  76. package/src/postalCode.ts +164 -0
  77. package/src/renavam.test.ts +110 -0
  78. package/src/renavam.ts +122 -0
  79. package/src/tituloEleitor.test.ts +129 -0
  80. package/src/tituloEleitor.ts +146 -0
  81. package/src/utils-applyMask.test.ts +17 -0
  82. package/src/utils-clearValue.test.ts +55 -0
  83. package/src/utils-fakeNumber.test.ts +19 -0
  84. package/src/utils-insertAtPosition.test.ts +15 -0
  85. package/src/utils-invalidListGenerator.test.ts +27 -0
  86. package/src/utils-removeFromPosition.test.ts +15 -0
  87. package/src/utils-sumElementsByMultipliers.test.ts +34 -0
  88. package/src/utils-sumToDV.test.ts +16 -0
  89. package/src/utils.ts +172 -0
  90. package/tsconfig.json +23 -0
  91. package/.babelrc +0 -15
  92. package/.prettierrc +0 -9
  93. package/dist/documents/cnh.js +0 -77
  94. package/dist/documents/cnh.js.map +0 -1
  95. package/dist/documents/cnpj.js.map +0 -1
  96. package/dist/documents/cpf.js +0 -83
  97. package/dist/documents/cpf.js.map +0 -1
  98. package/dist/documents/index.js +0 -23
  99. package/dist/documents/index.js.map +0 -1
  100. package/dist/documents/pis-pasep.js +0 -71
  101. package/dist/documents/pis-pasep.js.map +0 -1
  102. package/dist/documents/postal-code.js +0 -72
  103. package/dist/documents/postal-code.js.map +0 -1
  104. package/dist/documents/titulo-eleitor.js +0 -74
  105. package/dist/documents/titulo-eleitor.js.map +0 -1
  106. package/dist/lib/utils.js +0 -60
  107. package/dist/lib/utils.js.map +0 -1
  108. package/docs.md +0 -0
  109. package/index.js +0 -3
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ /**
3
+ * isPIS()
4
+ * Calcula se um código de PIS/PASEP/NIS/NIT no formato 268.27649.96-0 é válido. Não
5
+ * valida o formato, portanto, 26827649960 é equivalente a 268.27649.96-0 para efeitos
6
+ * desta validação.
7
+ *
8
+ * @doc
9
+ * - O número de PIS deve possuir 11 caracteres
10
+ *
11
+ * - Os caracteres de 1 a 10 são a numeração documento
12
+ *
13
+ * - O caractere 11 é o dígito verificador.
14
+ *
15
+ * 1) Partes do número
16
+ * _______________________________________________
17
+ * | Número | D V |
18
+ * | 2 6 8 . 2 7 6 4 9 . 9 6 - 0 |
19
+ * |_________________________________________|_____|
20
+ *
21
+ * 2) Cálculo do DV.
22
+ *
23
+ * - Soma-se o produto das algarismos 3 a 10 pelos números 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
24
+ *
25
+ * 2 6 8 2 7 6 4 9 9 6
26
+ * x x x x x x x x x x
27
+ * 3 2 9 8 7 6 5 4 3 2
28
+ * = 6 +12 +72 +16 +49 +12 +20 +36 +27 +12 = 234
29
+ *
30
+ * - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
31
+ * 234 / 11 tem resto 3. 11 - 3 = 8. DV1 é 8.
32
+ * Obs.: Caso o cálculo de DV1 retorne 0, o resultado será 5.
33
+ * Caso retorne 1, o resto será 0
34
+ *
35
+ *
36
+ *
37
+ *
38
+ * Fonte: http://www.macoratti.net/alg_pis.htm
39
+ *
40
+ * @param {String} value Objeto postal no formato 268.27649.96-0
41
+ * @returns {Boolean}
42
+ */
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.validate = exports.validateOrFail = exports.fake = exports.mask = exports.dv = void 0;
45
+ const utils_1 = require("./utils");
46
+ /**
47
+ * dv()
48
+ * Calcula o dígito verificador
49
+ *
50
+ * @param {Number|String} value
51
+ * @returns {String}
52
+ */
53
+ exports.dv = (value) => {
54
+ if (!value)
55
+ throw new Error('PIS não informado');
56
+ const pis = utils_1.clearValue(value, 10);
57
+ const invalidList = utils_1.invalidListGenerator(10);
58
+ if (invalidList.includes(pis)) {
59
+ throw new Error('PIS não pode ser uma sequência de números iguais');
60
+ }
61
+ const sum = utils_1.sumElementsByMultipliers(pis, [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);
62
+ return String(utils_1.sumToDV(sum));
63
+ };
64
+ /**
65
+ * Aplica uma máscara ao número informado
66
+ *
67
+ * @param {String} value Número de Processo
68
+ * @returns {String} Valor com a máscara
69
+ */
70
+ exports.mask = (value) => utils_1.applyMask(value, '000.00000.00-0');
71
+ /**
72
+ * fake()
73
+ * Gera um número válido
74
+ *
75
+ * @returns {String}
76
+ */
77
+ exports.fake = (withMask = false) => {
78
+ const num = utils_1.fakeNumber(10, true);
79
+ const pis = `${num}${exports.dv(num)}`;
80
+ if (withMask)
81
+ return exports.mask(pis);
82
+ return pis;
83
+ };
84
+ /**
85
+ * validateOrFail()
86
+ * Valida se um número de processo está correto e
87
+ * retorna uma exceção se não estiver
88
+ *
89
+ * @returns {Boolean}
90
+ */
91
+ exports.validateOrFail = (value) => {
92
+ const pis = utils_1.clearValue(value, 11);
93
+ if (exports.dv(pis) !== pis.substring(10, 11)) {
94
+ throw new Error('Dígito verificador inválido');
95
+ }
96
+ return true;
97
+ };
98
+ /**
99
+ * validate()
100
+ * Valida se um número de processo está correto
101
+ *
102
+ * @returns {Boolean}
103
+ */
104
+ exports.validate = (value) => {
105
+ try {
106
+ return exports.validateOrFail(value);
107
+ }
108
+ catch (error) {
109
+ return false;
110
+ }
111
+ };
112
+ exports.default = exports.validate;
113
+ //# sourceMappingURL=pisPasep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pisPasep.js","sourceRoot":"","sources":["../src/pisPasep.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;;;AAEH,mCAOgB;AAEhB;;;;;;GAMG;AACU,QAAA,EAAE,GAAG,CAAC,KAAsB,EAAU,EAAE;IACnD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAEhD,MAAM,GAAG,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAEjC,MAAM,WAAW,GAAG,4BAAoB,CAAC,EAAE,CAAC,CAAA;IAC5C,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;KACpE;IAED,MAAM,GAAG,GAAG,gCAAwB,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,CAAA;IAEzE,OAAO,MAAM,CAAC,eAAO,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,iBAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;AAE1F;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,WAAoB,KAAK,EAAU,EAAE;IACxD,MAAM,GAAG,GAAG,kBAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAEhC,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,UAAE,CAAC,GAAG,CAAC,EAAE,CAAA;IAE9B,IAAI,QAAQ;QAAE,OAAO,YAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;;GAMG;AACU,QAAA,cAAc,GAAG,CAAC,KAAsB,EAAW,EAAE;IAChE,MAAM,GAAG,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAEjC,IAAI,UAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;KAC/C;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,QAAQ,GAAG,CAAC,KAAsB,EAAW,EAAE;IAC1D,IAAI;QACF,OAAO,sBAAc,CAAC,KAAK,CAAC,CAAA;KAC7B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAED,kBAAe,gBAAQ,CAAA"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const pisPasep_1 = __importStar(require("./pisPasep"));
23
+ describe('PIS', () => {
24
+ test('isPIS() - Números válidos', () => {
25
+ const list = [
26
+ // string
27
+ '71282677380',
28
+ '23795126955',
29
+ // integer
30
+ 50012973803,
31
+ 27890141144,
32
+ // masked
33
+ '268.27649.96-0',
34
+ '613.01862.91-7',
35
+ ];
36
+ list.forEach((pis) => {
37
+ expect(pisPasep_1.default(pis)).toBeTruthy();
38
+ });
39
+ });
40
+ test('validate() - Números válidos', () => {
41
+ const list = [
42
+ // string
43
+ '71282677380',
44
+ '23795126955',
45
+ // integer
46
+ 50012973803,
47
+ 27890141144,
48
+ // masked
49
+ '268.27649.96-0',
50
+ '613.01862.91-7',
51
+ ];
52
+ list.forEach((pis) => {
53
+ expect(pisPasep_1.validate(pis)).toBeTruthy();
54
+ });
55
+ });
56
+ test('validate() - Números inválidos', () => {
57
+ const list = [
58
+ '712.82677.38-2',
59
+ '237.95126.95-4',
60
+ '500.12973.80-1',
61
+ '278.90141.14-9',
62
+ '268.27649.96-2',
63
+ '613.01862.91-4',
64
+ '111.11111.11-1',
65
+ ];
66
+ list.forEach((pis) => {
67
+ expect(pisPasep_1.validate(pis)).toBeFalsy();
68
+ });
69
+ });
70
+ test('validateOrFail() - Números inválidos', () => {
71
+ const list = [
72
+ '712.82677.38-2',
73
+ '237.95126.95-4',
74
+ '500.12973.80-1',
75
+ '278.90141.14-9',
76
+ '268.27649.96-2',
77
+ '613.01862.91-4',
78
+ '111.11111.11-1',
79
+ ];
80
+ list.forEach((pis) => {
81
+ expect(() => pisPasep_1.validateOrFail(pis)).toThrow();
82
+ });
83
+ });
84
+ test('Parâmetro não informado', () => {
85
+ expect(pisPasep_1.default('')).toBeFalsy();
86
+ expect(pisPasep_1.validate('')).toBeFalsy();
87
+ expect(() => pisPasep_1.validateOrFail('')).toThrow();
88
+ expect(() => pisPasep_1.dv('')).toThrow();
89
+ });
90
+ test('fake() - Gera fakes sem máscara', () => {
91
+ for (let i = 0; i < 5; i += 1) {
92
+ const pis = pisPasep_1.fake();
93
+ expect(pisPasep_1.validate(pis)).toBeTruthy();
94
+ expect(pis).toHaveLength(11);
95
+ }
96
+ });
97
+ test('fake() - Gera fakes com máscara', () => {
98
+ for (let i = 0; i < 5; i += 1) {
99
+ const pis = pisPasep_1.fake(true);
100
+ expect(pisPasep_1.validate(pis)).toBeTruthy();
101
+ expect(pis).toHaveLength(14);
102
+ }
103
+ });
104
+ test('dv() - Verificando se o DV gerado está correto', () => {
105
+ const list = [
106
+ { num: '7128267738', expected: '0' },
107
+ { num: 2379512695, expected: '5' },
108
+ { num: '5001297380', expected: '3' },
109
+ ];
110
+ list.forEach((item) => {
111
+ const calcDv = pisPasep_1.dv(item.num);
112
+ expect(calcDv).toBe(item.expected);
113
+ expect(typeof calcDv).toBe('string');
114
+ });
115
+ });
116
+ test('mask() - Testando se a máscara foi gerada corretamente', () => {
117
+ const list = [
118
+ { num: '71282677380', expected: '712.82677.38-0' },
119
+ { num: 23795126955, expected: '237.95126.95-5' },
120
+ { num: '50012973803', expected: '500.12973.80-3' },
121
+ ];
122
+ list.forEach((item) => {
123
+ const masked = pisPasep_1.mask(item.num);
124
+ expect(masked).toBe(item.expected);
125
+ expect(masked).toHaveLength(14);
126
+ });
127
+ });
128
+ });
129
+ //# sourceMappingURL=pisPasep.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pisPasep.test.js","sourceRoot":"","sources":["../src/pisPasep.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * isPostalCode()
4
+ * Calcula se um código de rastreamento postal no formato JT194690698BR é válido.
5
+ *
6
+ * @doc
7
+ * - O número de registro postal deve possuir 13 caracters no formato JT194690698BR.
8
+ *
9
+ * - Os caracteres 1 e 2 informam o tipo do objeto. Ex.: SX é Sedex, RC é carta registrada etc.
10
+ *
11
+ * - Os caracteres de 3 a 10 são a numeração sequencial do tipo do objeto.
12
+ *
13
+ * - O caractere 11 é o dígito verificador.
14
+ *
15
+ * - Os caracteres 12 e 13 representa o código do País de onde a postagem partiu.
16
+ *
17
+ * 1) Partes do número
18
+ * ______ ___________________________ ______ _______
19
+ * | Tipo | Número | DV | País |
20
+ * | J T 1 9 4 6 9 0 6 9 8 B R |
21
+ * |______|___________________________|______|_______|
22
+ *
23
+ * 2) Cálculo do DV.
24
+ *
25
+ * - Soma-se o produto das algarismos 3 a 10 pelos números 8, 6, 4, 2, 3, 5, 9, 7
26
+ *
27
+ * 1 9 4 6 9 0 6 9
28
+ * x x x x x x x x
29
+ * 8 6 4 2 3 5 9 7
30
+ * = 8 +54 +16 +12 +18 +0 +54 +63 = 234
31
+ *
32
+ * - O somatório encontrado é dividido por 11 e o resultado é subtraído de 11
33
+ * 234 / 11 tem resto 3. 11 - 3 = 8. DV1 é 8.
34
+ * Obs.: Caso o cálculo de DV1 retorne 0, o resultado será 5.
35
+ * Caso retorne 1, o resto será 0
36
+ *
37
+ *
38
+ *
39
+ *
40
+ * Fonte:
41
+ *
42
+ * @param {String} value Objeto postal no formato JT194690698BR
43
+ * @returns {Boolean}
44
+ */
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.validate = exports.validateOrFail = exports.fake = exports.mask = exports.dv = void 0;
47
+ const utils_1 = require("./utils");
48
+ /**
49
+ * dv()
50
+ * Calcula o dígito verificador
51
+ *
52
+ * @param {Number|String} value
53
+ * @returns {String}
54
+ */
55
+ exports.dv = (value) => {
56
+ if (!value)
57
+ throw new Error('PIS não informado');
58
+ const postalCode = utils_1.clearValue(value, 8);
59
+ const sum = utils_1.sumElementsByMultipliers(postalCode, [8, 6, 4, 2, 3, 5, 9, 7]);
60
+ const rest = sum % 11;
61
+ // const specificities = { 0: { dv: 5 }, 1: { dv: 0 } }
62
+ const specificities = [
63
+ { rest: 0, dv: 5 },
64
+ { rest: 1, dv: 0 },
65
+ ];
66
+ const specifity = specificities.find((item) => item.rest === rest);
67
+ const DV = specifity ? specifity.dv : 11 - rest;
68
+ return String(DV);
69
+ };
70
+ /**
71
+ * Aplica uma máscara ao número informado
72
+ *
73
+ * @param {String} value Número de Processo
74
+ * @returns {String} Valor com a máscara
75
+ */
76
+ exports.mask = (value) => String(value).toLocaleUpperCase();
77
+ /**
78
+ * fake()
79
+ * Gera um número válido
80
+ *
81
+ * @returns {String}
82
+ */
83
+ exports.fake = (withMask = false) => {
84
+ const num = utils_1.fakeNumber(8, true);
85
+ const randLetter = () => [
86
+ 'A',
87
+ 'B',
88
+ 'C',
89
+ 'D',
90
+ 'E',
91
+ 'F',
92
+ 'G',
93
+ 'H',
94
+ 'I',
95
+ 'J',
96
+ 'K',
97
+ 'L',
98
+ 'M',
99
+ 'N',
100
+ 'O',
101
+ 'P',
102
+ 'Q',
103
+ 'R',
104
+ 'S',
105
+ 'T',
106
+ 'U',
107
+ 'V',
108
+ 'W',
109
+ 'X',
110
+ 'Y',
111
+ 'Z',
112
+ ][+(Math.random() * 25).toFixed(0)];
113
+ const postalCode = `${randLetter()}${randLetter()}${num}${exports.dv(num)}BR`;
114
+ if (withMask)
115
+ return exports.mask(postalCode);
116
+ return postalCode;
117
+ };
118
+ /**
119
+ * validateOrFail()
120
+ * Valida se um número de processo está correto e
121
+ * retorna uma exceção se não estiver
122
+ *
123
+ * @returns {Boolean}
124
+ */
125
+ exports.validateOrFail = (value) => {
126
+ const postalCode = utils_1.clearValue(value, 9);
127
+ if (!/^[a-z]{2}([\d]{9})[a-z]{2}$/gi.test(String(value))) {
128
+ throw new Error('O número não está no formato "XX000000000XX"');
129
+ }
130
+ if (exports.dv(value) !== postalCode.substring(8, 9)) {
131
+ throw new Error('Dígito verificador inválido');
132
+ }
133
+ return true;
134
+ };
135
+ /**
136
+ * validate()
137
+ * Valida se um número de processo está correto
138
+ *
139
+ * @returns {Boolean}
140
+ */
141
+ exports.validate = (value) => {
142
+ try {
143
+ return exports.validateOrFail(value);
144
+ }
145
+ catch (error) {
146
+ return false;
147
+ }
148
+ };
149
+ exports.default = exports.validate;
150
+ //# sourceMappingURL=postalCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postalCode.js","sourceRoot":"","sources":["../src/postalCode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const postalCode_1 = __importStar(require("./postalCode"));
23
+ describe('PostalCode', () => {
24
+ test('isPostalCode() - Números válidos', () => {
25
+ const list = [
26
+ 'PN718252423BR',
27
+ 'PO925539762BR',
28
+ 'JT194690698BR',
29
+ 'SV143851674BR',
30
+ 'RG727348650CN',
31
+ 'RY747622885CN',
32
+ 'RY728187035CN',
33
+ 'RH940629235CN',
34
+ 'RY686586175CN',
35
+ 'RY648001205CN',
36
+ 'UJ776469464CN',
37
+ 'LZ667841882CN',
38
+ 'RS737783818NL',
39
+ ];
40
+ list.forEach((postalCode) => {
41
+ expect(postalCode_1.default(postalCode)).toBeTruthy();
42
+ });
43
+ });
44
+ test('validate() - Números válidos', () => {
45
+ const list = [
46
+ 'PN718252423BR',
47
+ 'PO925539762BR',
48
+ 'JT194690698BR',
49
+ 'SV143851674BR',
50
+ 'RG727348650CN',
51
+ 'RY747622885CN',
52
+ 'RY728187035CN',
53
+ 'RH940629235CN',
54
+ 'RY686586175CN',
55
+ 'RY648001205CN',
56
+ 'UJ776469464CN',
57
+ 'LZ667841882CN',
58
+ 'RS737783818NL',
59
+ ];
60
+ list.forEach((postalCode) => {
61
+ expect(postalCode_1.validate(postalCode)).toBeTruthy();
62
+ });
63
+ });
64
+ test('validate() - Números inválidos', () => {
65
+ const list = [
66
+ 'PO925524762BR',
67
+ 'JT194624698BR',
68
+ 'SV143824674BR',
69
+ 'RG727324650CN',
70
+ 'RY747624885CN',
71
+ 'RY728114035CN',
72
+ ];
73
+ list.forEach((postalCode) => {
74
+ expect(postalCode_1.validate(postalCode)).toBeFalsy();
75
+ });
76
+ });
77
+ test('validateOrFail() - Números inválidos', () => {
78
+ const list = [
79
+ 'PO925524762BR',
80
+ 'JT194624698BR',
81
+ 'SV143824674BR',
82
+ 'RG727324650CN',
83
+ 'RY747624885CN',
84
+ 'RY728114035CN',
85
+ ];
86
+ list.forEach((postalCode) => {
87
+ expect(() => postalCode_1.validateOrFail(postalCode)).toThrow();
88
+ });
89
+ });
90
+ test('Parâmetro não informado', () => {
91
+ expect(postalCode_1.default('')).toBeFalsy();
92
+ expect(postalCode_1.validate('')).toBeFalsy();
93
+ expect(() => postalCode_1.validateOrFail('')).toThrow();
94
+ expect(() => postalCode_1.dv('')).toThrow();
95
+ });
96
+ test('fake() - Gera fakes sem máscara', () => {
97
+ for (let i = 0; i < 5; i += 1) {
98
+ const postalCode = postalCode_1.fake();
99
+ expect(postalCode_1.validate(postalCode)).toBeTruthy();
100
+ expect(postalCode).toHaveLength(13);
101
+ }
102
+ });
103
+ test('fake() - Gera fakes com máscara', () => {
104
+ for (let i = 0; i < 5; i += 1) {
105
+ const postalCode = postalCode_1.fake(true);
106
+ expect(postalCode_1.validate(postalCode)).toBeTruthy();
107
+ expect(postalCode).toHaveLength(13);
108
+ }
109
+ });
110
+ test('dv() - Verificando se o DV gerado está correto', () => {
111
+ const list = [
112
+ { num: 'PN718252423BR', expected: '3' },
113
+ { num: 'PO925539762BR', expected: '2' },
114
+ { num: 'JT194690698BR', expected: '8' },
115
+ ];
116
+ list.forEach((item) => {
117
+ const calcDv = postalCode_1.dv(item.num);
118
+ expect(calcDv).toBe(item.expected);
119
+ expect(typeof calcDv).toBe('string');
120
+ });
121
+ });
122
+ test('mask() - Testando se a máscara foi gerada corretamente', () => {
123
+ const list = [
124
+ { num: 'pn718252423br', expected: 'PN718252423BR' },
125
+ { num: 'po925539762br', expected: 'PO925539762BR' },
126
+ { num: 'jt194690698br', expected: 'JT194690698BR' },
127
+ ];
128
+ list.forEach((item) => {
129
+ const masked = postalCode_1.mask(item.num);
130
+ expect(masked).toBe(item.expected);
131
+ expect(masked).toHaveLength(13);
132
+ });
133
+ });
134
+ });
135
+ //# sourceMappingURL=postalCode.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postalCode.test.js","sourceRoot":"","sources":["../src/postalCode.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * RENAVAM
4
+ * Funções auxiliares para cálculo de máscaras, validação, dígito verificador e criaçãode
5
+ * números fake.
6
+ *
7
+ * @doc
8
+ * - O número de RENAVAM 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 das algarismos 3 a 10 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 +12 +20 +36 +27 +12 = 234
28
+ *
29
+ * - O somatório encontrado é multiplicado por 10 e ao resultado
30
+ * é aplicado o cálculo do MOD 11.
31
+ *
32
+ * ( 234 * 10 ) / 11 tem resto 8. DV = 8. Caso o resto seja maior ou igual a
33
+ * 10, DV será 0.
34
+ *
35
+ *
36
+ */
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.validate = exports.validateOrFail = exports.fake = exports.mask = exports.dv = void 0;
39
+ const utils_1 = require("./utils");
40
+ /**
41
+ * dv()
42
+ * Calcula o dígito verificador
43
+ *
44
+ * @param {Number|String} value
45
+ * @returns {String}
46
+ */
47
+ exports.dv = (value) => {
48
+ if (!value)
49
+ throw new Error('Renavam não informado');
50
+ const renavam = utils_1.clearValue(value, 10); // só 10 para remover o DV
51
+ const invalidList = utils_1.invalidListGenerator(10);
52
+ if (invalidList.includes(renavam)) {
53
+ throw new Error('RENAVAM não pode ser uma sequência de números iguais');
54
+ }
55
+ const sum1 = utils_1.sumElementsByMultipliers(renavam, [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]) * 10;
56
+ const dv1 = sum1 % 11 >= 10 ? 0 : sum1 % 11;
57
+ return `${dv1}`;
58
+ };
59
+ /**
60
+ * Aplica uma máscara ao número informado
61
+ *
62
+ * @param {String} value Número de Processo
63
+ * @returns {String} Valor com a máscara
64
+ */
65
+ exports.mask = (value) => utils_1.applyMask(value, '0000000000-0');
66
+ /**
67
+ * fake()
68
+ * Gera um número válido
69
+ *
70
+ * @returns {String}
71
+ */
72
+ exports.fake = (withMask = false) => {
73
+ const value = utils_1.fakeNumber(10, true);
74
+ const renavam = `${value}${exports.dv(value)}`;
75
+ if (withMask)
76
+ return exports.mask(renavam);
77
+ return renavam;
78
+ };
79
+ /**
80
+ * validateOrFail()
81
+ * Valida se um número de processo está correto e
82
+ * retorna uma exceção se não estiver
83
+ *
84
+ * @returns {Boolean}
85
+ */
86
+ exports.validateOrFail = (value) => {
87
+ const renavam = utils_1.clearValue(value, 11);
88
+ if (exports.dv(renavam) !== renavam.substring(10, 11)) {
89
+ throw new Error('Dígito verificador inválido');
90
+ }
91
+ return true;
92
+ };
93
+ /**
94
+ * validate()
95
+ * Valida se um número de processo está correto
96
+ *
97
+ * @returns {Boolean}
98
+ */
99
+ exports.validate = (value) => {
100
+ try {
101
+ return exports.validateOrFail(value);
102
+ }
103
+ catch (error) {
104
+ return false;
105
+ }
106
+ };
107
+ exports.default = exports.validate;
108
+ //# sourceMappingURL=renavam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renavam.js","sourceRoot":"","sources":["../src/renavam.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,mCAMgB;AAEhB;;;;;;GAMG;AACU,QAAA,EAAE,GAAG,CAAC,KAAsB,EAAU,EAAE;IACnD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,CAAC,0BAA0B;IAEhE,MAAM,WAAW,GAAG,4BAAoB,CAAC,EAAE,CAAC,CAAA;IAC5C,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;KACxE;IAED,MAAM,IAAI,GAAG,gCAAwB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;IACnF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;IAC3C,OAAO,GAAG,GAAG,EAAE,CAAA;AACjB,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,iBAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;AAExF;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,WAAoB,KAAK,EAAU,EAAE;IACxD,MAAM,KAAK,GAAG,kBAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAElC,MAAM,OAAO,GAAG,GAAG,KAAK,GAAG,UAAE,CAAC,KAAK,CAAC,EAAE,CAAA;IAEtC,IAAI,QAAQ;QAAE,OAAO,YAAI,CAAC,OAAO,CAAC,CAAA;IAElC,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;;;;GAMG;AACU,QAAA,cAAc,GAAG,CAAC,KAAsB,EAAW,EAAE;IAChE,MAAM,OAAO,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAErC,IAAI,UAAE,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;KAC/C;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,QAAQ,GAAG,CAAC,KAAsB,EAAW,EAAE;IAC1D,IAAI;QACF,OAAO,sBAAc,CAAC,KAAK,CAAC,CAAA;KAC7B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAED,kBAAe,gBAAQ,CAAA"}