soff-id 0.1.1 → 0.2.0

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/README.md CHANGED
@@ -1,25 +1,41 @@
1
- # soff-id 🪪
1
+ # Soff ID
2
+
3
+ [![npm](https://img.shields.io/npm/v/soff-id)](https://www.npmjs.com/package/soff-id)
4
+ [![License](https://img.shields.io/github/license/bledxs/soff-monorepo)](LICENSE)
5
+ [![Build Status](https://github.com/bledxs/soff-monorepo/actions/workflows/ci.yml/badge.svg)](https://github.com/bledxs/soff-monorepo/actions)
6
+ [![codecov](https://codecov.io/gh/bledxs/soff-monorepo/branch/master/graph/badge.svg)](https://codecov.io/gh/bledxs/soff-monorepo)
7
+ [![minzipped size](https://img.shields.io/bundlephobia/minzip/soff-id)](https://bundlephobia.com/package/soff-id)
2
8
 
3
9
  LATAM document validation library - Validate NIT, RUT, CPF, CUIT, and more.
4
10
 
5
- ## The Problem
11
+ **Zero dependencies** · **TypeScript** · **~1KB per locale**
12
+
13
+ ## Table of Contents
14
+
15
+ - [Soff ID](#soff-id)
16
+ - [Table of Contents](#table-of-contents)
17
+ - [Why?](#why)
18
+ - [Install](#install)
19
+ - [Quick Start](#quick-start)
20
+ - [Multi-country Usage](#multi-country-usage)
21
+ - [Available Locales](#available-locales)
22
+ - [API Reference](#api-reference)
23
+ - [`validate{DOC}(value)`](#validatedocvalue)
24
+ - [`format{DOC}(value)`](#formatdocvalue)
25
+ - [`clean{DOC}(value)`](#cleandocvalue)
26
+ - [`calculate{DOC}CheckDigit(value)`](#calculatedoccheckdigitvalue)
27
+ - [Bundle Size](#bundle-size)
28
+ - [Contributing](#contributing)
29
+ - [License](#license)
30
+ - [Documentation](#documentation)
31
+
32
+ ## Why?
6
33
 
7
34
  Validating a NIT in Colombia (calculating the verification digit), a RUT in Chile, a CPF in Brazil, or a CUIT in Argentina is something that all developers in the region have to reprogram over and over again.
8
35
 
9
- ## The Solution
10
-
11
- A modular, tree-shakeable library using the same architecture as `soff-date`. Import only the validators you need.
12
-
13
- ## Features
36
+ This library provides a modular, tree-shakeable solution using the same architecture as `soff-date`. Import only the validators you need.
14
37
 
15
- - 🔢 **Accurate validation** - Uses official algorithms for each document type
16
- - 🌎 **LATAM coverage** - CO, BR, AR, CL, MX
17
- - 🌳 **Tree-shakeable** - Import only what you need
18
- - 📦 **Tiny bundle** - Each locale is < 1KB gzipped
19
- - 💯 **TypeScript** - Full type safety
20
- - ⚡ **Zero dependencies** - Pure JavaScript
21
-
22
- ## Installation
38
+ ## Install
23
39
 
24
40
  ```bash
25
41
  npm install soff-id
@@ -28,46 +44,116 @@ npm install soff-id
28
44
  ## Quick Start
29
45
 
30
46
  ```typescript
31
- // Import only what you need
47
+ // Only Colombia included in bundle (~1KB)
32
48
  import { validateNIT, formatNIT, calculateNITCheckDigit } from 'soff-id/locales/co';
49
+
50
+ // Validate NIT
51
+ validateNIT('900123456-7'); // → true
52
+
53
+ // Calculate check digit
54
+ calculateNITCheckDigit('900123456'); // → '7'
55
+
56
+ // Format NIT
57
+ formatNIT('9001234567'); // → '900.123.456-7'
58
+ ```
59
+
60
+ ### Multi-country Usage
61
+
62
+ ```typescript
33
63
  import { validateCPF, validateCNPJ } from 'soff-id/locales/br';
34
64
  import { validateRUT } from 'soff-id/locales/cl';
35
65
  import { validateCUIT } from 'soff-id/locales/ar';
36
-
37
- // Colombian NIT
38
- validateNIT('900123456-7'); // true
39
- calculateNITCheckDigit('900123456'); // '7'
40
- formatNIT('9001234567'); // '900.123.456-7'
66
+ import { validateRFC } from 'soff-id/locales/mx';
41
67
 
42
68
  // Brazilian CPF
43
- validateCPF('123.456.789-09'); // true/false
69
+ validateCPF('123.456.789-09'); // true/false
44
70
 
45
71
  // Chilean RUT
46
- validateRUT('12.345.678-5'); // true/false
72
+ validateRUT('12.345.678-5'); // true/false
47
73
 
48
74
  // Argentine CUIT
49
- validateCUIT('20-12345678-9'); // true/false
75
+ validateCUIT('20-12345678-9'); // true/false
76
+
77
+ // Mexican RFC
78
+ validateRFC('XAXX010101000'); // → true/false
50
79
  ```
51
80
 
52
81
  ## Available Locales
53
82
 
54
- | Locale | Documents | Description |
55
- | ------ | --------------- | ---------------------------------------------------- |
56
- | `co` | NIT, CC, CE, TI | Colombia - Tax ID, Cédula, Foreign ID, Identity Card |
57
- | `br` | CPF, CNPJ | Brazil - Individual & Business Tax IDs |
58
- | `ar` | DNI, CUIT, CUIL | Argentina - National ID & Tax IDs |
59
- | `cl` | RUT, RUN | Chile - Tax ID & National ID |
60
- | `mx` | RFC, CURP | Mexico - Tax ID & Personal ID |
83
+ | Locale | Import | Documents | Description |
84
+ | ------------ | -------------------- | --------------- | ----------------------------------------- |
85
+ | 🇨🇴 Colombia | `soff-id/locales/co` | NIT, CC, CE, TI | Tax ID, Cédula, Foreign ID, Identity Card |
86
+ | 🇧🇷 Brasil | `soff-id/locales/br` | CPF, CNPJ | Individual & Business Tax IDs |
87
+ | 🇦🇷 Argentina | `soff-id/locales/ar` | DNI, CUIT, CUIL | National ID & Tax IDs |
88
+ | 🇨🇱 Chile | `soff-id/locales/cl` | RUT, RUN | Tax ID & National ID |
89
+ | 🇲🇽 México | `soff-id/locales/mx` | RFC, CURP | Tax ID & Personal ID |
90
+
91
+ ## API Reference
61
92
 
62
- ## Validation API
93
+ Each locale exports a consistent set of functions for each document type:
63
94
 
64
- Each locale exports:
95
+ ### `validate{DOC}(value)`
96
+
97
+ Validates if the document is valid.
98
+
99
+ ```typescript
100
+ import { validateNIT } from 'soff-id/locales/co';
65
101
 
66
- - `validate{DOC}(value)` - Returns `boolean`
67
- - `format{DOC}(value)` - Returns formatted string
68
- - `clean{DOC}(value)` - Removes formatting
69
- - `calculate{DOC}CheckDigit(value)` - Returns check digit (where applicable)
102
+ validateNIT('900123456-7'); // true
103
+ validateNIT('900123456-0'); // false (wrong check digit)
104
+ ```
105
+
106
+ ### `format{DOC}(value)`
107
+
108
+ Formats the document with proper separators.
109
+
110
+ ```typescript
111
+ import { formatNIT } from 'soff-id/locales/co';
112
+
113
+ formatNIT('9001234567'); // → '900.123.456-7'
114
+ ```
115
+
116
+ ### `clean{DOC}(value)`
117
+
118
+ Removes all formatting from the document.
119
+
120
+ ```typescript
121
+ import { cleanNIT } from 'soff-id/locales/co';
122
+
123
+ cleanNIT('900.123.456-7'); // → '9001234567'
124
+ ```
125
+
126
+ ### `calculate{DOC}CheckDigit(value)`
127
+
128
+ Calculates the check digit (where applicable).
129
+
130
+ ```typescript
131
+ import { calculateNITCheckDigit } from 'soff-id/locales/co';
132
+
133
+ calculateNITCheckDigit('900123456'); // → '7'
134
+ ```
135
+
136
+ ## Bundle Size
137
+
138
+ | Import | Size (minified) |
139
+ | ------------ | --------------- |
140
+ | `locales/co` | ~1.1KB |
141
+ | `locales/br` | ~1.0KB |
142
+ | `locales/ar` | ~1.0KB |
143
+ | `locales/cl` | ~0.8KB |
144
+ | `locales/mx` | ~1.3KB |
145
+ | Core only | ~0.5KB |
146
+
147
+ Tree-shaking ensures you only ship what you import.
148
+
149
+ ## Contributing
150
+
151
+ Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests.
70
152
 
71
153
  ## License
72
154
 
73
- MIT
155
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
156
+
157
+ ## Documentation
158
+
159
+ - [Español](docs/README.es.md)
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';function a(e){return e.replace(/[^a-zA-Z0-9]/g,"")}function o(e){return e.replace(/\D/g,"")}function T(e,t){return e.padStart(t,"0")}function R(e,t){let r=0;for(let n=0;n<e.length;n++)r+=parseInt(e[n],10)*t[n%t.length];return r%11}function D(e,t){let r=0;for(let i=0;i<e.length;i++){let n=parseInt(e[i],10)*t[i%t.length];n>9&&(n=Math.floor(n/10)+n%10),r+=n;}return r%10}var v=[3,7,13,17,19,23,29,37,41,43,47,53,59,67,71];function g(e){let t=o(e);if(t.length<8||t.length>15)throw new Error("NIT must be between 8 and 15 digits");let r=0,i=t.split("").reverse();for(let c=0;c<i.length;c++)r+=parseInt(i[c],10)*v[c];let n=r%11;return n===0?"0":n===1?"1":String(11-n)}function N(e){let t=o(e);if(t.length<9||t.length>16)return false;let r=t.slice(0,-1),i=t.slice(-1);try{return g(r)===i}catch{return false}}function P(e){let t=o(e);if(t.length<9)return e;let r=t.slice(0,-1),i=t.slice(-1);return `${r.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${i}`}function b(e){return o(e)}function F(e){let t=o(e);return t.length>=6&&t.length<=10}function $(e){return o(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function y(e){return o(e)}function S(e){let t=o(e);return t.length>=6&&t.length<=10}function k(e){let t=o(e);return t.length>=10&&t.length<=11}var _=[10,9,8,7,6,5,4,3,2],E=[11,10,9,8,7,6,5,4,3,2],A=[5,4,3,2,9,8,7,6,5,4,3,2],G=[6,5,4,3,2,9,8,7,6,5,4,3,2];function u(e,t){let r=0;for(let n=0;n<t.length;n++)r+=parseInt(e[n],10)*t[n];let i=r%11;return i<2?0:11-i}function H(e){let t=o(e);return t.length!==11||/^(\d)\1+$/.test(t)||u(t.slice(0,9),_)!==parseInt(t[9],10)?false:u(t.slice(0,10),E)===parseInt(t[10],10)}function J(e){let t=o(e).padStart(11,"0");return `${t.slice(0,3)}.${t.slice(3,6)}.${t.slice(6,9)}-${t.slice(9)}`}function L(e){return o(e)}function Z(e){let t=o(e);return t.length!==14||/^(\d)\1+$/.test(t)||u(t.slice(0,12),A)!==parseInt(t[12],10)?false:u(t.slice(0,13),G)===parseInt(t[13],10)}function M(e){let t=o(e).padStart(14,"0");return `${t.slice(0,2)}.${t.slice(2,5)}.${t.slice(5,8)}/${t.slice(8,12)}-${t.slice(12)}`}function W(e){return o(e)}var f=[2,3,4,5,6,7];function d(e){let r=o(e).split("").reverse(),i=0;for(let c=0;c<r.length;c++)i+=parseInt(r[c],10)*f[c%f.length];let n=11-i%11;return n===11?"0":n===10?"K":String(n)}function p(e){let t=a(e).toUpperCase();if(t.length<8||t.length>9)return false;let r=t.slice(0,-1),i=t.slice(-1);return /^\d+$/.test(r)?d(r)===i:false}function C(e){let t=a(e).toUpperCase();if(t.length<2)return e;let r=t.slice(0,-1),i=t.slice(-1);return `${r.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${i}`}function m(e){return a(e).toUpperCase()}var B=p,w=C,O=m;var V=[5,4,3,2,7,6,5,4,3,2];function I(e){let t=o(e);if(t.length!==10)throw new Error("CUIT body must be 10 digits");let r=0;for(let n=0;n<10;n++)r+=parseInt(t[n],10)*V[n];let i=11-r%11;return i===11?"0":i===10?"9":String(i)}function h(e){let t=o(e);if(t.length!==11)return false;let r=t.slice(0,2);if(!["20","23","24","27","30","33","34"].includes(r))return false;let n=t.slice(0,10),c=t.slice(-1);try{return I(n)===c}catch{return false}}function U(e){let t=o(e).padStart(11,"0");return `${t.slice(0,2)}-${t.slice(2,10)}-${t.slice(10)}`}function x(e){return o(e)}var K=h,Y=U,j=x;function z(e){let t=o(e);return t.length>=7&&t.length<=8}function Q(e){return o(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function X(e){return o(e)}var q=/^[A-ZÑ&]{4}\d{6}[A-Z0-9]{3}$/,tt=/^[A-ZÑ&]{3}\d{6}[A-Z0-9]{3}$/,et=/^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z0-9]\d$/;function nt(e){let t=a(e).toUpperCase();return t.length!==12&&t.length!==13?false:t.length===13?q.test(t):tt.test(t)}function rt(e){return a(e).toUpperCase()}function it(e){return a(e).toUpperCase()}function ot(e){let t=a(e).toUpperCase();return t.length!==18||!et.test(t)?false:ct(t)}function ct(e){let t="0123456789ABCDEFGHIJKLMN\xD1OPQRSTUVWXYZ",r=0;for(let n=0;n<17;n++){let c=e[n],s=t.indexOf(c);if(s===-1)return false;r+=s*(18-n);}return (10-r%10)%10===parseInt(e[17],10)}function at(e){return a(e).toUpperCase()}function st(e){return a(e).toUpperCase()}function lt(e){let t=a(e).toUpperCase();if(t.length<11)return null;let r=t[10];return r==="H"?"M":r==="M"?"F":null}function ut(e){let t=a(e).toUpperCase();if(t.length<10)return null;let r=t.slice(4,6),i=t.slice(6,8),n=t.slice(8,10),c=t[16],s;/\d/.test(c)?s=1900+parseInt(r,10):s=2e3+parseInt(r,10);let l=new Date(s,parseInt(i,10)-1,parseInt(n,10));return l.getFullYear()!==s||l.getMonth()!==parseInt(i,10)-1||l.getDate()!==parseInt(n,10)?null:l}exports.calculateCUITCheckDigit=I;exports.calculateNITCheckDigit=g;exports.calculateRUTCheckDigit=d;exports.cleanCC=y;exports.cleanCNPJ=W;exports.cleanCPF=L;exports.cleanCUIL=j;exports.cleanCUIT=x;exports.cleanCURP=st;exports.cleanDNI=X;exports.cleanDigits=o;exports.cleanDocument=a;exports.cleanNIT=b;exports.cleanRFC=it;exports.cleanRUN=O;exports.cleanRUT=m;exports.formatCC=$;exports.formatCNPJ=M;exports.formatCPF=J;exports.formatCUIL=Y;exports.formatCUIT=U;exports.formatCURP=at;exports.formatDNI=Q;exports.formatNIT=P;exports.formatRFC=rt;exports.formatRUN=w;exports.formatRUT=C;exports.getCURPBirthDate=ut;exports.getCURPGender=lt;exports.mod10=D;exports.mod11=R;exports.padStart=T;exports.validateCC=F;exports.validateCE=S;exports.validateCNPJ=Z;exports.validateCPF=H;exports.validateCUIL=K;exports.validateCUIT=h;exports.validateCURP=ot;exports.validateDNI=z;exports.validateNIT=N;exports.validateRFC=nt;exports.validateRUN=B;exports.validateRUT=p;exports.validateTI=k;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';function l(e){return e.replace(/[^a-zA-Z0-9]/g,"")}function a(e){return e.replace(/\D/g,"")}function G(e,t){return e.padStart(t,"0")}function Z(e,t){let n=0;for(let o=0;o<e.length;o++)n+=parseInt(e[o],10)*t[o%t.length];return n%11}function H(e,t){let n=0;for(let r=0;r<e.length;r++){let o=parseInt(e[r],10)*t[r%t.length];o>9&&(o=Math.floor(o/10)+o%10),n+=o;}return n%10}var w=[3,7,13,17,19,23,29,37,41,43,47,53,59,67,71];function p(e){let t=a(e);if(t.length<8||t.length>15)throw new Error("NIT must be between 8 and 15 digits");let n=0,r=t.split("").reverse();for(let i=0;i<r.length;i++)n+=parseInt(r[i],10)*w[i];let o=n%11;return o===0?"0":o===1?"1":String(11-o)}function Y(e){let t=a(e);if(t.length<9||t.length>16)return false;let n=t.slice(0,-1),r=t.slice(-1);try{return p(n)===r}catch{return false}}function O(e){let t=a(e);if(t.length<9)return e;let n=t.slice(0,-1),r=t.slice(-1);return `${n.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${r}`}function W(e){return a(e)}function z(e){let t=a(e);return t.length>=6&&t.length<=10}function V(e){return a(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function j(e){return a(e)}function Q(e){let t=e.replace(/[^a-zA-Z0-9]/g,"");return t.length>=6&&t.length<=10}function K(e){return e.replace(/[^a-zA-Z0-9]/g,"").toUpperCase()}function X(e){return e.replace(/[^a-zA-Z0-9]/g,"").toUpperCase()}function q(e){let t=a(e);return t.length>=10&&t.length<=11}function tt(e){return a(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function et(e){return a(e)}function I(e){let t=a(e);if(t.length<9)return false;let n=t[0];return n==="8"||n==="9"}function nt(e){return a(e).length<9?false:!I(e)}function rt(e=true){let t=e?Math.random()<.5?"8":"9":String(Math.floor(Math.random()*8)),n=Math.floor(Math.random()*7)+8,r=t;for(let i=1;i<n;i++)r+=Math.floor(Math.random()*10);let o=p(r);return r+o}var x=[10,9,8,7,6,5,4,3,2],T=[11,10,9,8,7,6,5,4,3,2],U=[5,4,3,2,9,8,7,6,5,4,3,2],D=[6,5,4,3,2,9,8,7,6,5,4,3,2];function s(e,t){let n=0;for(let o=0;o<t.length;o++)n+=parseInt(e[o],10)*t[o];let r=n%11;return r<2?0:11-r}function N(e){let t=a(e).slice(0,9).padStart(9,"0");if(t.length!==9)throw new Error("CPF body must be 9 digits");let n=s(t,x),r=s(t+n,T);return `${n}${r}`}function P(e){let t=a(e).slice(0,12).padStart(12,"0");if(t.length!==12)throw new Error("CNPJ body must be 12 digits");let n=s(t,U),r=s(t+n,D);return `${n}${r}`}function ot(e){let t=a(e);return t.length!==11||/^(\d)\1+$/.test(t)||s(t.slice(0,9),x)!==parseInt(t[9],10)?false:s(t.slice(0,10),T)===parseInt(t[10],10)}function at(e){let t=a(e).padStart(11,"0");return `${t.slice(0,3)}.${t.slice(3,6)}.${t.slice(6,9)}-${t.slice(9)}`}function it(e){return a(e)}function lt(e){let t=a(e);return t.length!==14||/^(\d)\1+$/.test(t)||s(t.slice(0,12),U)!==parseInt(t[12],10)?false:s(t.slice(0,13),D)===parseInt(t[13],10)}function ct(e){let t=a(e).padStart(14,"0");return `${t.slice(0,2)}.${t.slice(2,5)}.${t.slice(5,8)}/${t.slice(8,12)}-${t.slice(12)}`}function st(e){return a(e)}function ut(){let e="";for(let n=0;n<9;n++)e+=Math.floor(Math.random()*10);let t=N(e);return e+t}function gt(e="0001"){let t="";for(let o=0;o<8;o++)t+=Math.floor(Math.random()*10);let n=t+e.padStart(4,"0"),r=P(n);return n+r}function ft(e){let t=a(e);return t.length!==14?false:t.slice(8,12)==="0001"}function dt(e){let t=a(e);return t.length!==14?false:t.slice(8,12)!=="0001"}function pt(e){let t=a(e);return t.length!==14?null:t.slice(8,12)}var R=[2,3,4,5,6,7];function f(e){let n=a(e).split("").reverse(),r=0;for(let i=0;i<n.length;i++)r+=parseInt(n[i],10)*R[i%R.length];let o=11-r%11;return o===11?"0":o===10?"K":String(o)}function C(e){let t=l(e).toUpperCase();if(t.length<8||t.length>9)return false;let n=t.slice(0,-1),r=t.slice(-1);return /^\d+$/.test(n)?f(n)===r:false}function h(e){let t=l(e).toUpperCase();if(t.length<2)return e;let n=t.slice(0,-1),r=t.slice(-1);return `${n.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${r}`}function b(e){return l(e).toUpperCase()}var Ct=C,ht=h,mt=b,It=f;function xt(){let e=Math.random()<.5?7:8,t="";t+=Math.floor(Math.random()*9)+1;for(let r=1;r<e;r++)t+=Math.floor(Math.random()*10);let n=f(t);return t+n}function Tt(e){return C(e)?h(e):null}var Ut=[5,4,3,2,7,6,5,4,3,2];function d(e){let t=a(e);if(t.length!==10)throw new Error("CUIT body must be 10 digits");let n=0;for(let o=0;o<10;o++)n+=parseInt(t[o],10)*Ut[o];let r=11-n%11;return r===11?"0":r===10?"9":String(r)}function y(e){let t=a(e);if(t.length!==11)return false;let n=t.slice(0,2);if(!["20","23","24","27","30","33","34"].includes(n))return false;let o=t.slice(0,10),i=t.slice(-1);try{return d(o)===i}catch{return false}}function F(e){let t=a(e).padStart(11,"0");return `${t.slice(0,2)}-${t.slice(2,10)}-${t.slice(10)}`}function S(e){return a(e)}var Dt=y,Nt=F,Pt=S,Rt=d;function bt(e){let t=a(e);return t.length>=7&&t.length<=8}function yt(e){return a(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function Ft(e){return a(e)}var m=["30","33","34"],St=["20","23","24","27"];function vt(e){let t=a(e);if(t.length!==11)return false;let n=t.slice(0,2);return m.includes(n)}function Mt(e){let t=a(e);if(t.length!==11)return false;let n=t.slice(0,2);return St.includes(n)}function kt(e){let t=a(e);if(t.length!==11)return "unknown";let n=t.slice(0,2);return m.includes(n)?"company":n==="20"?"male":n==="27"?"female":"unknown"}function Et(e){let t=a(e);return t.length!==11?null:t.slice(2,10)}function v(e,t="20"){let n=a(e).padStart(8,"0"),r=t+n,o=d(r);return r+o}function $t(e=false){let t=e?m:["20","27"],n=t[Math.floor(Math.random()*t.length)],r="";for(let o=0;o<8;o++)r+=Math.floor(Math.random()*10);return v(r,n)}var Jt=/^[A-ZÑ&]{4}\d{6}[A-Z0-9]{3}$/,_t=/^[A-ZÑ&]{3}\d{6}[A-Z0-9]{3}$/,At=/^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z0-9]\d$/;function M(e){let t=l(e).toUpperCase();return t.length!==12&&t.length!==13?false:t.length===13?Jt.test(t):_t.test(t)}function Lt(e){return l(e).toUpperCase()}function Bt(e){return l(e).toUpperCase()}function k(e){let t=l(e).toUpperCase();return t.length!==18||!At.test(t)?false:Gt(t)}function Gt(e){let t="0123456789ABCDEFGHIJKLMN\xD1OPQRSTUVWXYZ",n=0;for(let o=0;o<17;o++){let i=e[o],c=t.indexOf(i);if(c===-1)return false;n+=c*(18-o);}return (10-n%10)%10===parseInt(e[17],10)}function Zt(e){return l(e).toUpperCase()}function Ht(e){return l(e).toUpperCase()}function E(e){let t=l(e).toUpperCase();if(t.length<11)return null;let n=t[10];return n==="H"?"M":n==="M"?"F":null}function $(e){let t=l(e).toUpperCase();if(t.length<10)return null;let n=t.slice(4,6),r=t.slice(6,8),o=t.slice(8,10),i=t[16],c;/\d/.test(i)?c=1900+parseInt(n,10):c=2e3+parseInt(n,10);let u=new Date(c,parseInt(r,10)-1,parseInt(o,10));return u.getFullYear()!==c||u.getMonth()!==parseInt(r,10)-1||u.getDate()!==parseInt(o,10)?null:u}var J={AS:"Aguascalientes",BC:"Baja California",BS:"Baja California Sur",CC:"Campeche",CL:"Coahuila",CM:"Colima",CS:"Chiapas",CH:"Chihuahua",DF:"Ciudad de M\xE9xico",DG:"Durango",GT:"Guanajuato",GR:"Guerrero",HG:"Hidalgo",JC:"Jalisco",MC:"Estado de M\xE9xico",MN:"Michoac\xE1n",MS:"Morelos",NT:"Nayarit",NL:"Nuevo Le\xF3n",OC:"Oaxaca",PL:"Puebla",QT:"Quer\xE9taro",QR:"Quintana Roo",SP:"San Luis Potos\xED",SL:"Sinaloa",SR:"Sonora",TC:"Tabasco",TS:"Tamaulipas",TL:"Tlaxcala",VZ:"Veracruz",YN:"Yucat\xE1n",ZS:"Zacatecas",NE:"Nacido en el Extranjero"};function _(e){let t=l(e).toUpperCase();if(t.length<13)return null;let n=t.slice(11,13);return J[n]||null}function A(e){let t=l(e).toUpperCase();if(t.length<13)return null;let n=t.slice(11,13);return J[n]?n:null}function L(e){return l(e).toUpperCase().length===12}function wt(e){return l(e).toUpperCase().length===13}function B(e){let t=l(e).toUpperCase();if(t.length!==12&&t.length!==13)return null;let n=t.length===12?3:4,r=t.slice(n,n+6),o=parseInt(r.slice(0,2),10),i=parseInt(r.slice(2,4),10),c=parseInt(r.slice(4,6),10),u=o>30?1900+o:2e3+o,g=new Date(u,i-1,c);return g.getFullYear()!==u||g.getMonth()!==i-1||g.getDate()!==c?null:g}function Yt(e){return {valid:k(e),gender:E(e),birthDate:$(e),birthState:_(e),stateCode:A(e)}}function Ot(e){return M(e)?{valid:true,type:L(e)?"company":"person",date:B(e)}:{valid:false,type:null,date:null}}exports.calculateCNPJCheckDigit=P;exports.calculateCPFCheckDigit=N;exports.calculateCUILCheckDigit=Rt;exports.calculateCUITCheckDigit=d;exports.calculateNITCheckDigit=p;exports.calculateRUNCheckDigit=It;exports.calculateRUTCheckDigit=f;exports.cleanCC=j;exports.cleanCE=X;exports.cleanCNPJ=st;exports.cleanCPF=it;exports.cleanCUIL=Pt;exports.cleanCUIT=S;exports.cleanCURP=Ht;exports.cleanDNI=Ft;exports.cleanDigits=a;exports.cleanDocument=l;exports.cleanNIT=W;exports.cleanRFC=Bt;exports.cleanRUN=mt;exports.cleanRUT=b;exports.cleanTI=et;exports.formatCC=V;exports.formatCE=K;exports.formatCNPJ=ct;exports.formatCPF=at;exports.formatCUIL=Nt;exports.formatCUIT=F;exports.formatCURP=Zt;exports.formatDNI=yt;exports.formatNIT=O;exports.formatRFC=Lt;exports.formatRUN=ht;exports.formatRUT=h;exports.formatTI=tt;exports.generateCNPJ=gt;exports.generateCPF=ut;exports.generateCUIT=$t;exports.generateCUITFromDNI=v;exports.generateNIT=rt;exports.generateRUT=xt;exports.getCNPJBranchNumber=pt;exports.getCUITType=kt;exports.getCURPBirthDate=$;exports.getCURPBirthState=_;exports.getCURPGender=E;exports.getCURPStateCode=A;exports.getDNIFromCUIT=Et;exports.getFormattedRUTIfValid=Tt;exports.getRFCDate=B;exports.isCNPJFilial=dt;exports.isCNPJMatriz=ft;exports.isCUITCompany=vt;exports.isCUITPerson=Mt;exports.isNITCompany=I;exports.isNITPerson=nt;exports.isRFCCompany=L;exports.isRFCPerson=wt;exports.mod10=H;exports.mod11=Z;exports.padStart=G;exports.parseCURP=Yt;exports.parseRFC=Ot;exports.validateCC=z;exports.validateCE=Q;exports.validateCNPJ=lt;exports.validateCPF=ot;exports.validateCUIL=Dt;exports.validateCUIT=y;exports.validateCURP=k;exports.validateDNI=bt;exports.validateNIT=Y;exports.validateRFC=M;exports.validateRUN=Ct;exports.validateRUT=C;exports.validateTI=q;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/utils.ts","../src/locales/co.ts","../src/locales/br.ts","../src/locales/cl.ts","../src/locales/ar.ts","../src/locales/mx.ts"],"names":["cleanDocument","value","cleanDigits","padStart","length","mod11","digits","weights","sum","i","mod10","product","NIT_WEIGHTS","calculateNITCheckDigit","nit","cleaned","reversed","remainder","validateNIT","body","checkDigit","formatNIT","cleanNIT","validateCC","cc","formatCC","cleanCC","validateCE","ce","validateTI","ti","CPF_WEIGHTS_1","CPF_WEIGHTS_2","CNPJ_WEIGHTS_1","CNPJ_WEIGHTS_2","calcCheckDigit","validateCPF","cpf","formatCPF","cleanCPF","validateCNPJ","cnpj","formatCNPJ","cleanCNPJ","RUT_WEIGHTS","calculateRUTCheckDigit","rut","validateRUT","formatRUT","cleanRUT","validateRUN","formatRUN","cleanRUN","CUIT_WEIGHTS","calculateCUITCheckDigit","cuit","validateCUIT","type","formatCUIT","cleanCUIT","validateCUIL","formatCUIL","cleanCUIL","validateDNI","dni","formatDNI","cleanDNI","RFC_PATTERN_FISICA","RFC_PATTERN_MORAL","CURP_PATTERN","validateRFC","rfc","formatRFC","cleanRFC","validateCURP","curp","validateCURPCheckDigit","dictionary","char","formatCURP","cleanCURP","getCURPGender","genderChar","getCURPBirthDate","yearPart","month","day","centuryChar","year","date"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Remove all non-alphanumeric characters\n */\nexport function cleanDocument(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n}\n\n/**\n * Remove all non-digit characters\n */\nexport function cleanDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Pad a string with leading zeros\n */\nexport function padStart(value: string, length: number): string {\n return value.padStart(length, '0');\n}\n\n/**\n * Calculate modulo 11 check digit (common algorithm)\n */\nexport function mod11(digits: string, weights: number[]): number {\n let sum = 0;\n for (let i = 0; i < digits.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i % weights.length];\n }\n const remainder = sum % 11;\n return remainder;\n}\n\n/**\n * Calculate modulo 10 check digit (Luhn-like algorithms)\n */\nexport function mod10(digits: string, weights: number[]): number {\n let sum = 0;\n for (let i = 0; i < digits.length; i++) {\n let product = parseInt(digits[i], 10) * weights[i % weights.length];\n if (product > 9) {\n product = Math.floor(product / 10) + (product % 10);\n }\n sum += product;\n }\n return sum % 10;\n}\n","import { cleanDigits } from '../core/utils.js';\n\n/**\n * NIT verification weights (Colombian tax ID)\n * Algorithm: Multiply each digit by its weight, sum, mod 11\n */\nconst NIT_WEIGHTS = [3, 7, 13, 17, 19, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71];\n\n/**\n * Calculate the NIT check digit\n * @param nit - The NIT without check digit (8-15 digits)\n * @returns The check digit (0-9)\n */\nexport function calculateNITCheckDigit(nit: string): string {\n const cleaned = cleanDigits(nit);\n\n if (cleaned.length < 8 || cleaned.length > 15) {\n throw new Error('NIT must be between 8 and 15 digits');\n }\n\n let sum = 0;\n const reversed = cleaned.split('').reverse();\n\n for (let i = 0; i < reversed.length; i++) {\n sum += parseInt(reversed[i], 10) * NIT_WEIGHTS[i];\n }\n\n const remainder = sum % 11;\n\n if (remainder === 0) return '0';\n if (remainder === 1) return '1';\n return String(11 - remainder);\n}\n\n/**\n * Validate a Colombian NIT\n * @param nit - The NIT to validate (with or without check digit)\n * @returns true if valid\n */\nexport function validateNIT(nit: string): boolean {\n const cleaned = cleanDigits(nit);\n\n if (cleaned.length < 9 || cleaned.length > 16) {\n return false;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n try {\n return calculateNITCheckDigit(body) === checkDigit;\n } catch {\n return false;\n }\n}\n\n/**\n * Format a NIT for display\n * @param nit - The NIT to format\n * @returns Formatted NIT (e.g., \"900.123.456-7\")\n */\nexport function formatNIT(nit: string): string {\n const cleaned = cleanDigits(nit);\n\n if (cleaned.length < 9) {\n return nit;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n // Format with dots every 3 digits from right\n const formatted = body.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${formatted}-${checkDigit}`;\n}\n\n/**\n * Clean a NIT (remove all formatting)\n */\nexport function cleanNIT(nit: string): string {\n return cleanDigits(nit);\n}\n\n/**\n * Validate a Colombian Cédula de Ciudadanía (CC)\n * @param cc - The CC number (6-10 digits)\n * @returns true if valid format\n */\nexport function validateCC(cc: string): boolean {\n const cleaned = cleanDigits(cc);\n return cleaned.length >= 6 && cleaned.length <= 10;\n}\n\n/**\n * Format a Cédula for display\n */\nexport function formatCC(cc: string): string {\n const cleaned = cleanDigits(cc);\n return cleaned.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n}\n\n/**\n * Clean a Cédula\n */\nexport function cleanCC(cc: string): string {\n return cleanDigits(cc);\n}\n\n/**\n * Validate a Cédula de Extranjería (CE)\n * @param ce - The CE number (6-10 digits)\n */\nexport function validateCE(ce: string): boolean {\n const cleaned = cleanDigits(ce);\n return cleaned.length >= 6 && cleaned.length <= 10;\n}\n\n/**\n * Validate a Tarjeta de Identidad (TI)\n * @param ti - The TI number (10-11 digits)\n */\nexport function validateTI(ti: string): boolean {\n const cleaned = cleanDigits(ti);\n return cleaned.length >= 10 && cleaned.length <= 11;\n}\n","import { cleanDigits } from '../core/utils.js';\n\n/**\n * CPF weights for first check digit\n */\nconst CPF_WEIGHTS_1 = [10, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * CPF weights for second check digit\n */\nconst CPF_WEIGHTS_2 = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * CNPJ weights for first check digit\n */\nconst CNPJ_WEIGHTS_1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * CNPJ weights for second check digit\n */\nconst CNPJ_WEIGHTS_2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * Calculate CPF/CNPJ check digit using mod 11\n */\nfunction calcCheckDigit(digits: string, weights: number[]): number {\n let sum = 0;\n for (let i = 0; i < weights.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i];\n }\n const remainder = sum % 11;\n return remainder < 2 ? 0 : 11 - remainder;\n}\n\n/**\n * Validate a Brazilian CPF (Individual Tax ID)\n * @param cpf - The CPF to validate (11 digits)\n */\nexport function validateCPF(cpf: string): boolean {\n const cleaned = cleanDigits(cpf);\n\n if (cleaned.length !== 11) {\n return false;\n }\n\n // Check for known invalid CPFs (all same digits)\n if (/^(\\d)\\1+$/.test(cleaned)) {\n return false;\n }\n\n // Calculate first check digit\n const digit1 = calcCheckDigit(cleaned.slice(0, 9), CPF_WEIGHTS_1);\n if (digit1 !== parseInt(cleaned[9], 10)) {\n return false;\n }\n\n // Calculate second check digit\n const digit2 = calcCheckDigit(cleaned.slice(0, 10), CPF_WEIGHTS_2);\n return digit2 === parseInt(cleaned[10], 10);\n}\n\n/**\n * Format a CPF for display\n * @returns Formatted CPF (e.g., \"123.456.789-09\")\n */\nexport function formatCPF(cpf: string): string {\n const cleaned = cleanDigits(cpf).padStart(11, '0');\n return `${cleaned.slice(0, 3)}.${cleaned.slice(3, 6)}.${cleaned.slice(6, 9)}-${cleaned.slice(9)}`;\n}\n\n/**\n * Clean a CPF\n */\nexport function cleanCPF(cpf: string): string {\n return cleanDigits(cpf);\n}\n\n/**\n * Validate a Brazilian CNPJ (Business Tax ID)\n * @param cnpj - The CNPJ to validate (14 digits)\n */\nexport function validateCNPJ(cnpj: string): boolean {\n const cleaned = cleanDigits(cnpj);\n\n if (cleaned.length !== 14) {\n return false;\n }\n\n // Check for known invalid CNPJs (all same digits)\n if (/^(\\d)\\1+$/.test(cleaned)) {\n return false;\n }\n\n // Calculate first check digit\n const digit1 = calcCheckDigit(cleaned.slice(0, 12), CNPJ_WEIGHTS_1);\n if (digit1 !== parseInt(cleaned[12], 10)) {\n return false;\n }\n\n // Calculate second check digit\n const digit2 = calcCheckDigit(cleaned.slice(0, 13), CNPJ_WEIGHTS_2);\n return digit2 === parseInt(cleaned[13], 10);\n}\n\n/**\n * Format a CNPJ for display\n * @returns Formatted CNPJ (e.g., \"12.345.678/0001-95\")\n */\nexport function formatCNPJ(cnpj: string): string {\n const cleaned = cleanDigits(cnpj).padStart(14, '0');\n return `${cleaned.slice(0, 2)}.${cleaned.slice(2, 5)}.${cleaned.slice(5, 8)}/${cleaned.slice(8, 12)}-${cleaned.slice(12)}`;\n}\n\n/**\n * Clean a CNPJ\n */\nexport function cleanCNPJ(cnpj: string): string {\n return cleanDigits(cnpj);\n}\n","import { cleanDocument, cleanDigits } from '../core/utils.js';\n\n/**\n * RUT/RUN validation weights\n */\nconst RUT_WEIGHTS = [2, 3, 4, 5, 6, 7];\n\n/**\n * Calculate RUT check digit\n * @param rut - The RUT body (without check digit)\n * @returns The check digit (0-9 or 'K')\n */\nexport function calculateRUTCheckDigit(rut: string): string {\n const cleaned = cleanDigits(rut);\n const reversed = cleaned.split('').reverse();\n\n let sum = 0;\n for (let i = 0; i < reversed.length; i++) {\n sum += parseInt(reversed[i], 10) * RUT_WEIGHTS[i % RUT_WEIGHTS.length];\n }\n\n const remainder = 11 - (sum % 11);\n\n if (remainder === 11) return '0';\n if (remainder === 10) return 'K';\n return String(remainder);\n}\n\n/**\n * Validate a Chilean RUT (Rol Único Tributario)\n * @param rut - The RUT to validate (e.g., \"12.345.678-5\" or \"12345678-K\")\n */\nexport function validateRUT(rut: string): boolean {\n const cleaned = cleanDocument(rut).toUpperCase();\n\n if (cleaned.length < 8 || cleaned.length > 9) {\n return false;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n // Body must be all digits\n if (!/^\\d+$/.test(body)) {\n return false;\n }\n\n return calculateRUTCheckDigit(body) === checkDigit;\n}\n\n/**\n * Format a RUT for display\n * @returns Formatted RUT (e.g., \"12.345.678-5\")\n */\nexport function formatRUT(rut: string): string {\n const cleaned = cleanDocument(rut).toUpperCase();\n\n if (cleaned.length < 2) {\n return rut;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n // Format with dots every 3 digits from right\n const formatted = body.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${formatted}-${checkDigit}`;\n}\n\n/**\n * Clean a RUT\n */\nexport function cleanRUT(rut: string): string {\n return cleanDocument(rut).toUpperCase();\n}\n\n/**\n * Validate a Chilean RUN (same algorithm as RUT)\n */\nexport const validateRUN = validateRUT;\nexport const formatRUN = formatRUT;\nexport const cleanRUN = cleanRUT;\n","import { cleanDigits } from '../core/utils.js';\n\n/**\n * CUIT/CUIL weights\n */\nconst CUIT_WEIGHTS = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];\n\n/**\n * Calculate CUIT/CUIL check digit\n * @param cuit - The CUIT body (10 digits: type + DNI)\n * @returns The check digit (0-9)\n */\nexport function calculateCUITCheckDigit(cuit: string): string {\n const cleaned = cleanDigits(cuit);\n\n if (cleaned.length !== 10) {\n throw new Error('CUIT body must be 10 digits');\n }\n\n let sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += parseInt(cleaned[i], 10) * CUIT_WEIGHTS[i];\n }\n\n const remainder = 11 - (sum % 11);\n\n if (remainder === 11) return '0';\n if (remainder === 10) return '9'; // Special case for Argentina\n return String(remainder);\n}\n\n/**\n * Validate an Argentine CUIT (Clave Única de Identificación Tributaria)\n * @param cuit - The CUIT to validate (e.g., \"20-12345678-9\")\n */\nexport function validateCUIT(cuit: string): boolean {\n const cleaned = cleanDigits(cuit);\n\n if (cleaned.length !== 11) {\n return false;\n }\n\n // Valid type prefixes: 20, 23, 24, 27, 30, 33, 34\n const type = cleaned.slice(0, 2);\n const validTypes = ['20', '23', '24', '27', '30', '33', '34'];\n if (!validTypes.includes(type)) {\n return false;\n }\n\n const body = cleaned.slice(0, 10);\n const checkDigit = cleaned.slice(-1);\n\n try {\n return calculateCUITCheckDigit(body) === checkDigit;\n } catch {\n return false;\n }\n}\n\n/**\n * Format a CUIT for display\n * @returns Formatted CUIT (e.g., \"20-12345678-9\")\n */\nexport function formatCUIT(cuit: string): string {\n const cleaned = cleanDigits(cuit).padStart(11, '0');\n return `${cleaned.slice(0, 2)}-${cleaned.slice(2, 10)}-${cleaned.slice(10)}`;\n}\n\n/**\n * Clean a CUIT\n */\nexport function cleanCUIT(cuit: string): string {\n return cleanDigits(cuit);\n}\n\n/**\n * CUIL validation (same algorithm as CUIT)\n */\nexport const validateCUIL = validateCUIT;\nexport const formatCUIL = formatCUIT;\nexport const cleanCUIL = cleanCUIT;\nexport const calculateCUILCheckDigit = calculateCUITCheckDigit;\n\n/**\n * Validate an Argentine DNI\n * @param dni - The DNI number (7-8 digits)\n */\nexport function validateDNI(dni: string): boolean {\n const cleaned = cleanDigits(dni);\n return cleaned.length >= 7 && cleaned.length <= 8;\n}\n\n/**\n * Format a DNI for display\n */\nexport function formatDNI(dni: string): string {\n const cleaned = cleanDigits(dni);\n return cleaned.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n}\n\n/**\n * Clean a DNI\n */\nexport function cleanDNI(dni: string): string {\n return cleanDigits(dni);\n}\n","import { cleanDocument } from '../core/utils.js';\n\n/**\n * Valid RFC patterns\n * - Persona física: 4 letters + 6 digits + 3 alphanumeric (homoclave)\n * - Persona moral: 3 letters + 6 digits + 3 alphanumeric (homoclave)\n */\nconst RFC_PATTERN_FISICA = /^[A-ZÑ&]{4}\\d{6}[A-Z0-9]{3}$/;\nconst RFC_PATTERN_MORAL = /^[A-ZÑ&]{3}\\d{6}[A-Z0-9]{3}$/;\n\n/**\n * CURP pattern\n * 18 characters: 4 letters + 6 digits + 6 letters + 2 alphanumeric\n */\nconst CURP_PATTERN = /^[A-Z]{4}\\d{6}[HM][A-Z]{5}[A-Z0-9]\\d$/;\n\n/**\n * Validate a Mexican RFC (Registro Federal de Contribuyentes)\n * @param rfc - The RFC to validate\n */\nexport function validateRFC(rfc: string): boolean {\n const cleaned = cleanDocument(rfc).toUpperCase();\n\n if (cleaned.length !== 12 && cleaned.length !== 13) {\n return false;\n }\n\n // 12 chars = Persona moral, 13 chars = Persona física\n if (cleaned.length === 13) {\n return RFC_PATTERN_FISICA.test(cleaned);\n }\n\n return RFC_PATTERN_MORAL.test(cleaned);\n}\n\n/**\n * Format an RFC for display (uppercase, no separators)\n */\nexport function formatRFC(rfc: string): string {\n return cleanDocument(rfc).toUpperCase();\n}\n\n/**\n * Clean an RFC\n */\nexport function cleanRFC(rfc: string): string {\n return cleanDocument(rfc).toUpperCase();\n}\n\n/**\n * Validate a Mexican CURP (Clave Única de Registro de Población)\n * @param curp - The CURP to validate (18 characters)\n */\nexport function validateCURP(curp: string): boolean {\n const cleaned = cleanDocument(curp).toUpperCase();\n\n if (cleaned.length !== 18) {\n return false;\n }\n\n if (!CURP_PATTERN.test(cleaned)) {\n return false;\n }\n\n // Validate check digit\n return validateCURPCheckDigit(cleaned);\n}\n\n/**\n * CURP check digit validation\n */\nfunction validateCURPCheckDigit(curp: string): boolean {\n const dictionary = '0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';\n let sum = 0;\n\n for (let i = 0; i < 17; i++) {\n const char = curp[i];\n const value = dictionary.indexOf(char);\n if (value === -1) return false;\n sum += value * (18 - i);\n }\n\n const checkDigit = (10 - (sum % 10)) % 10;\n return checkDigit === parseInt(curp[17], 10);\n}\n\n/**\n * Format a CURP for display\n */\nexport function formatCURP(curp: string): string {\n return cleanDocument(curp).toUpperCase();\n}\n\n/**\n * Clean a CURP\n */\nexport function cleanCURP(curp: string): string {\n return cleanDocument(curp).toUpperCase();\n}\n\n/**\n * Get the gender from a CURP\n * @returns 'M' for male, 'F' for female, or null if invalid\n */\nexport function getCURPGender(curp: string): 'M' | 'F' | null {\n const cleaned = cleanDocument(curp).toUpperCase();\n if (cleaned.length < 11) return null;\n\n const genderChar = cleaned[10];\n if (genderChar === 'H') return 'M';\n if (genderChar === 'M') return 'F';\n return null;\n}\n\n/**\n * Get the birth date from a CURP\n * @returns Date object or null if invalid\n */\nexport function getCURPBirthDate(curp: string): Date | null {\n const cleaned = cleanDocument(curp).toUpperCase();\n if (cleaned.length < 10) return null;\n\n const yearPart = cleaned.slice(4, 6);\n const month = cleaned.slice(6, 8);\n const day = cleaned.slice(8, 10);\n\n // Determine century based on position 17 (digit for century)\n // 0-9 for people born 1900-1999, A for 2000+\n const centuryChar = cleaned[16];\n let year: number;\n\n if (/\\d/.test(centuryChar)) {\n year = 1900 + parseInt(yearPart, 10);\n } else {\n year = 2000 + parseInt(yearPart, 10);\n }\n\n const date = new Date(year, parseInt(month, 10) - 1, parseInt(day, 10));\n\n // Validate the date is real\n if (\n date.getFullYear() !== year ||\n date.getMonth() !== parseInt(month, 10) - 1 ||\n date.getDate() !== parseInt(day, 10)\n ) {\n return null;\n }\n\n return date;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/utils.ts","../src/locales/co.ts","../src/locales/br.ts","../src/locales/cl.ts","../src/locales/ar.ts","../src/locales/mx.ts"],"names":["cleanDocument","value","cleanDigits","padStart","length","mod11","digits","weights","sum","i","mod10","product","NIT_WEIGHTS","calculateNITCheckDigit","nit","cleaned","reversed","remainder","validateNIT","body","checkDigit","formatNIT","cleanNIT","validateCC","cc","formatCC","cleanCC","validateCE","ce","formatCE","cleanCE","validateTI","ti","formatTI","cleanTI","isNITCompany","firstDigit","isNITPerson","generateNIT","isCompany","prefix","CPF_WEIGHTS_1","CPF_WEIGHTS_2","CNPJ_WEIGHTS_1","CNPJ_WEIGHTS_2","calcCheckDigit","calculateCPFCheckDigit","cpf","digit1","digit2","calculateCNPJCheckDigit","cnpj","validateCPF","formatCPF","cleanCPF","validateCNPJ","formatCNPJ","cleanCNPJ","generateCPF","checkDigits","generateCNPJ","branchNumber","base","isCNPJMatriz","isCNPJFilial","getCNPJBranchNumber","RUT_WEIGHTS","calculateRUTCheckDigit","rut","validateRUT","formatRUT","cleanRUT","validateRUN","formatRUN","cleanRUN","calculateRUNCheckDigit","generateRUT","getFormattedRUTIfValid","CUIT_WEIGHTS","calculateCUITCheckDigit","cuit","validateCUIT","type","formatCUIT","cleanCUIT","validateCUIL","formatCUIL","cleanCUIL","calculateCUILCheckDigit","validateDNI","dni","formatDNI","cleanDNI","CUIT_TYPE_COMPANY","CUIT_TYPE_PERSON","isCUITCompany","isCUITPerson","getCUITType","getDNIFromCUIT","generateCUITFromDNI","cleanedDNI","generateCUIT","types","RFC_PATTERN_FISICA","RFC_PATTERN_MORAL","CURP_PATTERN","validateRFC","rfc","formatRFC","cleanRFC","validateCURP","curp","validateCURPCheckDigit","dictionary","char","formatCURP","cleanCURP","getCURPGender","genderChar","getCURPBirthDate","yearPart","month","day","centuryChar","year","date","CURP_STATE_CODES","getCURPBirthState","stateCode","getCURPStateCode","isRFCCompany","isRFCPerson","getRFCDate","dateStart","dateStr","fullYear","parseCURP","parseRFC"],"mappings":"aAGO,SAASA,CAAAA,CAAcC,CAAAA,CAAuB,CACnD,OAAOA,CAAAA,CAAM,OAAA,CAAQ,eAAA,CAAiB,EAAE,CAC1C,CAKO,SAASC,CAAAA,CAAYD,EAAuB,CACjD,OAAOA,CAAAA,CAAM,OAAA,CAAQ,KAAA,CAAO,EAAE,CAChC,CAKO,SAASE,CAAAA,CAASF,CAAAA,CAAeG,CAAAA,CAAwB,CAC9D,OAAOH,CAAAA,CAAM,QAAA,CAASG,CAAAA,CAAQ,GAAG,CACnC,CAKO,SAASC,CAAAA,CAAMC,CAAAA,CAAgBC,CAAAA,CAA2B,CAC/D,IAAIC,CAAAA,CAAM,CAAA,CACV,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIH,CAAAA,CAAO,MAAA,CAAQG,IACjCD,CAAAA,EAAO,QAAA,CAASF,CAAAA,CAAOG,CAAC,CAAA,CAAG,EAAE,CAAA,CAAIF,CAAAA,CAAQE,EAAIF,CAAAA,CAAQ,MAAM,CAAA,CAG7D,OADkBC,CAAAA,CAAM,EAE1B,CAKO,SAASE,EAAMJ,CAAAA,CAAgBC,CAAAA,CAA2B,CAC/D,IAAIC,CAAAA,CAAM,CAAA,CACV,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIH,CAAAA,CAAO,MAAA,CAAQG,CAAAA,EAAAA,CAAK,CACtC,IAAIE,CAAAA,CAAU,SAASL,CAAAA,CAAOG,CAAC,CAAA,CAAG,EAAE,CAAA,CAAIF,CAAAA,CAAQE,CAAAA,CAAIF,CAAAA,CAAQ,MAAM,CAAA,CAC9DI,CAAAA,CAAU,CAAA,GACZA,CAAAA,CAAU,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAU,EAAE,EAAKA,CAAAA,CAAU,EAAA,CAAA,CAElDH,CAAAA,EAAOG,EACT,CACA,OAAOH,CAAAA,CAAM,EACf,CCxCA,IAAMI,CAAAA,CAAc,CAAC,CAAA,CAAG,CAAA,CAAG,EAAA,CAAI,EAAA,CAAI,GAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,GAAI,EAAE,CAAA,CAOtE,SAASC,CAAAA,CAAuBC,CAAAA,CAAqB,CAC1D,IAAMC,CAAAA,CAAUb,EAAYY,CAAG,CAAA,CAE/B,GAAIC,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAQ,MAAA,CAAS,EAAA,CACzC,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAAA,CAGvD,IAAIP,CAAAA,CAAM,EACJQ,CAAAA,CAAWD,CAAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,CAAE,OAAA,EAAQ,CAE3C,IAAA,IAAS,EAAI,CAAA,CAAG,CAAA,CAAIC,CAAAA,CAAS,MAAA,CAAQ,CAAA,EAAA,CACnCR,CAAAA,EAAO,QAAA,CAASQ,CAAAA,CAAS,CAAC,CAAA,CAAG,EAAE,CAAA,CAAIJ,CAAAA,CAAY,CAAC,CAAA,CAGlD,IAAMK,CAAAA,CAAYT,CAAAA,CAAM,EAAA,CAExB,OAAIS,CAAAA,GAAc,CAAA,CAAU,GAAA,CACxBA,CAAAA,GAAc,CAAA,CAAU,IACrB,MAAA,CAAO,EAAA,CAAKA,CAAS,CAC9B,CAOO,SAASC,CAAAA,CAAYJ,CAAAA,CAAsB,CAChD,IAAMC,CAAAA,CAAUb,CAAAA,CAAYY,CAAG,CAAA,CAE/B,GAAIC,CAAAA,CAAQ,MAAA,CAAS,GAAKA,CAAAA,CAAQ,MAAA,CAAS,EAAA,CACzC,OAAO,MAAA,CAGT,IAAMI,CAAAA,CAAOJ,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAC1BK,CAAAA,CAAaL,CAAAA,CAAQ,KAAA,CAAM,EAAE,EAEnC,GAAI,CACF,OAAOF,CAAAA,CAAuBM,CAAI,CAAA,GAAMC,CAC1C,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAOO,SAASC,CAAAA,CAAUP,CAAAA,CAAqB,CAC7C,IAAMC,CAAAA,CAAUb,CAAAA,CAAYY,CAAG,CAAA,CAE/B,GAAIC,CAAAA,CAAQ,MAAA,CAAS,CAAA,CACnB,OAAOD,CAAAA,CAGT,IAAMK,CAAAA,CAAOJ,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,EAC1BK,CAAAA,CAAaL,CAAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,CAKnC,OAAO,CAAA,EAFWI,CAAAA,CAAK,QAAQ,uBAAA,CAAyB,GAAG,CAExC,CAAA,CAAA,EAAIC,CAAU,CAAA,CACnC,CAKO,SAASE,EAASR,CAAAA,CAAqB,CAC5C,OAAOZ,CAAAA,CAAYY,CAAG,CACxB,CAOO,SAASS,CAAAA,CAAWC,CAAAA,CAAqB,CAC9C,IAAMT,CAAAA,CAAUb,CAAAA,CAAYsB,CAAE,CAAA,CAC9B,OAAOT,CAAAA,CAAQ,MAAA,EAAU,CAAA,EAAKA,CAAAA,CAAQ,MAAA,EAAU,EAClD,CAKO,SAASU,EAASD,CAAAA,CAAoB,CAE3C,OADgBtB,CAAAA,CAAYsB,CAAE,CAAA,CACf,OAAA,CAAQ,uBAAA,CAAyB,GAAG,CACrD,CAKO,SAASE,CAAAA,CAAQF,CAAAA,CAAoB,CAC1C,OAAOtB,CAAAA,CAAYsB,CAAE,CACvB,CAMO,SAASG,CAAAA,CAAWC,CAAAA,CAAqB,CAC9C,IAAMb,EAAUa,CAAAA,CAAG,OAAA,CAAQ,eAAA,CAAiB,EAAE,CAAA,CAC9C,OAAOb,CAAAA,CAAQ,MAAA,EAAU,GAAKA,CAAAA,CAAQ,MAAA,EAAU,EAClD,CAKO,SAASc,CAAAA,CAASD,CAAAA,CAAoB,CAE3C,OADgBA,CAAAA,CAAG,OAAA,CAAQ,eAAA,CAAiB,EAAE,CAAA,CAAE,WAAA,EAElD,CAKO,SAASE,CAAAA,CAAQF,CAAAA,CAAoB,CAC1C,OAAOA,CAAAA,CAAG,OAAA,CAAQ,eAAA,CAAiB,EAAE,CAAA,CAAE,WAAA,EACzC,CAMO,SAASG,CAAAA,CAAWC,CAAAA,CAAqB,CAC9C,IAAMjB,CAAAA,CAAUb,CAAAA,CAAY8B,CAAE,CAAA,CAC9B,OAAOjB,CAAAA,CAAQ,MAAA,EAAU,EAAA,EAAMA,EAAQ,MAAA,EAAU,EACnD,CAKO,SAASkB,EAAAA,CAASD,CAAAA,CAAoB,CAE3C,OADgB9B,CAAAA,CAAY8B,CAAE,CAAA,CACf,OAAA,CAAQ,uBAAA,CAAyB,GAAG,CACrD,CAKO,SAASE,EAAAA,CAAQF,CAAAA,CAAoB,CAC1C,OAAO9B,CAAAA,CAAY8B,CAAE,CACvB,CAMO,SAASG,CAAAA,CAAarB,CAAAA,CAAsB,CACjD,IAAMC,CAAAA,CAAUb,CAAAA,CAAYY,CAAG,CAAA,CAC/B,GAAIC,CAAAA,CAAQ,MAAA,CAAS,CAAA,CAAG,OAAO,MAAA,CAC/B,IAAMqB,CAAAA,CAAarB,CAAAA,CAAQ,CAAC,CAAA,CAC5B,OAAOqB,CAAAA,GAAe,GAAA,EAAOA,CAAAA,GAAe,GAC9C,CAKO,SAASC,EAAAA,CAAYvB,CAAAA,CAAsB,CAEhD,OADgBZ,CAAAA,CAAYY,CAAG,CAAA,CACnB,MAAA,CAAS,EAAU,KAAA,CACxB,CAACqB,CAAAA,CAAarB,CAAG,CAC1B,CAMO,SAASwB,EAAAA,CAAYC,EAAqB,IAAA,CAAc,CAC7D,IAAMC,CAAAA,CAASD,CAAAA,CACX,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CACd,GAAA,CACA,GAAA,CACF,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAW,CAAC,CAAC,CAAA,CAClCnC,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAW,CAAC,CAAA,CAAI,CAAA,CAC3Ce,CAAAA,CAAOqB,CAAAA,CAEX,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,EAAIpC,CAAAA,CAAQ,CAAA,EAAA,CAC1Be,CAAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAI,EAAE,CAAA,CAGvC,IAAMC,CAAAA,CAAaP,CAAAA,CAAuBM,CAAI,CAAA,CAC9C,OAAOA,EAAOC,CAChB,CC/LA,IAAMqB,CAAAA,CAAgB,CAAC,EAAA,CAAI,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAK3CC,CAAAA,CAAgB,CAAC,GAAI,EAAA,CAAI,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAK/CC,CAAAA,CAAiB,CAAC,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAKpDC,CAAAA,CAAiB,CAAC,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAK7D,SAASC,CAAAA,CAAevC,CAAAA,CAAgBC,CAAAA,CAA2B,CACjE,IAAIC,CAAAA,CAAM,CAAA,CACV,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,EAAIF,CAAAA,CAAQ,MAAA,CAAQE,CAAAA,EAAAA,CAClCD,CAAAA,EAAO,QAAA,CAASF,CAAAA,CAAOG,CAAC,CAAA,CAAG,EAAE,CAAA,CAAIF,CAAAA,CAAQE,CAAC,CAAA,CAE5C,IAAMQ,CAAAA,CAAYT,CAAAA,CAAM,EAAA,CACxB,OAAOS,CAAAA,CAAY,CAAA,CAAI,CAAA,CAAI,EAAA,CAAKA,CAClC,CAOO,SAAS6B,CAAAA,CAAuBC,CAAAA,CAAqB,CAC1D,IAAMhC,CAAAA,CAAUb,CAAAA,CAAY6C,CAAG,CAAA,CAAE,KAAA,CAAM,EAAG,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAE5D,GAAIhC,CAAAA,CAAQ,SAAW,CAAA,CACrB,MAAM,IAAI,KAAA,CAAM,2BAA2B,CAAA,CAG7C,IAAMiC,CAAAA,CAASH,EAAe9B,CAAAA,CAAS0B,CAAa,CAAA,CAC9CQ,CAAAA,CAASJ,CAAAA,CAAe9B,CAAAA,CAAUiC,CAAAA,CAAQN,CAAa,CAAA,CAE7D,OAAO,CAAA,EAAGM,CAAM,CAAA,EAAGC,CAAM,CAAA,CAC3B,CAOO,SAASC,CAAAA,CAAwBC,CAAAA,CAAsB,CAC5D,IAAMpC,CAAAA,CAAUb,CAAAA,CAAYiD,CAAI,CAAA,CAAE,MAAM,CAAA,CAAG,EAAE,CAAA,CAAE,QAAA,CAAS,EAAA,CAAI,GAAG,CAAA,CAE/D,GAAIpC,EAAQ,MAAA,GAAW,EAAA,CACrB,MAAM,IAAI,KAAA,CAAM,6BAA6B,CAAA,CAG/C,IAAMiC,CAAAA,CAASH,CAAAA,CAAe9B,CAAAA,CAAS4B,CAAc,CAAA,CAC/CM,CAAAA,CAASJ,CAAAA,CAAe9B,CAAAA,CAAUiC,EAAQJ,CAAc,CAAA,CAE9D,OAAO,CAAA,EAAGI,CAAM,CAAA,EAAGC,CAAM,CAAA,CAC3B,CAMO,SAASG,EAAAA,CAAYL,CAAAA,CAAsB,CAChD,IAAMhC,CAAAA,CAAUb,CAAAA,CAAY6C,CAAG,EAa/B,OAXIhC,CAAAA,CAAQ,MAAA,GAAW,EAAA,EAKnB,WAAA,CAAY,IAAA,CAAKA,CAAO,CAAA,EAKb8B,CAAAA,CAAe9B,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAG0B,CAAa,CAAA,GACjD,SAAS1B,CAAAA,CAAQ,CAAC,CAAA,CAAG,EAAE,CAAA,CAC7B,KAAA,CAIM8B,CAAAA,CAAe9B,CAAAA,CAAQ,MAAM,CAAA,CAAG,EAAE,CAAA,CAAG2B,CAAa,CAAA,GAC/C,QAAA,CAAS3B,CAAAA,CAAQ,EAAE,EAAG,EAAE,CAC5C,CAMO,SAASsC,EAAAA,CAAUN,CAAAA,CAAqB,CAC7C,IAAMhC,CAAAA,CAAUb,CAAAA,CAAY6C,CAAG,CAAA,CAAE,QAAA,CAAS,EAAA,CAAI,GAAG,CAAA,CACjD,OAAO,CAAA,EAAGhC,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,MAAM,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,CACjG,CAKO,SAASuC,EAAAA,CAASP,CAAAA,CAAqB,CAC5C,OAAO7C,CAAAA,CAAY6C,CAAG,CACxB,CAMO,SAASQ,EAAAA,CAAaJ,CAAAA,CAAuB,CAClD,IAAMpC,CAAAA,CAAUb,CAAAA,CAAYiD,CAAI,CAAA,CAahC,OAXIpC,CAAAA,CAAQ,MAAA,GAAW,EAAA,EAKnB,WAAA,CAAY,IAAA,CAAKA,CAAO,CAAA,EAKb8B,CAAAA,CAAe9B,EAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAG4B,CAAc,CAAA,GACnD,QAAA,CAAS5B,CAAAA,CAAQ,EAAE,CAAA,CAAG,EAAE,CAAA,CAC9B,KAAA,CAIM8B,CAAAA,CAAe9B,CAAAA,CAAQ,KAAA,CAAM,EAAG,EAAE,CAAA,CAAG6B,CAAc,CAAA,GAChD,QAAA,CAAS7B,CAAAA,CAAQ,EAAE,CAAA,CAAG,EAAE,CAC5C,CAMO,SAASyC,EAAAA,CAAWL,CAAAA,CAAsB,CAC/C,IAAMpC,CAAAA,CAAUb,EAAYiD,CAAI,CAAA,CAAE,QAAA,CAAS,EAAA,CAAI,GAAG,CAAA,CAClD,OAAO,CAAA,EAAGpC,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,EAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,IAAIA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,EAAE,CAAC,CAAA,CAC1H,CAKO,SAAS0C,EAAAA,CAAUN,CAAAA,CAAsB,CAC9C,OAAOjD,CAAAA,CAAYiD,CAAI,CACzB,CAKO,SAASO,EAAAA,EAAsB,CACpC,IAAIvC,EAAO,EAAA,CACX,IAAA,IAASV,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAAA,CACrBU,CAAAA,EAAQ,KAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAI,EAAE,CAAA,CAEvC,IAAMwC,CAAAA,CAAcb,EAAuB3B,CAAI,CAAA,CAC/C,OAAOA,CAAAA,CAAOwC,CAChB,CAMO,SAASC,EAAAA,CAAaC,CAAAA,CAAuB,MAAA,CAAgB,CAClE,IAAIC,CAAAA,CAAO,EAAA,CACX,IAAA,IAASrD,CAAAA,CAAI,EAAGA,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAAA,CACrBqD,CAAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAW,EAAE,CAAA,CAEvC,IAAM3C,CAAAA,CAAO2C,CAAAA,CAAOD,CAAAA,CAAa,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAC1CF,CAAAA,CAAcT,CAAAA,CAAwB/B,CAAI,CAAA,CAChD,OAAOA,CAAAA,CAAOwC,CAChB,CAKO,SAASI,EAAAA,CAAaZ,CAAAA,CAAuB,CAClD,IAAMpC,CAAAA,CAAUb,CAAAA,CAAYiD,CAAI,CAAA,CAChC,OAAIpC,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAW,KAAA,CAC3BA,CAAAA,CAAQ,KAAA,CAAM,EAAG,EAAE,CAAA,GAAM,MAClC,CAKO,SAASiD,EAAAA,CAAab,CAAAA,CAAuB,CAClD,IAAMpC,CAAAA,CAAUb,CAAAA,CAAYiD,CAAI,CAAA,CAChC,OAAIpC,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAW,KAAA,CAC3BA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,GAAM,MAClC,CAMO,SAASkD,EAAAA,CAAoBd,CAAAA,CAA6B,CAC/D,IAAMpC,CAAAA,CAAUb,CAAAA,CAAYiD,CAAI,CAAA,CAChC,OAAIpC,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAW,IAAA,CAC3BA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAC5B,CC3MA,IAAMmD,CAAAA,CAAc,CAAC,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAO9B,SAASC,CAAAA,CAAuBC,CAAAA,CAAqB,CAE1D,IAAMpD,EADUd,CAAAA,CAAYkE,CAAG,CAAA,CACN,KAAA,CAAM,EAAE,CAAA,CAAE,OAAA,EAAQ,CAEvC5D,EAAM,CAAA,CACV,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIQ,CAAAA,CAAS,MAAA,CAAQ,CAAA,EAAA,CACnCR,GAAO,QAAA,CAASQ,CAAAA,CAAS,CAAC,CAAA,CAAG,EAAE,CAAA,CAAIkD,CAAAA,CAAY,CAAA,CAAIA,CAAAA,CAAY,MAAM,CAAA,CAGvE,IAAMjD,CAAAA,CAAY,EAAA,CAAMT,CAAAA,CAAM,EAAA,CAE9B,OAAIS,CAAAA,GAAc,EAAA,CAAW,GAAA,CACzBA,CAAAA,GAAc,EAAA,CAAW,GAAA,CACtB,MAAA,CAAOA,CAAS,CACzB,CAMO,SAASoD,CAAAA,CAAYD,CAAAA,CAAsB,CAChD,IAAMrD,CAAAA,CAAUf,CAAAA,CAAcoE,CAAG,CAAA,CAAE,WAAA,EAAY,CAE/C,GAAIrD,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAAKA,CAAAA,CAAQ,OAAS,CAAA,CACzC,OAAO,MAAA,CAGT,IAAMI,CAAAA,CAAOJ,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAC1BK,CAAAA,CAAaL,CAAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,CAGnC,OAAK,OAAA,CAAQ,KAAKI,CAAI,CAAA,CAIfgD,CAAAA,CAAuBhD,CAAI,CAAA,GAAMC,CAAAA,CAH/B,KAIX,CAMO,SAASkD,CAAAA,CAAUF,CAAAA,CAAqB,CAC7C,IAAMrD,CAAAA,CAAUf,CAAAA,CAAcoE,CAAG,CAAA,CAAE,WAAA,EAAY,CAE/C,GAAIrD,CAAAA,CAAQ,MAAA,CAAS,CAAA,CACnB,OAAOqD,CAAAA,CAGT,IAAMjD,CAAAA,CAAOJ,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAC1BK,CAAAA,CAAaL,CAAAA,CAAQ,MAAM,EAAE,CAAA,CAKnC,OAAO,CAAA,EAFWI,CAAAA,CAAK,OAAA,CAAQ,uBAAA,CAAyB,GAAG,CAExC,CAAA,CAAA,EAAIC,CAAU,CAAA,CACnC,CAKO,SAASmD,CAAAA,CAASH,CAAAA,CAAqB,CAC5C,OAAOpE,CAAAA,CAAcoE,CAAG,CAAA,CAAE,WAAA,EAC5B,CAKO,IAAMI,GAAcH,CAAAA,CACdI,EAAAA,CAAYH,CAAAA,CACZI,EAAAA,CAAWH,CAAAA,CACXI,EAAAA,CAAyBR,EAK/B,SAASS,IAAsB,CAEpC,IAAMxE,CAAAA,CAAS,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAM,CAAA,CAAI,EACrCe,CAAAA,CAAO,EAAA,CAGXA,CAAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAI,CAAC,CAAA,CAAI,CAAA,CAExC,IAAA,IAASV,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIL,CAAAA,CAAQK,IAC1BU,CAAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAI,EAAE,CAAA,CAGvC,IAAMC,CAAAA,CAAa+C,CAAAA,CAAuBhD,CAAI,CAAA,CAC9C,OAAOA,CAAAA,CAAOC,CAChB,CAMO,SAASyD,EAAAA,CAAuBT,CAAAA,CAA4B,CACjE,OAAKC,CAAAA,CAAYD,CAAG,CAAA,CACbE,CAAAA,CAAUF,CAAG,CAAA,CADU,IAEhC,CC1GA,IAAMU,EAAAA,CAAe,CAAC,CAAA,CAAG,EAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,EAO3C,SAASC,CAAAA,CAAwBC,CAAAA,CAAsB,CAC5D,IAAMjE,CAAAA,CAAUb,CAAAA,CAAY8E,CAAI,EAEhC,GAAIjE,CAAAA,CAAQ,MAAA,GAAW,EAAA,CACrB,MAAM,IAAI,KAAA,CAAM,6BAA6B,CAAA,CAG/C,IAAIP,CAAAA,CAAM,CAAA,CACV,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,GAAIA,CAAAA,EAAAA,CACtBD,CAAAA,EAAO,QAAA,CAASO,CAAAA,CAAQN,CAAC,CAAA,CAAG,EAAE,CAAA,CAAIqE,GAAarE,CAAC,CAAA,CAGlD,IAAMQ,CAAAA,CAAY,EAAA,CAAMT,CAAAA,CAAM,EAAA,CAE9B,OAAIS,IAAc,EAAA,CAAW,GAAA,CACzBA,CAAAA,GAAc,EAAA,CAAW,GAAA,CACtB,MAAA,CAAOA,CAAS,CACzB,CAMO,SAASgE,CAAAA,CAAaD,CAAAA,CAAuB,CAClD,IAAMjE,CAAAA,CAAUb,CAAAA,CAAY8E,CAAI,CAAA,CAEhC,GAAIjE,CAAAA,CAAQ,MAAA,GAAW,EAAA,CACrB,OAAO,MAAA,CAIT,IAAMmE,EAAOnE,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAE/B,GAAI,CADe,CAAC,KAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAI,CAAA,CAC5C,QAAA,CAASmE,CAAI,CAAA,CAC3B,OAAO,MAAA,CAGT,IAAM/D,CAAAA,CAAOJ,CAAAA,CAAQ,KAAA,CAAM,EAAG,EAAE,CAAA,CAC1BK,CAAAA,CAAaL,CAAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,CAEnC,GAAI,CACF,OAAOgE,CAAAA,CAAwB5D,CAAI,CAAA,GAAMC,CAC3C,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAMO,SAAS+D,CAAAA,CAAWH,CAAAA,CAAsB,CAC/C,IAAMjE,CAAAA,CAAUb,CAAAA,CAAY8E,CAAI,CAAA,CAAE,QAAA,CAAS,EAAA,CAAI,GAAG,CAAA,CAClD,OAAO,GAAGjE,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,EAAG,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAQ,KAAA,CAAM,EAAE,CAAC,CAAA,CAC5E,CAKO,SAASqE,CAAAA,CAAUJ,CAAAA,CAAsB,CAC9C,OAAO9E,CAAAA,CAAY8E,CAAI,CACzB,CAKO,IAAMK,EAAAA,CAAeJ,CAAAA,CACfK,EAAAA,CAAaH,CAAAA,CACbI,EAAAA,CAAYH,CAAAA,CACZI,GAA0BT,EAMhC,SAASU,EAAAA,CAAYC,CAAAA,CAAsB,CAChD,IAAM3E,CAAAA,CAAUb,CAAAA,CAAYwF,CAAG,CAAA,CAC/B,OAAO3E,CAAAA,CAAQ,MAAA,EAAU,CAAA,EAAKA,CAAAA,CAAQ,MAAA,EAAU,CAClD,CAKO,SAAS4E,EAAAA,CAAUD,CAAAA,CAAqB,CAE7C,OADgBxF,CAAAA,CAAYwF,CAAG,CAAA,CAChB,OAAA,CAAQ,uBAAA,CAAyB,GAAG,CACrD,CAKO,SAASE,EAAAA,CAASF,CAAAA,CAAqB,CAC5C,OAAOxF,CAAAA,CAAYwF,CAAG,CACxB,CAKA,IAAMG,CAAAA,CAAoB,CAAC,KAAM,IAAA,CAAM,IAAI,CAAA,CACrCC,EAAAA,CAAmB,CAAC,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAI,CAAA,CAKzC,SAASC,EAAAA,CAAcf,CAAAA,CAAuB,CACnD,IAAMjE,CAAAA,CAAUb,CAAAA,CAAY8E,CAAI,CAAA,CAChC,GAAIjE,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAI,OAAO,MAAA,CAClC,IAAMmE,CAAAA,CAAOnE,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAC/B,OAAO8E,CAAAA,CAAkB,SAASX,CAAI,CACxC,CAKO,SAASc,EAAAA,CAAahB,CAAAA,CAAuB,CAClD,IAAMjE,EAAUb,CAAAA,CAAY8E,CAAI,CAAA,CAChC,GAAIjE,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAI,OAAO,MAAA,CAClC,IAAMmE,CAAAA,CAAOnE,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAC/B,OAAO+E,EAAAA,CAAiB,QAAA,CAASZ,CAAI,CACvC,CAMO,SAASe,EAAAA,CAAYjB,CAAAA,CAAyD,CACnF,IAAMjE,CAAAA,CAAUb,CAAAA,CAAY8E,CAAI,CAAA,CAChC,GAAIjE,CAAAA,CAAQ,MAAA,GAAW,GAAI,OAAO,SAAA,CAElC,IAAMmE,CAAAA,CAAOnE,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAE/B,OAAI8E,CAAAA,CAAkB,QAAA,CAASX,CAAI,CAAA,CAAU,SAAA,CACzCA,CAAAA,GAAS,KAAa,MAAA,CACtBA,CAAAA,GAAS,IAAA,CAAa,QAAA,CAEiB,SAG7C,CAKO,SAASgB,EAAAA,CAAelB,EAA6B,CAC1D,IAAMjE,CAAAA,CAAUb,CAAAA,CAAY8E,CAAI,CAAA,CAChC,OAAIjE,CAAAA,CAAQ,SAAW,EAAA,CAAW,IAAA,CAC3BA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAC5B,CAOO,SAASoF,CAAAA,CACdT,CAAAA,CACAR,CAAAA,CAAuD,IAAA,CAC/C,CACR,IAAMkB,CAAAA,CAAalG,EAAYwF,CAAG,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAA,CAC7CvE,CAAAA,CAAO+D,CAAAA,CAAOkB,EACdhF,CAAAA,CAAa2D,CAAAA,CAAwB5D,CAAI,CAAA,CAC/C,OAAOA,CAAAA,CAAOC,CAChB,CAMO,SAASiF,EAAAA,CAAa9D,CAAAA,CAAqB,KAAA,CAAe,CAC/D,IAAM+D,CAAAA,CAAQ/D,CAAAA,CAAYsD,CAAAA,CAAoB,CAAC,IAAA,CAAM,IAAI,CAAA,CACnDX,CAAAA,CAAOoB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,CAAIA,CAAAA,CAAM,MAAM,CAAC,CAAA,CAEvDZ,CAAAA,CAAM,EAAA,CACV,QAASjF,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAAA,CACrBiF,CAAAA,EAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,CAAI,EAAE,CAAA,CAGtC,OAAOS,CAAAA,CAAoBT,CAAAA,CAAKR,CAAwC,CAC1E,CCvLA,IAAMqB,EAAAA,CAAqB,8BAAA,CACrBC,EAAAA,CAAoB,8BAAA,CAMpBC,EAAAA,CAAe,uCAAA,CAMd,SAASC,CAAAA,CAAYC,CAAAA,CAAsB,CAChD,IAAM5F,CAAAA,CAAUf,CAAAA,CAAc2G,CAAG,CAAA,CAAE,aAAY,CAE/C,OAAI5F,CAAAA,CAAQ,MAAA,GAAW,EAAA,EAAMA,CAAAA,CAAQ,MAAA,GAAW,EAAA,CACvC,MAILA,CAAAA,CAAQ,MAAA,GAAW,EAAA,CACdwF,EAAAA,CAAmB,IAAA,CAAKxF,CAAO,CAAA,CAGjCyF,EAAAA,CAAkB,IAAA,CAAKzF,CAAO,CACvC,CAKO,SAAS6F,EAAAA,CAAUD,CAAAA,CAAqB,CAC7C,OAAO3G,CAAAA,CAAc2G,CAAG,CAAA,CAAE,WAAA,EAC5B,CAKO,SAASE,EAAAA,CAASF,EAAqB,CAC5C,OAAO3G,CAAAA,CAAc2G,CAAG,CAAA,CAAE,WAAA,EAC5B,CAMO,SAASG,CAAAA,CAAaC,CAAAA,CAAuB,CAClD,IAAMhG,CAAAA,CAAUf,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,EAAY,CAMhD,OAJIhG,CAAAA,CAAQ,MAAA,GAAW,EAAA,EAInB,CAAC0F,EAAAA,CAAa,KAAK1F,CAAO,CAAA,CACrB,KAAA,CAIFiG,EAAAA,CAAuBjG,CAAO,CACvC,CAKA,SAASiG,GAAuBD,CAAAA,CAAuB,CACrD,IAAME,CAAAA,CAAa,0CAAA,CACfzG,CAAAA,CAAM,CAAA,CAEV,IAAA,IAASC,EAAI,CAAA,CAAGA,CAAAA,CAAI,EAAA,CAAIA,CAAAA,EAAAA,CAAK,CAC3B,IAAMyG,CAAAA,CAAOH,CAAAA,CAAKtG,CAAC,CAAA,CACbR,CAAAA,CAAQgH,CAAAA,CAAW,OAAA,CAAQC,CAAI,CAAA,CACrC,GAAIjH,IAAU,EAAA,CAAI,OAAO,MAAA,CACzBO,CAAAA,EAAOP,CAAAA,EAAS,EAAA,CAAKQ,CAAAA,EACvB,CAGA,QADoB,EAAA,CAAMD,CAAAA,CAAM,EAAA,EAAO,EAAA,GACjB,QAAA,CAASuG,CAAAA,CAAK,EAAE,CAAA,CAAG,EAAE,CAC7C,CAKO,SAASI,EAAAA,CAAWJ,CAAAA,CAAsB,CAC/C,OAAO/G,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,EAC7B,CAKO,SAASK,EAAAA,CAAUL,CAAAA,CAAsB,CAC9C,OAAO/G,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,EAC7B,CAMO,SAASM,EAAcN,CAAAA,CAAgC,CAC5D,IAAMhG,CAAAA,CAAUf,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,GACpC,GAAIhG,CAAAA,CAAQ,MAAA,CAAS,EAAA,CAAI,OAAO,IAAA,CAEhC,IAAMuG,CAAAA,CAAavG,CAAAA,CAAQ,EAAE,CAAA,CAC7B,OAAIuG,CAAAA,GAAe,GAAA,CAAY,GAAA,CAC3BA,CAAAA,GAAe,IAAY,GAAA,CACxB,IACT,CAMO,SAASC,CAAAA,CAAiBR,CAAAA,CAA2B,CAC1D,IAAMhG,EAAUf,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,EAAY,CAChD,GAAIhG,CAAAA,CAAQ,MAAA,CAAS,GAAI,OAAO,IAAA,CAEhC,IAAMyG,CAAAA,CAAWzG,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAC7B0G,CAAAA,CAAQ1G,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAC1B2G,CAAAA,CAAM3G,EAAQ,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAIzB4G,CAAAA,CAAc5G,CAAAA,CAAQ,EAAE,CAAA,CAC1B6G,EAEA,IAAA,CAAK,IAAA,CAAKD,CAAW,CAAA,CACvBC,CAAAA,CAAO,IAAA,CAAO,QAAA,CAASJ,CAAAA,CAAU,EAAE,CAAA,CAEnCI,CAAAA,CAAO,GAAA,CAAO,QAAA,CAASJ,CAAAA,CAAU,EAAE,CAAA,CAGrC,IAAMK,CAAAA,CAAO,IAAI,IAAA,CAAKD,CAAAA,CAAM,QAAA,CAASH,CAAAA,CAAO,EAAE,CAAA,CAAI,EAAG,QAAA,CAASC,CAAAA,CAAK,EAAE,CAAC,CAAA,CAGtE,OACEG,CAAAA,CAAK,WAAA,KAAkBD,CAAAA,EACvBC,CAAAA,CAAK,QAAA,EAAS,GAAM,QAAA,CAASJ,CAAAA,CAAO,EAAE,CAAA,CAAI,GAC1CI,CAAAA,CAAK,OAAA,EAAQ,GAAM,QAAA,CAASH,CAAAA,CAAK,EAAE,CAAA,CAE5B,IAAA,CAGFG,CACT,CAKA,IAAMC,CAAAA,CAA2C,CAC/C,EAAA,CAAI,gBAAA,CACJ,EAAA,CAAI,iBAAA,CACJ,GAAI,qBAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,UACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,YAAA,CACJ,GAAI,UAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,EAAA,CAAI,cAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,eAAA,CACJ,EAAA,CAAI,SACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,cAAA,CACJ,EAAA,CAAI,cAAA,CACJ,EAAA,CAAI,oBAAA,CACJ,GAAI,SAAA,CACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,YAAA,CACJ,EAAA,CAAI,WACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,YAAA,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,yBACN,CAAA,CAMO,SAASC,CAAAA,CAAkBhB,CAAAA,CAA6B,CAC7D,IAAMhG,CAAAA,CAAUf,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,EAAY,CAChD,GAAIhG,CAAAA,CAAQ,MAAA,CAAS,EAAA,CAAI,OAAO,KAEhC,IAAMiH,CAAAA,CAAYjH,CAAAA,CAAQ,KAAA,CAAM,EAAA,CAAI,EAAE,CAAA,CACtC,OAAO+G,EAAiBE,CAAS,CAAA,EAAK,IACxC,CAMO,SAASC,CAAAA,CAAiBlB,CAAAA,CAA6B,CAC5D,IAAMhG,CAAAA,CAAUf,CAAAA,CAAc+G,CAAI,CAAA,CAAE,WAAA,EAAY,CAChD,GAAIhG,EAAQ,MAAA,CAAS,EAAA,CAAI,OAAO,IAAA,CAEhC,IAAMiH,CAAAA,CAAYjH,CAAAA,CAAQ,KAAA,CAAM,GAAI,EAAE,CAAA,CACtC,OAAO+G,CAAAA,CAAiBE,CAAS,CAAA,CAAIA,CAAAA,CAAY,IACnD,CAKO,SAASE,CAAAA,CAAavB,CAAAA,CAAsB,CAEjD,OADgB3G,CAAAA,CAAc2G,CAAG,CAAA,CAAE,WAAA,EAAY,CAChC,MAAA,GAAW,EAC5B,CAKO,SAASwB,EAAAA,CAAYxB,CAAAA,CAAsB,CAEhD,OADgB3G,CAAAA,CAAc2G,CAAG,CAAA,CAAE,WAAA,EAAY,CAChC,MAAA,GAAW,EAC5B,CAMO,SAASyB,CAAAA,CAAWzB,CAAAA,CAA0B,CACnD,IAAM5F,CAAAA,CAAUf,CAAAA,CAAc2G,CAAG,EAAE,WAAA,EAAY,CAE/C,GAAI5F,CAAAA,CAAQ,MAAA,GAAW,EAAA,EAAMA,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAI,OAAO,IAAA,CAG3D,IAAMsH,CAAAA,CAAYtH,CAAAA,CAAQ,MAAA,GAAW,EAAA,CAAK,EAAI,CAAA,CACxCuH,CAAAA,CAAUvH,CAAAA,CAAQ,KAAA,CAAMsH,CAAAA,CAAWA,CAAAA,CAAY,CAAC,CAAA,CAEhDT,EAAO,QAAA,CAASU,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAG,EAAE,CAAA,CACvCb,EAAQ,QAAA,CAASa,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAG,EAAE,CAAA,CACxCZ,CAAAA,CAAM,QAAA,CAASY,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAG,EAAE,EAGtCC,CAAAA,CAAWX,CAAAA,CAAO,EAAA,CAAK,IAAA,CAAOA,CAAAA,CAAO,GAAA,CAAOA,CAAAA,CAE5CC,CAAAA,CAAO,IAAI,IAAA,CAAKU,CAAAA,CAAUd,CAAAA,CAAQ,CAAA,CAAGC,CAAG,CAAA,CAG9C,OAAIG,CAAAA,CAAK,aAAY,GAAMU,CAAAA,EAAYV,CAAAA,CAAK,QAAA,EAAS,GAAMJ,CAAAA,CAAQ,CAAA,EAAKI,CAAAA,CAAK,OAAA,EAAQ,GAAMH,CAAAA,CAClF,IAAA,CAGFG,CACT,CAKO,SAASW,EAAAA,CAAUzB,EAMxB,CACA,OAAO,CACL,KAAA,CAAOD,CAAAA,CAAaC,CAAI,CAAA,CACxB,MAAA,CAAQM,EAAcN,CAAI,CAAA,CAC1B,SAAA,CAAWQ,CAAAA,CAAiBR,CAAI,CAAA,CAChC,UAAA,CAAYgB,CAAAA,CAAkBhB,CAAI,CAAA,CAClC,SAAA,CAAWkB,CAAAA,CAAiBlB,CAAI,CAClC,CACF,CAKO,SAAS0B,GAAS9B,CAAAA,CAIvB,CAEA,OADcD,CAAAA,CAAYC,CAAG,CAAA,CAKtB,CACL,KAAA,CAAO,KACP,IAAA,CAAMuB,CAAAA,CAAavB,CAAG,CAAA,CAAI,SAAA,CAAY,QAAA,CACtC,IAAA,CAAMyB,CAAAA,CAAWzB,CAAG,CACtB,CAAA,CAPS,CAAE,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAK,CAQlD","file":"index.cjs","sourcesContent":["/**\n * Remove all non-alphanumeric characters\n */\nexport function cleanDocument(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n}\n\n/**\n * Remove all non-digit characters\n */\nexport function cleanDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Pad a string with leading zeros\n */\nexport function padStart(value: string, length: number): string {\n return value.padStart(length, '0');\n}\n\n/**\n * Calculate modulo 11 check digit (common algorithm)\n */\nexport function mod11(digits: string, weights: number[]): number {\n let sum = 0;\n for (let i = 0; i < digits.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i % weights.length];\n }\n const remainder = sum % 11;\n return remainder;\n}\n\n/**\n * Calculate modulo 10 check digit (Luhn-like algorithms)\n */\nexport function mod10(digits: string, weights: number[]): number {\n let sum = 0;\n for (let i = 0; i < digits.length; i++) {\n let product = parseInt(digits[i], 10) * weights[i % weights.length];\n if (product > 9) {\n product = Math.floor(product / 10) + (product % 10);\n }\n sum += product;\n }\n return sum % 10;\n}\n","import { cleanDigits } from '../core/utils.js';\n\n/**\n * NIT verification weights (Colombian tax ID)\n * Algorithm: Multiply each digit by its weight, sum, mod 11\n */\nconst NIT_WEIGHTS = [3, 7, 13, 17, 19, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71];\n\n/**\n * Calculate the NIT check digit\n * @param nit - The NIT without check digit (8-15 digits)\n * @returns The check digit (0-9)\n */\nexport function calculateNITCheckDigit(nit: string): string {\n const cleaned = cleanDigits(nit);\n\n if (cleaned.length < 8 || cleaned.length > 15) {\n throw new Error('NIT must be between 8 and 15 digits');\n }\n\n let sum = 0;\n const reversed = cleaned.split('').reverse();\n\n for (let i = 0; i < reversed.length; i++) {\n sum += parseInt(reversed[i], 10) * NIT_WEIGHTS[i];\n }\n\n const remainder = sum % 11;\n\n if (remainder === 0) return '0';\n if (remainder === 1) return '1';\n return String(11 - remainder);\n}\n\n/**\n * Validate a Colombian NIT\n * @param nit - The NIT to validate (with or without check digit)\n * @returns true if valid\n */\nexport function validateNIT(nit: string): boolean {\n const cleaned = cleanDigits(nit);\n\n if (cleaned.length < 9 || cleaned.length > 16) {\n return false;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n try {\n return calculateNITCheckDigit(body) === checkDigit;\n } catch {\n return false;\n }\n}\n\n/**\n * Format a NIT for display\n * @param nit - The NIT to format\n * @returns Formatted NIT (e.g., \"900.123.456-7\")\n */\nexport function formatNIT(nit: string): string {\n const cleaned = cleanDigits(nit);\n\n if (cleaned.length < 9) {\n return nit;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n // Format with dots every 3 digits from right\n const formatted = body.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${formatted}-${checkDigit}`;\n}\n\n/**\n * Clean a NIT (remove all formatting)\n */\nexport function cleanNIT(nit: string): string {\n return cleanDigits(nit);\n}\n\n/**\n * Validate a Colombian Cédula de Ciudadanía (CC)\n * @param cc - The CC number (6-10 digits)\n * @returns true if valid format\n */\nexport function validateCC(cc: string): boolean {\n const cleaned = cleanDigits(cc);\n return cleaned.length >= 6 && cleaned.length <= 10;\n}\n\n/**\n * Format a Cédula for display\n */\nexport function formatCC(cc: string): string {\n const cleaned = cleanDigits(cc);\n return cleaned.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n}\n\n/**\n * Clean a Cédula\n */\nexport function cleanCC(cc: string): string {\n return cleanDigits(cc);\n}\n\n/**\n * Validate a Cédula de Extranjería (CE)\n * @param ce - The CE number (6-10 alphanumeric characters)\n */\nexport function validateCE(ce: string): boolean {\n const cleaned = ce.replace(/[^a-zA-Z0-9]/g, '');\n return cleaned.length >= 6 && cleaned.length <= 10;\n}\n\n/**\n * Format a Cédula de Extranjería for display\n */\nexport function formatCE(ce: string): string {\n const cleaned = ce.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n return cleaned;\n}\n\n/**\n * Clean a Cédula de Extranjería\n */\nexport function cleanCE(ce: string): string {\n return ce.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n}\n\n/**\n * Validate a Tarjeta de Identidad (TI)\n * @param ti - The TI number (10-11 digits)\n */\nexport function validateTI(ti: string): boolean {\n const cleaned = cleanDigits(ti);\n return cleaned.length >= 10 && cleaned.length <= 11;\n}\n\n/**\n * Format a Tarjeta de Identidad for display\n */\nexport function formatTI(ti: string): string {\n const cleaned = cleanDigits(ti);\n return cleaned.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n}\n\n/**\n * Clean a Tarjeta de Identidad\n */\nexport function cleanTI(ti: string): string {\n return cleanDigits(ti);\n}\n\n/**\n * Check if a NIT belongs to a company (persona jurídica)\n * Company NITs typically start with 8 or 9\n */\nexport function isNITCompany(nit: string): boolean {\n const cleaned = cleanDigits(nit);\n if (cleaned.length < 9) return false;\n const firstDigit = cleaned[0];\n return firstDigit === '8' || firstDigit === '9';\n}\n\n/**\n * Check if a NIT belongs to an individual (persona natural)\n */\nexport function isNITPerson(nit: string): boolean {\n const cleaned = cleanDigits(nit);\n if (cleaned.length < 9) return false;\n return !isNITCompany(nit);\n}\n\n/**\n * Generate a random valid NIT\n * @param isCompany - Whether to generate a company NIT\n */\nexport function generateNIT(isCompany: boolean = true): string {\n const prefix = isCompany\n ? Math.random() < 0.5\n ? '8'\n : '9'\n : String(Math.floor(Math.random() * 8));\n const length = Math.floor(Math.random() * 7) + 8; // 8-14 digits body\n let body = prefix;\n\n for (let i = 1; i < length; i++) {\n body += Math.floor(Math.random() * 10);\n }\n\n const checkDigit = calculateNITCheckDigit(body);\n return body + checkDigit;\n}\n","import { cleanDigits } from '../core/utils.js';\n\n/**\n * CPF weights for first check digit\n */\nconst CPF_WEIGHTS_1 = [10, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * CPF weights for second check digit\n */\nconst CPF_WEIGHTS_2 = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * CNPJ weights for first check digit\n */\nconst CNPJ_WEIGHTS_1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * CNPJ weights for second check digit\n */\nconst CNPJ_WEIGHTS_2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n\n/**\n * Calculate CPF/CNPJ check digit using mod 11\n */\nfunction calcCheckDigit(digits: string, weights: number[]): number {\n let sum = 0;\n for (let i = 0; i < weights.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i];\n }\n const remainder = sum % 11;\n return remainder < 2 ? 0 : 11 - remainder;\n}\n\n/**\n * Calculate CPF check digits\n * @param cpf - The CPF body (9 digits without check digits)\n * @returns The two check digits as a string\n */\nexport function calculateCPFCheckDigit(cpf: string): string {\n const cleaned = cleanDigits(cpf).slice(0, 9).padStart(9, '0');\n\n if (cleaned.length !== 9) {\n throw new Error('CPF body must be 9 digits');\n }\n\n const digit1 = calcCheckDigit(cleaned, CPF_WEIGHTS_1);\n const digit2 = calcCheckDigit(cleaned + digit1, CPF_WEIGHTS_2);\n\n return `${digit1}${digit2}`;\n}\n\n/**\n * Calculate CNPJ check digits\n * @param cnpj - The CNPJ body (12 digits without check digits)\n * @returns The two check digits as a string\n */\nexport function calculateCNPJCheckDigit(cnpj: string): string {\n const cleaned = cleanDigits(cnpj).slice(0, 12).padStart(12, '0');\n\n if (cleaned.length !== 12) {\n throw new Error('CNPJ body must be 12 digits');\n }\n\n const digit1 = calcCheckDigit(cleaned, CNPJ_WEIGHTS_1);\n const digit2 = calcCheckDigit(cleaned + digit1, CNPJ_WEIGHTS_2);\n\n return `${digit1}${digit2}`;\n}\n\n/**\n * Validate a Brazilian CPF (Individual Tax ID)\n * @param cpf - The CPF to validate (11 digits)\n */\nexport function validateCPF(cpf: string): boolean {\n const cleaned = cleanDigits(cpf);\n\n if (cleaned.length !== 11) {\n return false;\n }\n\n // Check for known invalid CPFs (all same digits)\n if (/^(\\d)\\1+$/.test(cleaned)) {\n return false;\n }\n\n // Calculate first check digit\n const digit1 = calcCheckDigit(cleaned.slice(0, 9), CPF_WEIGHTS_1);\n if (digit1 !== parseInt(cleaned[9], 10)) {\n return false;\n }\n\n // Calculate second check digit\n const digit2 = calcCheckDigit(cleaned.slice(0, 10), CPF_WEIGHTS_2);\n return digit2 === parseInt(cleaned[10], 10);\n}\n\n/**\n * Format a CPF for display\n * @returns Formatted CPF (e.g., \"123.456.789-09\")\n */\nexport function formatCPF(cpf: string): string {\n const cleaned = cleanDigits(cpf).padStart(11, '0');\n return `${cleaned.slice(0, 3)}.${cleaned.slice(3, 6)}.${cleaned.slice(6, 9)}-${cleaned.slice(9)}`;\n}\n\n/**\n * Clean a CPF\n */\nexport function cleanCPF(cpf: string): string {\n return cleanDigits(cpf);\n}\n\n/**\n * Validate a Brazilian CNPJ (Business Tax ID)\n * @param cnpj - The CNPJ to validate (14 digits)\n */\nexport function validateCNPJ(cnpj: string): boolean {\n const cleaned = cleanDigits(cnpj);\n\n if (cleaned.length !== 14) {\n return false;\n }\n\n // Check for known invalid CNPJs (all same digits)\n if (/^(\\d)\\1+$/.test(cleaned)) {\n return false;\n }\n\n // Calculate first check digit\n const digit1 = calcCheckDigit(cleaned.slice(0, 12), CNPJ_WEIGHTS_1);\n if (digit1 !== parseInt(cleaned[12], 10)) {\n return false;\n }\n\n // Calculate second check digit\n const digit2 = calcCheckDigit(cleaned.slice(0, 13), CNPJ_WEIGHTS_2);\n return digit2 === parseInt(cleaned[13], 10);\n}\n\n/**\n * Format a CNPJ for display\n * @returns Formatted CNPJ (e.g., \"12.345.678/0001-95\")\n */\nexport function formatCNPJ(cnpj: string): string {\n const cleaned = cleanDigits(cnpj).padStart(14, '0');\n return `${cleaned.slice(0, 2)}.${cleaned.slice(2, 5)}.${cleaned.slice(5, 8)}/${cleaned.slice(8, 12)}-${cleaned.slice(12)}`;\n}\n\n/**\n * Clean a CNPJ\n */\nexport function cleanCNPJ(cnpj: string): string {\n return cleanDigits(cnpj);\n}\n\n/**\n * Generate a random valid CPF\n */\nexport function generateCPF(): string {\n let body = '';\n for (let i = 0; i < 9; i++) {\n body += Math.floor(Math.random() * 10);\n }\n const checkDigits = calculateCPFCheckDigit(body);\n return body + checkDigits;\n}\n\n/**\n * Generate a random valid CNPJ\n * @param branchNumber - The branch number (0001 for matriz, others for filiais)\n */\nexport function generateCNPJ(branchNumber: string = '0001'): string {\n let base = '';\n for (let i = 0; i < 8; i++) {\n base += Math.floor(Math.random() * 10);\n }\n const body = base + branchNumber.padStart(4, '0');\n const checkDigits = calculateCNPJCheckDigit(body);\n return body + checkDigits;\n}\n\n/**\n * Check if CNPJ is a matriz (main branch)\n */\nexport function isCNPJMatriz(cnpj: string): boolean {\n const cleaned = cleanDigits(cnpj);\n if (cleaned.length !== 14) return false;\n return cleaned.slice(8, 12) === '0001';\n}\n\n/**\n * Check if CNPJ is a filial (branch)\n */\nexport function isCNPJFilial(cnpj: string): boolean {\n const cleaned = cleanDigits(cnpj);\n if (cleaned.length !== 14) return false;\n return cleaned.slice(8, 12) !== '0001';\n}\n\n/**\n * Get the branch number from a CNPJ\n * @returns The branch number (e.g., \"0001\" for matriz)\n */\nexport function getCNPJBranchNumber(cnpj: string): string | null {\n const cleaned = cleanDigits(cnpj);\n if (cleaned.length !== 14) return null;\n return cleaned.slice(8, 12);\n}\n","import { cleanDocument, cleanDigits } from '../core/utils.js';\n\n/**\n * RUT/RUN validation weights\n */\nconst RUT_WEIGHTS = [2, 3, 4, 5, 6, 7];\n\n/**\n * Calculate RUT check digit\n * @param rut - The RUT body (without check digit)\n * @returns The check digit (0-9 or 'K')\n */\nexport function calculateRUTCheckDigit(rut: string): string {\n const cleaned = cleanDigits(rut);\n const reversed = cleaned.split('').reverse();\n\n let sum = 0;\n for (let i = 0; i < reversed.length; i++) {\n sum += parseInt(reversed[i], 10) * RUT_WEIGHTS[i % RUT_WEIGHTS.length];\n }\n\n const remainder = 11 - (sum % 11);\n\n if (remainder === 11) return '0';\n if (remainder === 10) return 'K';\n return String(remainder);\n}\n\n/**\n * Validate a Chilean RUT (Rol Único Tributario)\n * @param rut - The RUT to validate (e.g., \"12.345.678-5\" or \"12345678-K\")\n */\nexport function validateRUT(rut: string): boolean {\n const cleaned = cleanDocument(rut).toUpperCase();\n\n if (cleaned.length < 8 || cleaned.length > 9) {\n return false;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n // Body must be all digits\n if (!/^\\d+$/.test(body)) {\n return false;\n }\n\n return calculateRUTCheckDigit(body) === checkDigit;\n}\n\n/**\n * Format a RUT for display\n * @returns Formatted RUT (e.g., \"12.345.678-5\")\n */\nexport function formatRUT(rut: string): string {\n const cleaned = cleanDocument(rut).toUpperCase();\n\n if (cleaned.length < 2) {\n return rut;\n }\n\n const body = cleaned.slice(0, -1);\n const checkDigit = cleaned.slice(-1);\n\n // Format with dots every 3 digits from right\n const formatted = body.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${formatted}-${checkDigit}`;\n}\n\n/**\n * Clean a RUT\n */\nexport function cleanRUT(rut: string): string {\n return cleanDocument(rut).toUpperCase();\n}\n\n/**\n * Validate a Chilean RUN (same algorithm as RUT)\n */\nexport const validateRUN = validateRUT;\nexport const formatRUN = formatRUT;\nexport const cleanRUN = cleanRUT;\nexport const calculateRUNCheckDigit = calculateRUTCheckDigit;\n\n/**\n * Generate a random valid RUT\n */\nexport function generateRUT(): string {\n // Generate a random 7-8 digit number (typical RUT range)\n const length = Math.random() < 0.5 ? 7 : 8;\n let body = '';\n\n // First digit shouldn't be 0 for realistic RUTs\n body += Math.floor(Math.random() * 9) + 1;\n\n for (let i = 1; i < length; i++) {\n body += Math.floor(Math.random() * 10);\n }\n\n const checkDigit = calculateRUTCheckDigit(body);\n return body + checkDigit;\n}\n\n/**\n * Check if RUT is valid and return formatted version\n * @returns Formatted RUT if valid, null otherwise\n */\nexport function getFormattedRUTIfValid(rut: string): string | null {\n if (!validateRUT(rut)) return null;\n return formatRUT(rut);\n}\n","import { cleanDigits } from '../core/utils.js';\n\n/**\n * CUIT/CUIL weights\n */\nconst CUIT_WEIGHTS = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];\n\n/**\n * Calculate CUIT/CUIL check digit\n * @param cuit - The CUIT body (10 digits: type + DNI)\n * @returns The check digit (0-9)\n */\nexport function calculateCUITCheckDigit(cuit: string): string {\n const cleaned = cleanDigits(cuit);\n\n if (cleaned.length !== 10) {\n throw new Error('CUIT body must be 10 digits');\n }\n\n let sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += parseInt(cleaned[i], 10) * CUIT_WEIGHTS[i];\n }\n\n const remainder = 11 - (sum % 11);\n\n if (remainder === 11) return '0';\n if (remainder === 10) return '9'; // Special case for Argentina\n return String(remainder);\n}\n\n/**\n * Validate an Argentine CUIT (Clave Única de Identificación Tributaria)\n * @param cuit - The CUIT to validate (e.g., \"20-12345678-9\")\n */\nexport function validateCUIT(cuit: string): boolean {\n const cleaned = cleanDigits(cuit);\n\n if (cleaned.length !== 11) {\n return false;\n }\n\n // Valid type prefixes: 20, 23, 24, 27, 30, 33, 34\n const type = cleaned.slice(0, 2);\n const validTypes = ['20', '23', '24', '27', '30', '33', '34'];\n if (!validTypes.includes(type)) {\n return false;\n }\n\n const body = cleaned.slice(0, 10);\n const checkDigit = cleaned.slice(-1);\n\n try {\n return calculateCUITCheckDigit(body) === checkDigit;\n } catch {\n return false;\n }\n}\n\n/**\n * Format a CUIT for display\n * @returns Formatted CUIT (e.g., \"20-12345678-9\")\n */\nexport function formatCUIT(cuit: string): string {\n const cleaned = cleanDigits(cuit).padStart(11, '0');\n return `${cleaned.slice(0, 2)}-${cleaned.slice(2, 10)}-${cleaned.slice(10)}`;\n}\n\n/**\n * Clean a CUIT\n */\nexport function cleanCUIT(cuit: string): string {\n return cleanDigits(cuit);\n}\n\n/**\n * CUIL validation (same algorithm as CUIT)\n */\nexport const validateCUIL = validateCUIT;\nexport const formatCUIL = formatCUIT;\nexport const cleanCUIL = cleanCUIT;\nexport const calculateCUILCheckDigit = calculateCUITCheckDigit;\n\n/**\n * Validate an Argentine DNI\n * @param dni - The DNI number (7-8 digits)\n */\nexport function validateDNI(dni: string): boolean {\n const cleaned = cleanDigits(dni);\n return cleaned.length >= 7 && cleaned.length <= 8;\n}\n\n/**\n * Format a DNI for display\n */\nexport function formatDNI(dni: string): string {\n const cleaned = cleanDigits(dni);\n return cleaned.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n}\n\n/**\n * Clean a DNI\n */\nexport function cleanDNI(dni: string): string {\n return cleanDigits(dni);\n}\n\n/**\n * CUIT type prefixes\n */\nconst CUIT_TYPE_COMPANY = ['30', '33', '34'];\nconst CUIT_TYPE_PERSON = ['20', '23', '24', '27'];\n\n/**\n * Check if CUIT belongs to a company\n */\nexport function isCUITCompany(cuit: string): boolean {\n const cleaned = cleanDigits(cuit);\n if (cleaned.length !== 11) return false;\n const type = cleaned.slice(0, 2);\n return CUIT_TYPE_COMPANY.includes(type);\n}\n\n/**\n * Check if CUIT belongs to an individual\n */\nexport function isCUITPerson(cuit: string): boolean {\n const cleaned = cleanDigits(cuit);\n if (cleaned.length !== 11) return false;\n const type = cleaned.slice(0, 2);\n return CUIT_TYPE_PERSON.includes(type);\n}\n\n/**\n * Get the type of entity from CUIT\n * @returns 'company' | 'male' | 'female' | 'unknown'\n */\nexport function getCUITType(cuit: string): 'company' | 'male' | 'female' | 'unknown' {\n const cleaned = cleanDigits(cuit);\n if (cleaned.length !== 11) return 'unknown';\n\n const type = cleaned.slice(0, 2);\n\n if (CUIT_TYPE_COMPANY.includes(type)) return 'company';\n if (type === '20') return 'male';\n if (type === '27') return 'female';\n // 23 and 24 can be either male or female\n if (type === '23' || type === '24') return 'unknown';\n\n return 'unknown';\n}\n\n/**\n * Get DNI from CUIT/CUIL\n */\nexport function getDNIFromCUIT(cuit: string): string | null {\n const cleaned = cleanDigits(cuit);\n if (cleaned.length !== 11) return null;\n return cleaned.slice(2, 10);\n}\n\n/**\n * Generate a valid CUIT from DNI\n * @param dni - The DNI (7-8 digits)\n * @param type - Type prefix (default '20' for male individual)\n */\nexport function generateCUITFromDNI(\n dni: string,\n type: '20' | '23' | '24' | '27' | '30' | '33' | '34' = '20',\n): string {\n const cleanedDNI = cleanDigits(dni).padStart(8, '0');\n const body = type + cleanedDNI;\n const checkDigit = calculateCUITCheckDigit(body);\n return body + checkDigit;\n}\n\n/**\n * Generate a random valid CUIT\n * @param isCompany - Whether to generate a company CUIT\n */\nexport function generateCUIT(isCompany: boolean = false): string {\n const types = isCompany ? CUIT_TYPE_COMPANY : ['20', '27'];\n const type = types[Math.floor(Math.random() * types.length)];\n\n let dni = '';\n for (let i = 0; i < 8; i++) {\n dni += Math.floor(Math.random() * 10);\n }\n\n return generateCUITFromDNI(dni, type as '20' | '27' | '30' | '33' | '34');\n}\n","import { cleanDocument } from '../core/utils.js';\n\n/**\n * Valid RFC patterns\n * - Persona física: 4 letters + 6 digits + 3 alphanumeric (homoclave)\n * - Persona moral: 3 letters + 6 digits + 3 alphanumeric (homoclave)\n */\nconst RFC_PATTERN_FISICA = /^[A-ZÑ&]{4}\\d{6}[A-Z0-9]{3}$/;\nconst RFC_PATTERN_MORAL = /^[A-ZÑ&]{3}\\d{6}[A-Z0-9]{3}$/;\n\n/**\n * CURP pattern\n * 18 characters: 4 letters + 6 digits + 6 letters + 2 alphanumeric\n */\nconst CURP_PATTERN = /^[A-Z]{4}\\d{6}[HM][A-Z]{5}[A-Z0-9]\\d$/;\n\n/**\n * Validate a Mexican RFC (Registro Federal de Contribuyentes)\n * @param rfc - The RFC to validate\n */\nexport function validateRFC(rfc: string): boolean {\n const cleaned = cleanDocument(rfc).toUpperCase();\n\n if (cleaned.length !== 12 && cleaned.length !== 13) {\n return false;\n }\n\n // 12 chars = Persona moral, 13 chars = Persona física\n if (cleaned.length === 13) {\n return RFC_PATTERN_FISICA.test(cleaned);\n }\n\n return RFC_PATTERN_MORAL.test(cleaned);\n}\n\n/**\n * Format an RFC for display (uppercase, no separators)\n */\nexport function formatRFC(rfc: string): string {\n return cleanDocument(rfc).toUpperCase();\n}\n\n/**\n * Clean an RFC\n */\nexport function cleanRFC(rfc: string): string {\n return cleanDocument(rfc).toUpperCase();\n}\n\n/**\n * Validate a Mexican CURP (Clave Única de Registro de Población)\n * @param curp - The CURP to validate (18 characters)\n */\nexport function validateCURP(curp: string): boolean {\n const cleaned = cleanDocument(curp).toUpperCase();\n\n if (cleaned.length !== 18) {\n return false;\n }\n\n if (!CURP_PATTERN.test(cleaned)) {\n return false;\n }\n\n // Validate check digit\n return validateCURPCheckDigit(cleaned);\n}\n\n/**\n * CURP check digit validation\n */\nfunction validateCURPCheckDigit(curp: string): boolean {\n const dictionary = '0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';\n let sum = 0;\n\n for (let i = 0; i < 17; i++) {\n const char = curp[i];\n const value = dictionary.indexOf(char);\n if (value === -1) return false;\n sum += value * (18 - i);\n }\n\n const checkDigit = (10 - (sum % 10)) % 10;\n return checkDigit === parseInt(curp[17], 10);\n}\n\n/**\n * Format a CURP for display\n */\nexport function formatCURP(curp: string): string {\n return cleanDocument(curp).toUpperCase();\n}\n\n/**\n * Clean a CURP\n */\nexport function cleanCURP(curp: string): string {\n return cleanDocument(curp).toUpperCase();\n}\n\n/**\n * Get the gender from a CURP\n * @returns 'M' for male, 'F' for female, or null if invalid\n */\nexport function getCURPGender(curp: string): 'M' | 'F' | null {\n const cleaned = cleanDocument(curp).toUpperCase();\n if (cleaned.length < 11) return null;\n\n const genderChar = cleaned[10];\n if (genderChar === 'H') return 'M';\n if (genderChar === 'M') return 'F';\n return null;\n}\n\n/**\n * Get the birth date from a CURP\n * @returns Date object or null if invalid\n */\nexport function getCURPBirthDate(curp: string): Date | null {\n const cleaned = cleanDocument(curp).toUpperCase();\n if (cleaned.length < 10) return null;\n\n const yearPart = cleaned.slice(4, 6);\n const month = cleaned.slice(6, 8);\n const day = cleaned.slice(8, 10);\n\n // Determine century based on position 17 (digit for century)\n // 0-9 for people born 1900-1999, A for 2000+\n const centuryChar = cleaned[16];\n let year: number;\n\n if (/\\d/.test(centuryChar)) {\n year = 1900 + parseInt(yearPart, 10);\n } else {\n year = 2000 + parseInt(yearPart, 10);\n }\n\n const date = new Date(year, parseInt(month, 10) - 1, parseInt(day, 10));\n\n // Validate the date is real\n if (\n date.getFullYear() !== year ||\n date.getMonth() !== parseInt(month, 10) - 1 ||\n date.getDate() !== parseInt(day, 10)\n ) {\n return null;\n }\n\n return date;\n}\n\n/**\n * Mexican state codes used in CURP\n */\nconst CURP_STATE_CODES: Record<string, string> = {\n AS: 'Aguascalientes',\n BC: 'Baja California',\n BS: 'Baja California Sur',\n CC: 'Campeche',\n CL: 'Coahuila',\n CM: 'Colima',\n CS: 'Chiapas',\n CH: 'Chihuahua',\n DF: 'Ciudad de México',\n DG: 'Durango',\n GT: 'Guanajuato',\n GR: 'Guerrero',\n HG: 'Hidalgo',\n JC: 'Jalisco',\n MC: 'Estado de México',\n MN: 'Michoacán',\n MS: 'Morelos',\n NT: 'Nayarit',\n NL: 'Nuevo León',\n OC: 'Oaxaca',\n PL: 'Puebla',\n QT: 'Querétaro',\n QR: 'Quintana Roo',\n SP: 'San Luis Potosí',\n SL: 'Sinaloa',\n SR: 'Sonora',\n TC: 'Tabasco',\n TS: 'Tamaulipas',\n TL: 'Tlaxcala',\n VZ: 'Veracruz',\n YN: 'Yucatán',\n ZS: 'Zacatecas',\n NE: 'Nacido en el Extranjero',\n};\n\n/**\n * Get the birth state from a CURP\n * @returns State name or null if invalid\n */\nexport function getCURPBirthState(curp: string): string | null {\n const cleaned = cleanDocument(curp).toUpperCase();\n if (cleaned.length < 13) return null;\n\n const stateCode = cleaned.slice(11, 13);\n return CURP_STATE_CODES[stateCode] || null;\n}\n\n/**\n * Get the state code from a CURP\n * @returns Two-letter state code or null if invalid\n */\nexport function getCURPStateCode(curp: string): string | null {\n const cleaned = cleanDocument(curp).toUpperCase();\n if (cleaned.length < 13) return null;\n\n const stateCode = cleaned.slice(11, 13);\n return CURP_STATE_CODES[stateCode] ? stateCode : null;\n}\n\n/**\n * Check if RFC belongs to a company (persona moral)\n */\nexport function isRFCCompany(rfc: string): boolean {\n const cleaned = cleanDocument(rfc).toUpperCase();\n return cleaned.length === 12;\n}\n\n/**\n * Check if RFC belongs to an individual (persona física)\n */\nexport function isRFCPerson(rfc: string): boolean {\n const cleaned = cleanDocument(rfc).toUpperCase();\n return cleaned.length === 13;\n}\n\n/**\n * Get the registration date from RFC\n * @returns Date object or null if invalid\n */\nexport function getRFCDate(rfc: string): Date | null {\n const cleaned = cleanDocument(rfc).toUpperCase();\n\n if (cleaned.length !== 12 && cleaned.length !== 13) return null;\n\n // Date starts at position 3 for companies, 4 for individuals\n const dateStart = cleaned.length === 12 ? 3 : 4;\n const dateStr = cleaned.slice(dateStart, dateStart + 6);\n\n const year = parseInt(dateStr.slice(0, 2), 10);\n const month = parseInt(dateStr.slice(2, 4), 10);\n const day = parseInt(dateStr.slice(4, 6), 10);\n\n // Assume 1900s for years > 30, 2000s otherwise (heuristic)\n const fullYear = year > 30 ? 1900 + year : 2000 + year;\n\n const date = new Date(fullYear, month - 1, day);\n\n // Validate the date\n if (date.getFullYear() !== fullYear || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\n/**\n * Extract all info from a CURP\n */\nexport function parseCURP(curp: string): {\n valid: boolean;\n gender: 'M' | 'F' | null;\n birthDate: Date | null;\n birthState: string | null;\n stateCode: string | null;\n} {\n return {\n valid: validateCURP(curp),\n gender: getCURPGender(curp),\n birthDate: getCURPBirthDate(curp),\n birthState: getCURPBirthState(curp),\n stateCode: getCURPStateCode(curp),\n };\n}\n\n/**\n * Extract info from RFC\n */\nexport function parseRFC(rfc: string): {\n valid: boolean;\n type: 'company' | 'person' | null;\n date: Date | null;\n} {\n const valid = validateRFC(rfc);\n if (!valid) {\n return { valid: false, type: null, date: null };\n }\n\n return {\n valid: true,\n type: isRFCCompany(rfc) ? 'company' : 'person',\n date: getRFCDate(rfc),\n };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { DocumentType, FormatterFn, ValidationResult, ValidatorFn, cleanDigits, cleanDocument, mod10, mod11, padStart } from './core/index.cjs';
2
- export { calculateNITCheckDigit, cleanCC, cleanNIT, formatCC, formatNIT, validateCC, validateCE, validateNIT, validateTI } from './locales/co.cjs';
3
- export { cleanCNPJ, cleanCPF, formatCNPJ, formatCPF, validateCNPJ, validateCPF } from './locales/br.cjs';
4
- export { calculateRUTCheckDigit, cleanRUN, cleanRUT, formatRUN, formatRUT, validateRUN, validateRUT } from './locales/cl.cjs';
5
- export { calculateCUITCheckDigit, cleanCUIL, cleanCUIT, cleanDNI, formatCUIL, formatCUIT, formatDNI, validateCUIL, validateCUIT, validateDNI } from './locales/ar.cjs';
6
- export { cleanCURP, cleanRFC, formatCURP, formatRFC, getCURPBirthDate, getCURPGender, validateCURP, validateRFC } from './locales/mx.cjs';
2
+ export { calculateNITCheckDigit, cleanCC, cleanCE, cleanNIT, cleanTI, formatCC, formatCE, formatNIT, formatTI, generateNIT, isNITCompany, isNITPerson, validateCC, validateCE, validateNIT, validateTI } from './locales/co.cjs';
3
+ export { calculateCNPJCheckDigit, calculateCPFCheckDigit, cleanCNPJ, cleanCPF, formatCNPJ, formatCPF, generateCNPJ, generateCPF, getCNPJBranchNumber, isCNPJFilial, isCNPJMatriz, validateCNPJ, validateCPF } from './locales/br.cjs';
4
+ export { calculateRUNCheckDigit, calculateRUTCheckDigit, cleanRUN, cleanRUT, formatRUN, formatRUT, generateRUT, getFormattedRUTIfValid, validateRUN, validateRUT } from './locales/cl.cjs';
5
+ export { calculateCUILCheckDigit, calculateCUITCheckDigit, cleanCUIL, cleanCUIT, cleanDNI, formatCUIL, formatCUIT, formatDNI, generateCUIT, generateCUITFromDNI, getCUITType, getDNIFromCUIT, isCUITCompany, isCUITPerson, validateCUIL, validateCUIT, validateDNI } from './locales/ar.cjs';
6
+ export { cleanCURP, cleanRFC, formatCURP, formatRFC, getCURPBirthDate, getCURPBirthState, getCURPGender, getCURPStateCode, getRFCDate, isRFCCompany, isRFCPerson, parseCURP, parseRFC, validateCURP, validateRFC } from './locales/mx.cjs';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { DocumentType, FormatterFn, ValidationResult, ValidatorFn, cleanDigits, cleanDocument, mod10, mod11, padStart } from './core/index.js';
2
- export { calculateNITCheckDigit, cleanCC, cleanNIT, formatCC, formatNIT, validateCC, validateCE, validateNIT, validateTI } from './locales/co.js';
3
- export { cleanCNPJ, cleanCPF, formatCNPJ, formatCPF, validateCNPJ, validateCPF } from './locales/br.js';
4
- export { calculateRUTCheckDigit, cleanRUN, cleanRUT, formatRUN, formatRUT, validateRUN, validateRUT } from './locales/cl.js';
5
- export { calculateCUITCheckDigit, cleanCUIL, cleanCUIT, cleanDNI, formatCUIL, formatCUIT, formatDNI, validateCUIL, validateCUIT, validateDNI } from './locales/ar.js';
6
- export { cleanCURP, cleanRFC, formatCURP, formatRFC, getCURPBirthDate, getCURPGender, validateCURP, validateRFC } from './locales/mx.js';
2
+ export { calculateNITCheckDigit, cleanCC, cleanCE, cleanNIT, cleanTI, formatCC, formatCE, formatNIT, formatTI, generateNIT, isNITCompany, isNITPerson, validateCC, validateCE, validateNIT, validateTI } from './locales/co.js';
3
+ export { calculateCNPJCheckDigit, calculateCPFCheckDigit, cleanCNPJ, cleanCPF, formatCNPJ, formatCPF, generateCNPJ, generateCPF, getCNPJBranchNumber, isCNPJFilial, isCNPJMatriz, validateCNPJ, validateCPF } from './locales/br.js';
4
+ export { calculateRUNCheckDigit, calculateRUTCheckDigit, cleanRUN, cleanRUT, formatRUN, formatRUT, generateRUT, getFormattedRUTIfValid, validateRUN, validateRUT } from './locales/cl.js';
5
+ export { calculateCUILCheckDigit, calculateCUITCheckDigit, cleanCUIL, cleanCUIT, cleanDNI, formatCUIL, formatCUIT, formatDNI, generateCUIT, generateCUITFromDNI, getCUITType, getDNIFromCUIT, isCUITCompany, isCUITPerson, validateCUIL, validateCUIT, validateDNI } from './locales/ar.js';
6
+ export { cleanCURP, cleanRFC, formatCURP, formatRFC, getCURPBirthDate, getCURPBirthState, getCURPGender, getCURPStateCode, getRFCDate, isRFCCompany, isRFCPerson, parseCURP, parseRFC, validateCURP, validateRFC } from './locales/mx.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- function a(e){return e.replace(/[^a-zA-Z0-9]/g,"")}function o(e){return e.replace(/\D/g,"")}function T(e,t){return e.padStart(t,"0")}function R(e,t){let r=0;for(let n=0;n<e.length;n++)r+=parseInt(e[n],10)*t[n%t.length];return r%11}function D(e,t){let r=0;for(let i=0;i<e.length;i++){let n=parseInt(e[i],10)*t[i%t.length];n>9&&(n=Math.floor(n/10)+n%10),r+=n;}return r%10}var v=[3,7,13,17,19,23,29,37,41,43,47,53,59,67,71];function g(e){let t=o(e);if(t.length<8||t.length>15)throw new Error("NIT must be between 8 and 15 digits");let r=0,i=t.split("").reverse();for(let c=0;c<i.length;c++)r+=parseInt(i[c],10)*v[c];let n=r%11;return n===0?"0":n===1?"1":String(11-n)}function N(e){let t=o(e);if(t.length<9||t.length>16)return false;let r=t.slice(0,-1),i=t.slice(-1);try{return g(r)===i}catch{return false}}function P(e){let t=o(e);if(t.length<9)return e;let r=t.slice(0,-1),i=t.slice(-1);return `${r.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${i}`}function b(e){return o(e)}function F(e){let t=o(e);return t.length>=6&&t.length<=10}function $(e){return o(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function y(e){return o(e)}function S(e){let t=o(e);return t.length>=6&&t.length<=10}function k(e){let t=o(e);return t.length>=10&&t.length<=11}var _=[10,9,8,7,6,5,4,3,2],E=[11,10,9,8,7,6,5,4,3,2],A=[5,4,3,2,9,8,7,6,5,4,3,2],G=[6,5,4,3,2,9,8,7,6,5,4,3,2];function u(e,t){let r=0;for(let n=0;n<t.length;n++)r+=parseInt(e[n],10)*t[n];let i=r%11;return i<2?0:11-i}function H(e){let t=o(e);return t.length!==11||/^(\d)\1+$/.test(t)||u(t.slice(0,9),_)!==parseInt(t[9],10)?false:u(t.slice(0,10),E)===parseInt(t[10],10)}function J(e){let t=o(e).padStart(11,"0");return `${t.slice(0,3)}.${t.slice(3,6)}.${t.slice(6,9)}-${t.slice(9)}`}function L(e){return o(e)}function Z(e){let t=o(e);return t.length!==14||/^(\d)\1+$/.test(t)||u(t.slice(0,12),A)!==parseInt(t[12],10)?false:u(t.slice(0,13),G)===parseInt(t[13],10)}function M(e){let t=o(e).padStart(14,"0");return `${t.slice(0,2)}.${t.slice(2,5)}.${t.slice(5,8)}/${t.slice(8,12)}-${t.slice(12)}`}function W(e){return o(e)}var f=[2,3,4,5,6,7];function d(e){let r=o(e).split("").reverse(),i=0;for(let c=0;c<r.length;c++)i+=parseInt(r[c],10)*f[c%f.length];let n=11-i%11;return n===11?"0":n===10?"K":String(n)}function p(e){let t=a(e).toUpperCase();if(t.length<8||t.length>9)return false;let r=t.slice(0,-1),i=t.slice(-1);return /^\d+$/.test(r)?d(r)===i:false}function C(e){let t=a(e).toUpperCase();if(t.length<2)return e;let r=t.slice(0,-1),i=t.slice(-1);return `${r.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${i}`}function m(e){return a(e).toUpperCase()}var B=p,w=C,O=m;var V=[5,4,3,2,7,6,5,4,3,2];function I(e){let t=o(e);if(t.length!==10)throw new Error("CUIT body must be 10 digits");let r=0;for(let n=0;n<10;n++)r+=parseInt(t[n],10)*V[n];let i=11-r%11;return i===11?"0":i===10?"9":String(i)}function h(e){let t=o(e);if(t.length!==11)return false;let r=t.slice(0,2);if(!["20","23","24","27","30","33","34"].includes(r))return false;let n=t.slice(0,10),c=t.slice(-1);try{return I(n)===c}catch{return false}}function U(e){let t=o(e).padStart(11,"0");return `${t.slice(0,2)}-${t.slice(2,10)}-${t.slice(10)}`}function x(e){return o(e)}var K=h,Y=U,j=x;function z(e){let t=o(e);return t.length>=7&&t.length<=8}function Q(e){return o(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function X(e){return o(e)}var q=/^[A-ZÑ&]{4}\d{6}[A-Z0-9]{3}$/,tt=/^[A-ZÑ&]{3}\d{6}[A-Z0-9]{3}$/,et=/^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z0-9]\d$/;function nt(e){let t=a(e).toUpperCase();return t.length!==12&&t.length!==13?false:t.length===13?q.test(t):tt.test(t)}function rt(e){return a(e).toUpperCase()}function it(e){return a(e).toUpperCase()}function ot(e){let t=a(e).toUpperCase();return t.length!==18||!et.test(t)?false:ct(t)}function ct(e){let t="0123456789ABCDEFGHIJKLMN\xD1OPQRSTUVWXYZ",r=0;for(let n=0;n<17;n++){let c=e[n],s=t.indexOf(c);if(s===-1)return false;r+=s*(18-n);}return (10-r%10)%10===parseInt(e[17],10)}function at(e){return a(e).toUpperCase()}function st(e){return a(e).toUpperCase()}function lt(e){let t=a(e).toUpperCase();if(t.length<11)return null;let r=t[10];return r==="H"?"M":r==="M"?"F":null}function ut(e){let t=a(e).toUpperCase();if(t.length<10)return null;let r=t.slice(4,6),i=t.slice(6,8),n=t.slice(8,10),c=t[16],s;/\d/.test(c)?s=1900+parseInt(r,10):s=2e3+parseInt(r,10);let l=new Date(s,parseInt(i,10)-1,parseInt(n,10));return l.getFullYear()!==s||l.getMonth()!==parseInt(i,10)-1||l.getDate()!==parseInt(n,10)?null:l}export{I as calculateCUITCheckDigit,g as calculateNITCheckDigit,d as calculateRUTCheckDigit,y as cleanCC,W as cleanCNPJ,L as cleanCPF,j as cleanCUIL,x as cleanCUIT,st as cleanCURP,X as cleanDNI,o as cleanDigits,a as cleanDocument,b as cleanNIT,it as cleanRFC,O as cleanRUN,m as cleanRUT,$ as formatCC,M as formatCNPJ,J as formatCPF,Y as formatCUIL,U as formatCUIT,at as formatCURP,Q as formatDNI,P as formatNIT,rt as formatRFC,w as formatRUN,C as formatRUT,ut as getCURPBirthDate,lt as getCURPGender,D as mod10,R as mod11,T as padStart,F as validateCC,S as validateCE,Z as validateCNPJ,H as validateCPF,K as validateCUIL,h as validateCUIT,ot as validateCURP,z as validateDNI,N as validateNIT,nt as validateRFC,B as validateRUN,p as validateRUT,k as validateTI};//# sourceMappingURL=index.js.map
1
+ function l(e){return e.replace(/[^a-zA-Z0-9]/g,"")}function a(e){return e.replace(/\D/g,"")}function G(e,t){return e.padStart(t,"0")}function Z(e,t){let n=0;for(let o=0;o<e.length;o++)n+=parseInt(e[o],10)*t[o%t.length];return n%11}function H(e,t){let n=0;for(let r=0;r<e.length;r++){let o=parseInt(e[r],10)*t[r%t.length];o>9&&(o=Math.floor(o/10)+o%10),n+=o;}return n%10}var w=[3,7,13,17,19,23,29,37,41,43,47,53,59,67,71];function p(e){let t=a(e);if(t.length<8||t.length>15)throw new Error("NIT must be between 8 and 15 digits");let n=0,r=t.split("").reverse();for(let i=0;i<r.length;i++)n+=parseInt(r[i],10)*w[i];let o=n%11;return o===0?"0":o===1?"1":String(11-o)}function Y(e){let t=a(e);if(t.length<9||t.length>16)return false;let n=t.slice(0,-1),r=t.slice(-1);try{return p(n)===r}catch{return false}}function O(e){let t=a(e);if(t.length<9)return e;let n=t.slice(0,-1),r=t.slice(-1);return `${n.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${r}`}function W(e){return a(e)}function z(e){let t=a(e);return t.length>=6&&t.length<=10}function V(e){return a(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function j(e){return a(e)}function Q(e){let t=e.replace(/[^a-zA-Z0-9]/g,"");return t.length>=6&&t.length<=10}function K(e){return e.replace(/[^a-zA-Z0-9]/g,"").toUpperCase()}function X(e){return e.replace(/[^a-zA-Z0-9]/g,"").toUpperCase()}function q(e){let t=a(e);return t.length>=10&&t.length<=11}function tt(e){return a(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function et(e){return a(e)}function I(e){let t=a(e);if(t.length<9)return false;let n=t[0];return n==="8"||n==="9"}function nt(e){return a(e).length<9?false:!I(e)}function rt(e=true){let t=e?Math.random()<.5?"8":"9":String(Math.floor(Math.random()*8)),n=Math.floor(Math.random()*7)+8,r=t;for(let i=1;i<n;i++)r+=Math.floor(Math.random()*10);let o=p(r);return r+o}var x=[10,9,8,7,6,5,4,3,2],T=[11,10,9,8,7,6,5,4,3,2],U=[5,4,3,2,9,8,7,6,5,4,3,2],D=[6,5,4,3,2,9,8,7,6,5,4,3,2];function s(e,t){let n=0;for(let o=0;o<t.length;o++)n+=parseInt(e[o],10)*t[o];let r=n%11;return r<2?0:11-r}function N(e){let t=a(e).slice(0,9).padStart(9,"0");if(t.length!==9)throw new Error("CPF body must be 9 digits");let n=s(t,x),r=s(t+n,T);return `${n}${r}`}function P(e){let t=a(e).slice(0,12).padStart(12,"0");if(t.length!==12)throw new Error("CNPJ body must be 12 digits");let n=s(t,U),r=s(t+n,D);return `${n}${r}`}function ot(e){let t=a(e);return t.length!==11||/^(\d)\1+$/.test(t)||s(t.slice(0,9),x)!==parseInt(t[9],10)?false:s(t.slice(0,10),T)===parseInt(t[10],10)}function at(e){let t=a(e).padStart(11,"0");return `${t.slice(0,3)}.${t.slice(3,6)}.${t.slice(6,9)}-${t.slice(9)}`}function it(e){return a(e)}function lt(e){let t=a(e);return t.length!==14||/^(\d)\1+$/.test(t)||s(t.slice(0,12),U)!==parseInt(t[12],10)?false:s(t.slice(0,13),D)===parseInt(t[13],10)}function ct(e){let t=a(e).padStart(14,"0");return `${t.slice(0,2)}.${t.slice(2,5)}.${t.slice(5,8)}/${t.slice(8,12)}-${t.slice(12)}`}function st(e){return a(e)}function ut(){let e="";for(let n=0;n<9;n++)e+=Math.floor(Math.random()*10);let t=N(e);return e+t}function gt(e="0001"){let t="";for(let o=0;o<8;o++)t+=Math.floor(Math.random()*10);let n=t+e.padStart(4,"0"),r=P(n);return n+r}function ft(e){let t=a(e);return t.length!==14?false:t.slice(8,12)==="0001"}function dt(e){let t=a(e);return t.length!==14?false:t.slice(8,12)!=="0001"}function pt(e){let t=a(e);return t.length!==14?null:t.slice(8,12)}var R=[2,3,4,5,6,7];function f(e){let n=a(e).split("").reverse(),r=0;for(let i=0;i<n.length;i++)r+=parseInt(n[i],10)*R[i%R.length];let o=11-r%11;return o===11?"0":o===10?"K":String(o)}function C(e){let t=l(e).toUpperCase();if(t.length<8||t.length>9)return false;let n=t.slice(0,-1),r=t.slice(-1);return /^\d+$/.test(n)?f(n)===r:false}function h(e){let t=l(e).toUpperCase();if(t.length<2)return e;let n=t.slice(0,-1),r=t.slice(-1);return `${n.replace(/\B(?=(\d{3})+(?!\d))/g,".")}-${r}`}function b(e){return l(e).toUpperCase()}var Ct=C,ht=h,mt=b,It=f;function xt(){let e=Math.random()<.5?7:8,t="";t+=Math.floor(Math.random()*9)+1;for(let r=1;r<e;r++)t+=Math.floor(Math.random()*10);let n=f(t);return t+n}function Tt(e){return C(e)?h(e):null}var Ut=[5,4,3,2,7,6,5,4,3,2];function d(e){let t=a(e);if(t.length!==10)throw new Error("CUIT body must be 10 digits");let n=0;for(let o=0;o<10;o++)n+=parseInt(t[o],10)*Ut[o];let r=11-n%11;return r===11?"0":r===10?"9":String(r)}function y(e){let t=a(e);if(t.length!==11)return false;let n=t.slice(0,2);if(!["20","23","24","27","30","33","34"].includes(n))return false;let o=t.slice(0,10),i=t.slice(-1);try{return d(o)===i}catch{return false}}function F(e){let t=a(e).padStart(11,"0");return `${t.slice(0,2)}-${t.slice(2,10)}-${t.slice(10)}`}function S(e){return a(e)}var Dt=y,Nt=F,Pt=S,Rt=d;function bt(e){let t=a(e);return t.length>=7&&t.length<=8}function yt(e){return a(e).replace(/\B(?=(\d{3})+(?!\d))/g,".")}function Ft(e){return a(e)}var m=["30","33","34"],St=["20","23","24","27"];function vt(e){let t=a(e);if(t.length!==11)return false;let n=t.slice(0,2);return m.includes(n)}function Mt(e){let t=a(e);if(t.length!==11)return false;let n=t.slice(0,2);return St.includes(n)}function kt(e){let t=a(e);if(t.length!==11)return "unknown";let n=t.slice(0,2);return m.includes(n)?"company":n==="20"?"male":n==="27"?"female":"unknown"}function Et(e){let t=a(e);return t.length!==11?null:t.slice(2,10)}function v(e,t="20"){let n=a(e).padStart(8,"0"),r=t+n,o=d(r);return r+o}function $t(e=false){let t=e?m:["20","27"],n=t[Math.floor(Math.random()*t.length)],r="";for(let o=0;o<8;o++)r+=Math.floor(Math.random()*10);return v(r,n)}var Jt=/^[A-ZÑ&]{4}\d{6}[A-Z0-9]{3}$/,_t=/^[A-ZÑ&]{3}\d{6}[A-Z0-9]{3}$/,At=/^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z0-9]\d$/;function M(e){let t=l(e).toUpperCase();return t.length!==12&&t.length!==13?false:t.length===13?Jt.test(t):_t.test(t)}function Lt(e){return l(e).toUpperCase()}function Bt(e){return l(e).toUpperCase()}function k(e){let t=l(e).toUpperCase();return t.length!==18||!At.test(t)?false:Gt(t)}function Gt(e){let t="0123456789ABCDEFGHIJKLMN\xD1OPQRSTUVWXYZ",n=0;for(let o=0;o<17;o++){let i=e[o],c=t.indexOf(i);if(c===-1)return false;n+=c*(18-o);}return (10-n%10)%10===parseInt(e[17],10)}function Zt(e){return l(e).toUpperCase()}function Ht(e){return l(e).toUpperCase()}function E(e){let t=l(e).toUpperCase();if(t.length<11)return null;let n=t[10];return n==="H"?"M":n==="M"?"F":null}function $(e){let t=l(e).toUpperCase();if(t.length<10)return null;let n=t.slice(4,6),r=t.slice(6,8),o=t.slice(8,10),i=t[16],c;/\d/.test(i)?c=1900+parseInt(n,10):c=2e3+parseInt(n,10);let u=new Date(c,parseInt(r,10)-1,parseInt(o,10));return u.getFullYear()!==c||u.getMonth()!==parseInt(r,10)-1||u.getDate()!==parseInt(o,10)?null:u}var J={AS:"Aguascalientes",BC:"Baja California",BS:"Baja California Sur",CC:"Campeche",CL:"Coahuila",CM:"Colima",CS:"Chiapas",CH:"Chihuahua",DF:"Ciudad de M\xE9xico",DG:"Durango",GT:"Guanajuato",GR:"Guerrero",HG:"Hidalgo",JC:"Jalisco",MC:"Estado de M\xE9xico",MN:"Michoac\xE1n",MS:"Morelos",NT:"Nayarit",NL:"Nuevo Le\xF3n",OC:"Oaxaca",PL:"Puebla",QT:"Quer\xE9taro",QR:"Quintana Roo",SP:"San Luis Potos\xED",SL:"Sinaloa",SR:"Sonora",TC:"Tabasco",TS:"Tamaulipas",TL:"Tlaxcala",VZ:"Veracruz",YN:"Yucat\xE1n",ZS:"Zacatecas",NE:"Nacido en el Extranjero"};function _(e){let t=l(e).toUpperCase();if(t.length<13)return null;let n=t.slice(11,13);return J[n]||null}function A(e){let t=l(e).toUpperCase();if(t.length<13)return null;let n=t.slice(11,13);return J[n]?n:null}function L(e){return l(e).toUpperCase().length===12}function wt(e){return l(e).toUpperCase().length===13}function B(e){let t=l(e).toUpperCase();if(t.length!==12&&t.length!==13)return null;let n=t.length===12?3:4,r=t.slice(n,n+6),o=parseInt(r.slice(0,2),10),i=parseInt(r.slice(2,4),10),c=parseInt(r.slice(4,6),10),u=o>30?1900+o:2e3+o,g=new Date(u,i-1,c);return g.getFullYear()!==u||g.getMonth()!==i-1||g.getDate()!==c?null:g}function Yt(e){return {valid:k(e),gender:E(e),birthDate:$(e),birthState:_(e),stateCode:A(e)}}function Ot(e){return M(e)?{valid:true,type:L(e)?"company":"person",date:B(e)}:{valid:false,type:null,date:null}}export{P as calculateCNPJCheckDigit,N as calculateCPFCheckDigit,Rt as calculateCUILCheckDigit,d as calculateCUITCheckDigit,p as calculateNITCheckDigit,It as calculateRUNCheckDigit,f as calculateRUTCheckDigit,j as cleanCC,X as cleanCE,st as cleanCNPJ,it as cleanCPF,Pt as cleanCUIL,S as cleanCUIT,Ht as cleanCURP,Ft as cleanDNI,a as cleanDigits,l as cleanDocument,W as cleanNIT,Bt as cleanRFC,mt as cleanRUN,b as cleanRUT,et as cleanTI,V as formatCC,K as formatCE,ct as formatCNPJ,at as formatCPF,Nt as formatCUIL,F as formatCUIT,Zt as formatCURP,yt as formatDNI,O as formatNIT,Lt as formatRFC,ht as formatRUN,h as formatRUT,tt as formatTI,gt as generateCNPJ,ut as generateCPF,$t as generateCUIT,v as generateCUITFromDNI,rt as generateNIT,xt as generateRUT,pt as getCNPJBranchNumber,kt as getCUITType,$ as getCURPBirthDate,_ as getCURPBirthState,E as getCURPGender,A as getCURPStateCode,Et as getDNIFromCUIT,Tt as getFormattedRUTIfValid,B as getRFCDate,dt as isCNPJFilial,ft as isCNPJMatriz,vt as isCUITCompany,Mt as isCUITPerson,I as isNITCompany,nt as isNITPerson,L as isRFCCompany,wt as isRFCPerson,H as mod10,Z as mod11,G as padStart,Yt as parseCURP,Ot as parseRFC,z as validateCC,Q as validateCE,lt as validateCNPJ,ot as validateCPF,Dt as validateCUIL,y as validateCUIT,k as validateCURP,bt as validateDNI,Y as validateNIT,M as validateRFC,Ct as validateRUN,C as validateRUT,q as validateTI};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map