Ver Mensaje Individual
  #1  
Antiguo 19-12-2010
Avatar de elistraus
elistraus elistraus is offline
Miembro
 
Registrado: jun 2008
Posts: 32
Reputación: 0
elistraus Va por buen camino
validar rut chileno

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
Código Delphi [-]
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

Última edición por marcoszorrilla fecha: 04-01-2011 a las 15:24:52.
Responder Con Cita