PDA

Ver la Versión Completa : validar rut chileno


elistraus
19-12-2010, 08:04:33
hola llevo varios dias tratando de poder solucionar el validado del rut encontre un codigo que al hacer una consulta esta bueno la cosa que no se como implementarlo atravez de un ingreso por parate del usuario este es la funcion

CREATE OR REPLACE FUNCTION digito_verificador(character varying)
RETURNS character AS
$BODY$
DECLARE
rut ALIAS FOR $1;
rut_cero varchar(8);
valor int;
BEGIN
valor := 0;
rut_cero := lpad(rut,8,'0');

valor := valor + (substring(rut_cero,8,1)::int8)*2;
valor := valor + (substring(rut_cero,7,1)::int8)*3;
valor := valor + (substring(rut_cero,6,1)::int8)*4;
valor := valor + (substring(rut_cero,5,1)::int8)*5;
valor := valor + (substring(rut_cero,4,1)::int8)*6;
valor := valor + (substring(rut_cero,3,1)::int8)*7;
valor := valor + (substring(rut_cero,2,1)::int8)*2;
valor := valor + (substring(rut_cero,1,1)::int8)*3;

valor := valor % 11;

IF valor =1 THEN
RETURN 'K';
END IF;
IF valor =0 THEN
RETURN '0';
END IF;
IF valor>1 AND valor<11 THEN
RETURN (11-valor)::char;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION digito_verificador(character varying) OWNER TO postgres;



CREATE OR REPLACE FUNCTION valida_rut(character varying)
RETURNS boolean AS
$BODY$
DECLARE
rutfull ALIAS FOR $1;
rutfull_cero varchar(9);
rut varchar(8);
dv char;
BEGIN
IF rutfull IS NULL THEN
RETURN TRUE;
END IF;

rutfull_cero := lpad(rutfull,9,'0');
rut:= substr(rutfull_cero,0,9);
dv := substr(rutfull_cero,9,1);

IF digito_verificador(rut)=upper(dv) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION valida_rut(character varying) OWNER TO postgres;


y la trato de llamar de esta manera

CREATE OR REPLACE FUNCTION "validacionRut"()
RETURNS trigger AS
$BODY$
declare validaRut varchar(9);
BEGIN
select rut from persona into validaRut;
if (valida_rut(validaRut) = true) then
RETURN NEW;
else
raise exception 'rut invalido';
end if;
RETURN NEW;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION "validacionRut"() OWNER TO postgres;

pero no tengo resultados

al hacer una consulta

select valida_rut('151920314')
hace lo que tiene que hacer pero el problema es hacerlo llamar cuando el usuario ingrese

saludos