-
Notifications
You must be signed in to change notification settings - Fork 0
Deteccion
detect() recibe un valor suelto y trata de decir de qué país y de qué tipo de documento es.
Sirve para campos únicos donde el usuario pega lo que tiene sin elegir el tipo antes.
import { detect } from '@zeluizr/palta'
detect('111.444.777-35')
// { country: 'BR', type: 'cpf', valid: true, formatted: '111.444.777-35' }
detect('12.345.678-5')
// { country: 'CL', type: 'rut', valid: true, formatted: '12.345.678-5' }
detect('20-12345678-6')
// { country: 'AR', type: 'cuit', valid: true, formatted: '20-12345678-6' }
detect('holaaa') // null
detect('') // null
detect(null) // nullinterface DetectResult {
country: string // 'BR', 'CL', 'AR', ...
type: string // 'cpf', 'rut', 'cuit', ...
valid: boolean
formatted: string
}null significa que no reconoció nada. Un objeto con valid: false significa otra cosa: la
forma coincide con un documento conocido, pero el dígito verificador no cierra. Ese caso es
útil para dar un mensaje de error específico en vez de un "dato inválido" genérico.
const r = detect(input)
if (!r) {
// no se parece a ningún documento cubierto
} else if (!r.valid) {
// parece un r.type de r.country, pero el verificador está mal
} else {
// r.formatted listo para mostrar
}| país | tipos |
|---|---|
| Brasil |
cpf, cnpj
|
| Chile | rut |
| Argentina |
cuit, dni
|
| Colombia |
nit, cc
|
| Perú |
ruc, dni
|
| Uruguay | ci |
| México |
rfc, curp
|
| Venezuela | rif |
| Ecuador | ruc |
No es exhaustiva entre los 23 países. Si el documento que te interesa no está en esta tabla, llamá directo al módulo del país.
El orden importa, porque varios documentos comparten largo.
-
Formatos alfanuméricos primero, que son los menos ambiguos: CURP de 18 caracteres, RFC
de 12 o 13, RIF venezolano de 10 con letra inicial, y RUT chileno cuando trae
K. -
Descarte por letras: si el valor tiene bastantes más letras que dígitos y no matcheó
nada de lo anterior, devuelve
null. - Documentos numéricos por largo:
| dígitos | orden de prueba |
|---|---|
| 8 | CI uruguaya, DNI peruano, DNI argentino, RUT chileno |
| 9 | RUT chileno |
| 10 | NIT colombiano, CC colombiana |
| 11 | CPF, CUIT, RUC peruano |
| 13 | RUC ecuatoriano |
| 14 | CNPJ |
Dentro de cada largo gana el primero que valida. Si ninguno valida, devuelve el candidato más
probable con valid: false — salvo en 13 dígitos, donde devuelve null.
detect() adivina, y adivinar tiene costo. Si ya sabés el país, llamá al módulo directo: es
más rápido, más preciso y no tiene ambigüedad.
// sabés que es Brasil
br.cpf.validate(input)
// no sabés nada del origen
detect(input)Un caso concreto de ambigüedad: un número de 8 dígitos puede ser CI uruguaya, DNI peruano, DNI
argentino o RUT chileno. detect() elige uno; el usuario puede haber querido otro.
Sumar un documento a detect() es tocar src/detect.ts: importar validate y format del
módulo, y agregar el chequeo en la rama del largo correspondiente, cuidando el orden. El resto
del flujo está en Contribuir.
Empezar
Referencia
Colaborar
Enlaces