Toolkit de funciones Javascript para validación y cálculo

peque91 Seguir

Beta
Redactor
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Sep 2013
Mensajes
40
Bueno como no he encontrado nada que se ajustase a mis necesidades (básicas inicialmente) estoy poco a poco desarrollando un toolkit de funciones esenciales y elementales, las cuales os dejo por aquí por si a alguno os interesa, las necesitáis y no queréis perder tiempo en desarrollarlas por vosotros mismos.

Como ya dije iré ampliando el toolkit poco a poco según vaya necesitando mas funciones. Espero que os sirva.

PD: Si veis alguna forma de optimizarlas o si queréis que añada alguna especifica solo tenéis que decirlo.

Insertar CODE, HTML o PHP:
//funciones base

function suma_impares(ndigito){ //Necesaria para vCIF
   nsuma = ndigito * 2;
   if (nsuma >= 10) nsuma = (nsuma%10) + 1;
   return nsuma;
}

function quita_espacios(cadena) //Elimina los espacios al principio y al final de la cadena. NO los que haya dentro. Necesaria para vNIF
{
	var compruebaizquierda=/^ .+$/;
	var compruebaderecha=/^.+ $/;
	var correcto;
	correcto=false;
	while (correcto==false) //repetimos las operaciones hasta acabar con todos los espacios
	{
		if (compruebaizquierda.test(cadena))
		{
			cadena = cadena.substr(1); //Si hay un espacio a la izquierda lo quitamos
		}
		else
		{
			if (compruebaderecha.test(cadena))
			{
				cadena = cadena.substr(0,cadena.length-1); //Si hay un espacio a la derecha lo quitamos
			}
			else
			{
				correcto=true; //Ya no quedan espacios
			}
		}
	}
	return (cadena); //Devolvemos la cadena limpia
}

//validaciones basicas

function vVacio(texto){ //Validacion de un campo vacio o solo espacios
	var valido=true;
	var texto2 = texto.replace(/\s/g,""); //eliminamos todos los espacios que pudiera haber .replace(" ","") solo elimina la primera ocurrencia que encuentre
	//alert("'"+texto2+"'"); //Testear si funciona o no
	if (texto2   != ''){ //si la cadena contiene algo no pasa el validador
		valido = false;
	} 
	return valido;
}

function aleatorio_acotado(min,max){//sacamos un numero aleatorio pasandole el minimo y el maximo sobre los que queremos que oscile
	var aleatorio = Math.random();//guardamos el valor en una variable por si queremos testear algo con ese valor en un futuro
	return (Math.floor(aleatorio * (max - min + 1))) + parseInt(min);
}

//validaciones genericas

function vFloat(num){//validamos que la variable que le pasamos contenga un numero float(entero o con decimales)
	valido=true;
	valor=parseFloat(num);
	if (isNaN(valor))
	{
		valido=false;
	}
	return valido;
}

function vInt(num){//validamos que la variable que le pasamos contenga un numero entero(no pasa con floats)
	valido=true;
	valor=parseInt(num);
	if (isNaN(valor)||num!=valor)//aqui añadimos el num!=valor para que si es float no pase el validador si quitamos esto y el || con floats tambien pasa ya que rendondea el float para pasarlo a int
	{
		valido=false;
	}
	return valido;
}


//validaciones especificas

function vCIF(cif){ //valida un codigo CIF (Codigo de empresa en España)
	var cadenacif = new Array("A","B","C","D","E","F","G","H","I","J");
	var arrcif = new Array(9);
	var aux1;
	var aux2;
	var i;
	var digito;
	for (i=0;i<=8;i++){ 
		arrcif[i] = (cif.substr(i,1) - 1) + 1;
	}
	aux1 = arrcif[2] + arrcif[4] + arrcif[6]
	aux2 = suma_impares(arrcif[1]) + suma_impares(arrcif[3]) + suma_impares(arrcif[5]) + suma_impares(arrcif[7])
	aux1 = aux1 + aux2
	digito = 10 - (aux1%10)
	if (cadenacif[digito-1] == cif.substr(8,1))
	{
		return (true)
	}else{
		if (!isNaN(cif.substr(8,1))){
			if (digito == 10) digito=0;
			return (digito==arrcif[8]);
		}else{
			return (false);
		}
	}
}

