Skip to content

Commit 1d86f37

Browse files
authored
Add isZipCode validator (#3)
* Add isZipCode validator * Add doc strings to all the functions * Release 1.2.0
1 parent c6f6bfe commit 1d86f37

File tree

8 files changed

+92
-14
lines changed

8 files changed

+92
-14
lines changed

README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# validator-ec
22

3-
**validator-ec** es una colección de validadores de datos para Ecuador desarrollada en TypeScript. Actualmente, cuenta con validadores para cédulas de identidad ecuatorianas y números de RUC (Registro Único de Contribuyentes).
3+
Colección de validadores de datos comunes en Ecuador desarrollada en TypeScript.
4+
5+
Actualmente, cuenta con validadores para cédulas de identidad ecuatorianas, números de RUC (Registro Único de Contribuyentes) y códigos postales.
46

57
## Características
68

@@ -32,10 +34,11 @@ npm install validator-ec
3234

3335
## Validadores
3436

35-
| Validador | Descripción | Ejemplo |
36-
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
37-
| `isCedula(cedula: string): boolean` | Valida una cédula de identidad ecuatoriana. Devuelve `true` si la cédula es válida, de lo contrario `false`. | `isCedula('1710034065')` |
38-
| `isRUC(ruc: string): boolean` | Valida un número de RUC (Registro Único de Contribuyentes). Devuelve `true` si el RUC es válido, de lo contrario `false`. | `isRUC('1790016919001')` |
37+
| Validador | Descripción | Ejemplo |
38+
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
39+
| `isCedula(cedula: string): boolean` | Valida una cédula de identidad ecuatoriana. Devuelve `true` si la cédula es válida, de lo contrario `false`. | `isCedula('1710034065')` |
40+
| `isRUC(ruc: string): boolean` | Valida un número de RUC (Registro Único de Contribuyentes). Devuelve `true` si el RUC es válido, de lo contrario `false`. | `isRUC('1790016919001')` |
41+
| `isZipCode(zipCode: string): boolean` | Valida un código postal ecuatoriano. Devuelve `true` si el código postal es válido, de lo contrario `false`. | `isZipCode('131401')` |
3942

4043
## Uso
4144

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "validator-ec",
3-
"version": "1.1.0",
3+
"version": "1.2.0",
44
"type": "module",
55
"author": "Victor Bayas",
66
"license": "Apache-2.0",

src/helpers/isDigits.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
// Helper para validar que una cadena contenga únicamente dígitos.
1+
/**
2+
* @param {string} value La cadena de texto a validar.
3+
* @returns {boolean} Devuelve `true si la cadena de texto contiene únicamente dígitos, de lo contrario devuelve `false`.
4+
*/
25
export default function isDigits(value: string): boolean {
36
return /^\d+$/.test(value);
47
}

src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import isCedula from "./lib/isCedula";
22
import isRUC from "./lib/isRUC";
3+
import isZipCode from "./lib/isZipCode";
34

4-
export { isCedula, isRUC };
5+
export { isCedula, isRUC, isZipCode };

src/lib/isCedula.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import isDigits from "../helpers/isDigits";
22

3+
/**
4+
*
5+
* @param {string} cedula La cédula a validar.
6+
* @returns {boolean} Devuelve `true` si la cédula es válida, de lo contrario devuelve `false`.
7+
*/
38
export default function isCedula(cedula: string): boolean {
49
// Validamos que la cédula tenga 10 dígitos
510
if (cedula.length !== 10) {
@@ -54,9 +59,6 @@ export default function isCedula(cedula: string): boolean {
5459
return false;
5560
}
5661

57-
if (validatorDigit == lastDigit) {
58-
return true;
59-
}
60-
61-
return false;
62+
// Si el dígito verificador es igual al último dígito de la cédula, la cédula es válida
63+
return validatorDigit === lastDigit;
6264
}

src/lib/isRUC.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import isDigits from "../helpers/isDigits";
22
import isCedula from "./isCedula";
33

4+
/**
5+
* Valida un RUC ecuatoriano.
6+
*
7+
* @param {string} ruc El RUC a validar.
8+
* @returns {boolean} Devuelve `true` si el RUC es válido, de lo contrario devuelve `false`.
9+
*/
410
export default function isRUC(ruc: string): boolean {
511
// Verificamos que el RUC tenga 13 dígitos
612
if (ruc.length !== 13) {

src/lib/isZipCode.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import isDigits from "../helpers/isDigits";
2+
3+
/**
4+
* Valida un código postal ecuatoriano.
5+
*
6+
* @param {string} zipCode El código postal a validar.
7+
* @returns {boolean} Devuelve `true` si el código postal es válido, de lo contrario devuelve `false`.
8+
*/
9+
export default function isZipCode(zipCode: string): boolean {
10+
// Verificamos que el código postal tenga 6 dígitos
11+
if (zipCode.length !== 6) {
12+
return false;
13+
}
14+
15+
// Verificamos que todos los caracteres sean dígitos
16+
if (!isDigits(zipCode)) {
17+
return false;
18+
}
19+
20+
// Extraemos el código de provincia
21+
const provinceCode = parseInt(zipCode[0] + zipCode[1], 10);
22+
23+
// Verificamos que el código de provincia sea válido
24+
if (provinceCode < 1 || provinceCode > 24) {
25+
return false;
26+
}
27+
28+
return true;
29+
}

tests/index.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, it, expect } from "vitest";
2-
import { isCedula, isRUC } from "../src";
2+
import { isCedula, isRUC, isZipCode } from "../src";
33

44
describe("Validador isCedula", () => {
55
it("debería retornar true para una cédula válida", () => {
@@ -99,3 +99,37 @@ describe("Validador isRUC", () => {
9999
expect(isRUC("1710034065000")).toBe(false);
100100
});
101101
});
102+
103+
describe("Función isZipCode", () => {
104+
it("debería retornar true para un código postal válido", () => {
105+
expect(isZipCode("170150")).toBe(true); // Código postal válido de Pichincha
106+
expect(isZipCode("090112")).toBe(true); // Código postal válido de Guayas
107+
expect(isZipCode("010203")).toBe(true); // Código postal válido de Azuay
108+
expect(isZipCode("240205")).toBe(true); // Código postal válido de Santa Elena
109+
expect(isZipCode("220202")).toBe(true); // Código postal válido de Orellana
110+
});
111+
112+
it("debería retornar false si el código postal no tiene 6 dígitos", () => {
113+
expect(isZipCode("17015")).toBe(false);
114+
expect(isZipCode("1701500")).toBe(false);
115+
expect(isZipCode("1701")).toBe(false);
116+
});
117+
118+
it("debería retornar false si el código postal contiene caracteres no numéricos", () => {
119+
expect(isZipCode("17A150")).toBe(false);
120+
expect(isZipCode("17015X")).toBe(false);
121+
expect(isZipCode("170-50")).toBe(false);
122+
expect(isZipCode("17 150")).toBe(false);
123+
expect(isZipCode("17.150")).toBe(false);
124+
});
125+
126+
it("debería retornar false para códigos postales con código de provincia inválido", () => {
127+
expect(isZipCode("000150")).toBe(false);
128+
expect(isZipCode("250150")).toBe(false);
129+
expect(isZipCode("990150")).toBe(false);
130+
});
131+
132+
it("debería retornar false para una cadena vacía", () => {
133+
expect(isZipCode("")).toBe(false);
134+
});
135+
});

0 commit comments

Comments
 (0)