
Validadores internacionales de sintaxis y dígitos de control
Source:R/validadores.R
validadores_formato.RdEstas funciones son puras y vectorizadas: no consultan la red ni prueban la
existencia de un país, moneda, buzón o entidad emisora. Los códigos se
contrastan con copias locales de las listas vigentes al preparar esta
versión del paquete. Los valores ausentes devuelven NA; todo valor presente
que no cumple el contrato devuelve FALSE. Los espacios al borde se
recortan antes de validar —son ruido de captura, no parte del dato—, salvo en
validar_url(), donde un espacio literal en cualquier posición rompe la
sintaxis y el valor es inválido. Un espacio en el medio no se recorta en
ningún validador.
Usage
validar_url(x, esquema_obligatorio = TRUE)
validar_iso3166(x, tipo = c("alpha2", "alpha3", "numerico"))
validar_iso4217(x)
validar_correo(x)
validar_luhn(x)
validar_mod97(x)Arguments
- x
Vector que se desea validar.
- esquema_obligatorio
Si es
TRUE, exigehttp://ohttps://.TRUEes el valor estricto por omisión;FALSEpermite una URL con host sin esquema, comoejemplo.uy.- tipo
Forma de código ISO 3166: dos letras (
"alpha2"), tres ("alpha3") o tres dígitos ("numerico"). Los valores numéricos de uno o dos dígitos se completan con ceros a la izquierda.
Details
La respuesta es sobre el dato, no sobre cómo lo escribe R. Un número se valida
por sus dígitos: el doble 12000000 se lee como "12000000" aunque scipen
lo imprima en notación científica. NaN es ausente y devuelve NA, igual que
en el resto del paquete. Las letras se pasan a mayúsculas sólo dentro de ASCII:
toupper() convierte la s larga (U+017F) en S y la i sin punto (U+0131) en
I, y con eso una s larga seguida de e pasaba por un código ISO; ahora es
inválida. Y la marca de codificación del texto
—latin1 o UTF-8— no cambia la respuesta.
validar_correo() comprueba un subconjunto práctico y deliberadamente
conservador de la sintaxis addr-spec: parte local de puntos y caracteres
ASCII habituales, seguida por un dominio DNS con al menos un punto. No
admite comentarios, cadenas entre comillas ni literales de dominio válidos
en la gramática completa de RFC 5322, y no prueba entrega ni existencia.
validar_url() comprueba URLs jerárquicas con host y acepta sólo los
esquemas http y https: son los esquemas de red que el paquete puede
reconocer sin atribuir semántica a protocolos arbitrarios. javascript: y
data: se rechazan deliberadamente, incluso si se parecen a una cadena con
dos puntos. Por omisión el esquema es obligatorio; con
esquema_obligatorio = FALSE también se acepta un host como ejemplo.uy.
Se aceptan nombres de dominio Unicode (IDN) y nombres ASCII en punycode,
puertos entre 1 y 65535, rutas, consultas y fragmentos con codificación
porcentual válida. No se consultan DNS ni se afirma que el recurso exista.
Los espacios, separadores Unicode y caracteres de control literales hacen
que el valor sea inválido; un espacio porcentualmente codificado sigue la
sintaxis de una URL y no es un espacio literal.
validar_luhn() acepta únicamente dígitos y aplica el algoritmo de Luhn.
validar_mod97() acepta letras ASCII y dígitos, transforma las letras a
A = 10, ..., Z = 35 y exige resto 1 conforme a ISO 7064 MOD 97-10. No
reordena caracteres: protocolos como IBAN deben hacer antes su transformación
propia.
References
International Organization for Standardization. ISO 3166 Country Codes. https://www.iso.org/iso-3166-country-codes.html
SIX Group. ISO 4217 Currency Codes. https://www.six-group.com/en/products-services/financial-information/market-reference-data/data-standards.html
Resnick P (2008). Internet Message Format, RFC 5322. https://www.rfc-editor.org/rfc/rfc5322
Luhn HP (1960). Computer for Verifying Numbers, US Patent 2,950,048. https://patents.google.com/patent/US2950048A/en
International Organization for Standardization. ISO/IEC 7064:2003. https://www.iso.org/standard/31531.html
Examples
validar_iso3166(c("UY", "CL", "ZZ"))
#> [1] TRUE TRUE FALSE
validar_iso4217(c("UYU", "CLP", "ZZZ"))
#> [1] TRUE TRUE FALSE
validar_correo(c("persona@example.org", "sin-arroba"))
#> [1] TRUE FALSE
validar_url(c("https://ejemplo.uy", "ejemplo.uy"))
#> [1] TRUE FALSE
validar_url("ejemplo.uy", esquema_obligatorio = FALSE)
#> [1] TRUE
validar_luhn(c("79927398713", "79927398714"))
#> [1] TRUE FALSE
validar_mod97(c("9999123456789012141490", "9999123456789012141491"))
#> [1] TRUE FALSE