Skip to content

Commit 9ef3343

Browse files
committed
Changed namespace and added formatter
1 parent 3446051 commit 9ef3343

File tree

9 files changed

+436
-88
lines changed

9 files changed

+436
-88
lines changed

README.es.md

Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Desde el 17 de diciembre de 2021, los DUIs son NITs válidos para personas natur
1010

1111
Las personas jurídicas no se ven afectadas por este cambio, por lo que aún debe usar la validación de NIT para ellas.
1212

13+
También hay una opción para anular esta funcionalidad en la biblioteca cuando sea necesario.
14+
1315
## Instalación
1416
Puedes usar composer para instalar idSV en ty proyecto:
1517

@@ -19,44 +21,78 @@ composer require avalontechsv/idSV
1921

2022
## Uso
2123
```php
22-
use avalontechsv\idSV;
24+
use avalontechsv\idSV\idSV;
2325

24-
$validator = new idSV;
26+
$validator = new idSV();
2527

2628
// Validación de DUI
27-
// Validar DUI en el formato 00000000-0
28-
$validator->isValidDUI('00000000-0'); // true
29-
$validator->isValidDUI('00000000-1'); // false
29+
// Validar DUI en formato 00000000-0
30+
var_dump($validator->isValidDUI('00000000-0')); // true
31+
var_dump($validator->isValidDUI('00000000-1')); // false
3032

31-
// Validar DUI en el formato 000000000
32-
$validator->isValidDUI('000000000'); // true
33-
$validator->isValidDUI('000000001'); // false
33+
// Validar DUI en formato 000000000
34+
var_dump($validator->isValidDUI('000000000')); // true
35+
var_dump($validator->isValidDUI('000000001')); // false
3436

35-
// La biblioteca eliminará automáticamente los espacios en blanco.
36-
// Esto es útil cuando está validando entradas de un usuario.
37-
$validator->isValidDUI(' 000000000 '); // true
37+
// Esta libraría automáticamente elimina los espacios en blanco.
38+
// Esto es útil cuando estás validando la entrada del usuario.
39+
var_dump($validator->isValidDUI(' 000000000 ')); // true
3840

3941
// Validación de NIT
40-
// Validar NIT en el formato 0000-000000-000-0
41-
$validator->isValidNIT('0000-000000-000-0'); // true
42-
$validator->isValidNIT('0000-000000-000-1'); // false
43-
44-
// Validar NIT en el formato 0000000000000
45-
$validator->isValidNIT('0000000000000'); // true
46-
$validator->isValidNIT('0000000000001'); // false
47-
48-
// También puede validar NITs para personas naturales
49-
// en el formato DUI.
50-
$validator->isValidNIT('00000000-0'); // true
51-
$validator->isValidNIT('00000000-1'); // false
52-
53-
// La biblioteca eliminará automáticamente los espacios en blanco.
54-
// Esto es útil cuando está validando entradas de un usuario.
55-
$validator->isValidNIT(' 0000000000000 '); // true
56-
57-
// DUI y NIT también pueden ser nulos
58-
$validator->isValidDUI(null); // false
59-
$validator->isValidNIT(null); // false
42+
// Validar NIT en formato 0000-000000-000-0
43+
var_dump($validator->isValidNIT('0000-000000-000-0')); // true
44+
var_dump($validator->isValidNIT('0000-000000-000-1')); // false
45+
46+
// Validar NIT en formato 0000000000000
47+
var_dump($validator->isValidNIT('0000000000000')); // true
48+
var_dump($validator->isValidNIT('0000000000001')); // false
49+
50+
// También se puede validar un DUI como NIT para personas naturales
51+
var_dump($validator->isValidNIT('00000000-0')); // true
52+
var_dump($validator->isValidNIT('00000000-1')); // false
53+
54+
// Esta libraría automáticamente elimina los espacios en blanco.
55+
// Esto es útil cuando estás validando la entrada del usuario.
56+
var_dump($validator->isValidNIT(' 0000000000000 ')); // true
57+
58+
// Los DUI y NIT también pueden ser nulos
59+
var_dump($validator->isValidDUI(null)); // false
60+
var_dump($validator->isValidNIT(null)); // false
61+
62+
// Formateo de DUI y NIT
63+
64+
// Formatear DUI en el formato 00000000-0
65+
var_dump($validator->formatDUI('000000000')); // 00000000-0
66+
67+
// Cadenas más cortas se rellenan con ceros
68+
var_dump($validator->formatDUI('00')); // 00000000-0
69+
70+
// Si un DUI ya está formateado, se devolverá como está
71+
var_dump($validator->formatDUI('00000000-0')); // 00000000-0
72+
73+
// Si se intenta formatear un DUI inválido, se genera una excepción
74+
try { $validator->formatDUI('000000001'); } catch (\Exception $e) { echo 'Exception: ' . $e->getMessage(); } // Exception: Invalid DUI
75+
76+
// Formatear NIT en el formato 0000-000000-000-0
77+
var_dump($validator->formatNIT('00000000000000')); // 0000-000000-000-0
78+
79+
// Cadenas más cortas se rellenan con ceros
80+
var_dump($validator->formatNIT('00')); // 0000-000000-000-0
81+
82+
// Si un NIT ya está formateado, se devolverá como está
83+
var_dump($validator->formatNIT('0000-000000-000-0')); // 0000-000000-000-0
84+
85+
// Los DUIs válidos se formatearán como DUIs en el formateador de NIT por defecto
86+
var_dump($validator->formatNIT('000000000')); // 00000000-0
87+
88+
// Se puede desactivar el formateo de DUIs como NITs
89+
var_dump($validator->formatNIT('000000000', false)); // 0000-000000-000-0
90+
91+
// El rellenado de ceros también se aplica a los NIT con formateo de DUI desactivado
92+
var_dump($validator->formatNIT('00', false)); // 0000-000000-000-0
93+
94+
// Si se intenta formatear un NIT inválido, se genera una excepción
95+
try { $validator->formatNIT('0000000000001'); } catch (\Exception $e) { echo 'Exception: ' . $e->getMessage() . '\n'; } // Exception: Invalid NIT
6096
```
6197
## Pruebas
6298
Puedes ejecutar las pruebas con PHPUnit:

