El problema recurrente
Siempre que hacemos un formulario para solicitar datos de entrada necesitamos validar las entradas. Una de las formas más básicas para validar es mediante expresiones regulares. Este deberia ser una de las primeras etapas de validación.
Nunca tengo a mano un listado con las expresiones más comunes, asi que aca anoto 3 que son bastantes comunes. Están expresados para utilizar en javascript, pero son facilmente adaptables.
Fecha
^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$
Mail
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$
CUIT Argentina
El mejor para lo último. Agrego también la función para validar el dígito verificador.
^[0-9]{2}-[0-9]{8}-[0-9]$
function validarCUIT(cuit){
cuit = cuit.toString().replace(/[-_]/g, "");
var codigo_valido = true;
if(cuit.length != 11)
codigo_valido = false;
else {
/* Funcion de CUIT encontrada en internet */
var mult = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
var total = 0;
for(var i = 0; i < mult.length; i++) {
total += parseInt(cuit[i]) * mult[i];
}
var mod = total % 11;
var digito = mod == 0 ? 0 : mod == 1 ? 9 : 11 - mod;
codigo_valido = digito != parseInt(cuit[10]);
}
return codigo_valido;
}
A medida que vaya utilizando nuevas, las voy a ir agregando.
Saludos!
Seguro que funciona??
ResponderEliminara mi no me funciona :(
alguien por favor me puede explicar esta parte??
ResponderEliminarvar digito = mod == 0 ? 0 : mod == 1 ? 9 : 11 - mod;
gracias!!
var digito = mod == 0 ? 0 : mod == 1 ? 9 : 11 - mod;
EliminarCon esa sentencia en una sola linea reemplaza varias lineas de codigo if y else.
Lo que dice alli es. Si mod es igual a cero, entonces (?) digito vale 0. Si (:) mod es igual a 1 entonces (?) digito vale 9. Sino en ultima instancia no ocurre los casos anteriores, se resta 11 menos el modulo, y ese sera el digito verificador.
Saludos y exitos, hace una semana que estoy con toda esta mierda y ya no se ni como sentarme jajaja
Marcos.
Muchas Gracias! Muy bueno!
ResponderEliminarComentario: existen dominios de mas de 3 caracteres (ej.: .info)
se podria dejar de 2 a 4..
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$
la función para validar el cuit tiene un error en la última condicional
ResponderEliminar"codigo_valido = digito != parseInt(cuit[10]);"
donde la misma debería ser == no negado (!=)
Les dejo la función refactorizada y funcionando:
function validateCUIT (cuit) {
let providerCUIT = cuit.toString().replace(/[-_]/g, '')
console.log('cuit:', providerCUIT)
console.log('largo:', providerCUIT.length)
let valid = true
let total = 0
let modulo = 0
let digit = 0
let multiplier = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
if (providerCUIT.length !== 11) {
valid = false
} else {
for (let number = 0; number < multiplier.length; number++) {
total += parseInt(providerCUIT[number]) * multiplier[number]
}
modulo = total % 11
digit = modulo === 0 ? 0 : modulo === 1 ? 9 : 11 - modulo
valid = digit === parseInt(providerCUIT[10])
}
return valid
}