function vNIF(cifnif) //Valida un NIF/DNI (Codigo de identificacion nacional en España de cada persona)
{
    var vnif,vdni;
	var letranif,numero,letra;
	cifnif = quita_espacios(cifnif);	
	cifnif = cifnif.toUpperCase();
	letranif = cifnif.substr(0,1);
	if (isNaN(letranif))
	{
		if (letranif != "X" && letranif != "Z")
		{
			if (!val_cif(cifnif))			
				return false;		
			else
				return true;
		}
		else
			cifnif = cifnif.substr(1);
	}
	vdni=cifnif.substr(0,cifnif.length-1); //Numeros del DNI
	if (vdni.length > 8) 	
		return false
	
	vnif=cifnif.substr(cifnif.length-1,1); //Letra del DNI
	numero=vdni - Math.round(vdni / 23) * 23; //Calculo de la letra
	if (numero < 0) // esto es por que al redondear suma uno y hay que corregirlo
		numero += 23; // sumamos 23 porque se multiplico el 1 que sumamos por 23
	var letras = "TRWAGMYFPDXBNJZSQVHLCKE";
	letra=letras.charAt(numero);
	if (letra != vnif)	
		return false;

	return true
}

//validamos que una estructura de correo electronico 
//sea valida ATENCION, solo se valida la estructura para 
//comprobar si es un dominio valido y demas se debe validar 
//con lenguaje de servidor como php o java pero no con uno 
//de cliente como Javascript
function vCorreo(Cadena){ 
	Punto = Cadena.substring(Cadena.lastIndexOf('.') + 1, Cadena.length);   // Cadena del .xxxx
	Dominio = Cadena.substring(Cadena.lastIndexOf('@') + 1, Cadena.lastIndexOf('.'));  // Dominio @xxxx.xxxx
	Usuario = Cadena.substring(0, Cadena.lastIndexOf('@'));     // Cadena xxxx@
	Reserv = "@/º\"\'+*{}\\<>?¿[]áéíóú#·¡!^*;,:";      // Letras Reservadas
	valido = true; //flag
	// verifica qie el Usuario no tenga un caracter especial
	for (var Cont=0; Cont<Usuario.length; Cont++) {
		X = Usuario.substring(Cont,Cont+1);
		if (Reserv.indexOf(X)!=-1)
			valido = false;
	}
	// verifica qie el Punto no tenga un caracter especial
	for (var Cont=0; Cont<Punto.length; Cont++) {
		X=Punto.substring(Cont,Cont+1);
		if (Reserv.indexOf(X)!=-1)
			valido = false;
	}
	// verifica que el Dominio no tenga un caracter especial
	for (var Cont=0; Cont<Dominio.length; Cont++) {
		X=Dominio.substring(Cont,Cont+1);
		if (Reserv.indexOf(X)!=-1)
			valido = false;
	}
	// Verifica la sintaxis básica.....
	if (Punto.length<2 || Dominio <1 || Cadena.lastIndexOf('.')<0 || Cadena.lastIndexOf('@')<0 || Usuario<1) {
		valido = false;
	}
	return valido;
}

Un saludo
 
Última edición:

xNoMinD

Redactor
No recomendado
Verificado por Whatsapp
Desde
22 Feb 2013
Mensajes
1.133
Resulta interesante este ToolKit, pero fuese de gran ayuda que para algunos novatos o que se estan iniciando en programación, dieras mejores comentarios aunque también les sirve a ellos para hacer su tarea, por así decirlo. Gracias por tu aporte ;)
 

peque91

Beta
Redactor
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Sep 2013
Mensajes
40
Actualizado con mejor documentación (Comentarios) Un saludo :p
 
Arriba