README.md

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Since December 17th, 2021, DUIs are valid NITs for natural persons, so any DUI i
1010

1111
Legal entities are not affected by this change, so you should still use the NIT validation for them.
1212

13+
There is also an option to override this functionality in the library when required.
14+
1315
## Installation
1416
You can use composer to install idSV in your project:
1517

@@ -19,44 +21,79 @@ composer require avalontechsv/idSV
1921

2022
## Usage
2123
```php
22-
use avalontechsv\idSV;
24+
use avalontechsv\idSV\idSV;
2325

24-
$validator = new idSV;
26+
$validator = new idSV();
2527

2628
// DUI validation
2729
// Validate DUI in the format 00000000-0
28-
$validator->isValidDUI('00000000-0'); // true
29-
$validator->isValidDUI('00000000-1'); // false
30+
var_dump($validator->isValidDUI('00000000-0')); // true
31+
var_dump($validator->isValidDUI('00000000-1')); // false
3032

3133
// Validate DUI in the format 000000000
32-
$validator->isValidDUI('000000000'); // true
33-
$validator->isValidDUI('000000001'); // false
34+
var_dump($validator->isValidDUI('000000000')); // true
35+
var_dump($validator->isValidDUI('000000001')); // false
3436

3537
// The library will automatically trim the input.
3638
// This is useful when you are validating user input.
37-
$validator->isValidDUI(' 000000000 '); // true
39+
var_dump($validator->isValidDUI(' 000000000 ')); // true
3840

3941
// NIT validation
4042
// Validate NIT in the format 0000-000000-000-0
41-
$validator->isValidNIT('0000-000000-000-0'); // true
42-
$validator->isValidNIT('0000-000000-000-1'); // false
43+
var_dump($validator->isValidNIT('0000-000000-000-0')); // true
44+
var_dump($validator->isValidNIT('0000-000000-000-1')); // false
4345

4446
// Validate NIT in the format 0000000000000
45-
$validator->isValidNIT('0000000000000'); // true
46-
$validator->isValidNIT('0000000000001'); // false
47+
var_dump($validator->isValidNIT('0000000000000')); // true
48+
var_dump($validator->isValidNIT('0000000000001')); // false
4749

4850
// Also, you can validate NITs for natural persons
4951
// in the DUI format.
50-
$validator->isValidNIT('00000000-0'); // true
51-
$validator->isValidNIT('00000000-1'); // false
52+
var_dump($validator->isValidNIT('00000000-0')); // true
53+
var_dump($validator->isValidNIT('00000000-1')); // false
5254

5355
// The library will automatically trim the input.
5456
// This is useful when you are validating user input.
55-
$validator->isValidNIT(' 0000000000000 '); // true
57+
var_dump($validator->isValidNIT(' 0000000000000 ')); // true
5658

5759
// DUI and NIT can also be null
58-
$validator->isValidDUI(null); // false
59-
$validator->isValidNIT(null); // false
60+
var_dump($validator->isValidDUI(null)); // false
61+
var_dump($validator->isValidNIT(null)); // false
62+
63+
// DUI and NIT formatting
64+
65+
// Format DUI in the format 000000000
66+
var_dump($validator->formatDUI('000000000')); // 00000000-0
67+
68+
// Shorter strings will be padded with zeros
69+
var_dump($validator->formatDUI('00')); // 00000000-0
70+
71+
// If a DUI was already formatted, it will be returned as is
72+
var_dump($validator->formatDUI('00000000-0')); // 00000000-0
73+
74+
// Invalid DUIs generate an exception
75+
try { $validator->formatDUI('000000001'); } catch (\Exception $e) { echo 'Exception: ' . $e->getMessage(); } // Exception: Invalid DUI
76+
77+
// Format NIT in the format 0000000000000
78+
var_dump($validator->formatNIT('00000000000000')); // 0000-000000-000-0
79+
80+
// Shorter strings will be padded with zeros
81+
var_dump($validator->formatNIT('00')); // 0000-000000-000-0
82+
83+
// If a NIT was already formatted, it will be returned as is
84+
var_dump($validator->formatNIT('0000-000000-000-0')); // 0000-000000-000-0
85+
86+
// Valid DUIs will be formatted as DUI in the NIT formatter by default
87+
var_dump($validator->formatNIT('000000000')); // 00000000-0
88+
89+
// You can force the NIT formatter to disallow DUIs too
90+
var_dump($validator->formatNIT('000000000', false)); // 0000-000000-000-0
91+
92+
// Padding is also applied to NITs
93+
var_dump($validator->formatNIT('00', false)); // 0000-000000-000-0
94+
95+
// Invalid NITs generate an exception
96+
try { $validator->formatNIT('0000000000001'); } catch (\Exception $e) { echo 'Exception: ' . $e->getMessage() . '\n'; } // Exception: Invalid NIT
6097
```
6198
```
6299
## Testing

composer.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
{
22
"name": "avalontechsv/idsv",
3-
"description": "Validate common identity numbers in El Salvador",
3+
"description": "Validate and format common identity numbers in El Salvador",
44
"type": "library",
55
"license": "GPL-3.0-or-later",
66
"require": {
77
"php": ">=7.2"
88
},
99
"autoload": {
1010
"psr-4": {
11-
"avalontechsv\\": "src/"
11+
"avalontechsv\\idSV\\": "src/",
12+
"avalontechsv\\idSV\\Exceptions\\": "src/Exceptions/"
1213
}
1314
},
1415
"autoload-dev": {
1516
"psr-4": {
16-
"avalontechsv\\Tests\\": "tests/"
17+
"avalontechsv\\idSV\\Tests\\": "tests/"
1718
}
1819
},
1920
"authors": [

index.php

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
use avalontechsv\idSV;
3+
use avalontechsv\idSV\idSV;
44

55
require_once 'vendor/autoload.php';
66

@@ -39,4 +39,32 @@
3939

4040
// DUI and NIT can also be null
4141
echo '$validator->isValidDUI(null) -> '; var_dump($validator->isValidDUI(null)); // false
42-
echo '$validator->isValidNIT(null) -> '; var_dump($validator->isValidNIT(null)); // false
42+
echo '$validator->isValidNIT(null) -> '; var_dump($validator->isValidNIT(null)); // false
43+
44+
// DUI and NIT formatting
45+
46+
// Format DUI in the format 000000000
47+
echo '$validator->formatDUI(\'000000000\') -> '; var_dump($validator->formatDUI('000000000')); // 00000000-0
48+
49+
// If a DUI was already formatted, it will be returned as is
50+
echo '$validator->formatDUI(\'00000000-0\') -> '; var_dump($validator->formatDUI('00000000-0')); // 00000000-0
51+
52+
// Invalid DUIs generate an exception
53+
echo '$validator->formatDUI(\'000000001\') -> ';
54+
try { $validator->formatDUI('000000001'); } catch (\Exception $e) { echo 'Exception: ' . $e->getMessage() . '\n'; } // Exception: Invalid DUI
55+
56+
// Format NIT in the format 0000000000000
57+
echo '$validator->formatNIT(\'00000000000000\') -> '; var_dump($validator->formatNIT('00000000000000')); // 0000-000000-000-0
58+
59+
// If a NIT was already formatted, it will be returned as is
60+
echo '$validator->formatNIT(\'0000-000000-000-0\') -> '; var_dump($validator->formatNIT('0000-000000-000-0')); // 0000-000000-000-0
61+
62+
// Valid DUIs will be formatted as DUI in the NIT formatter by default
63+
echo '$validator->formatNIT(\'000000000\') -> '; var_dump($validator->formatNIT('000000000')); // 00000000-0
64+
65+
// You can force the NIT formatter to disallow DUIs too
66+
echo '$validator->formatNIT(\'000000000\', false) -> '; var_dump($validator->formatNIT('000000000'), false); // 0000-000000-000-0
67+
68+
// Invalid NITs generate an exception
69+
echo '$validator->formatNIT(\'0000000000001\') -> ';
70+
try { $validator->formatNIT('0000000000001'); } catch (\Exception $e) { echo 'Exception: ' . $e->getMessage() . '\n'; } // Exception: Invalid NIT
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace avalontechsv\idSV\Exceptions;
4+
5+
use Exception;
6+
7+
class InvalidDUIException extends Exception
8+
{
9+
public function __construct()
10+
{
11+
parent::__construct('The provided DUI is invalid. DUI must be numeric and have a valid check digit.');
12+
}
13+
14+
public function __toString()
15+
{
16+
return __CLASS__ . ": [{$this->code}]: {$this->message}";
17+
}
18+
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace avalontechsv\idSV\Exceptions;
4+
5+
use Exception;
6+
7+
class InvalidNITException extends Exception
8+
{
9+
public function __construct()
10+
{
11+
parent::__construct('The provided NIT is invalid. NIT must be numeric and have a valid check digit.');
12+
}
13+
14+
public function __toString()
15+
{
16+
return __CLASS__ . ": [{$this->code}]: {$this->message}";
17+
}
18+
19+
}

0 commit comments

Comments
 (0)