Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   validar rut chileno (https://www.clubdelphi.com/foros/showthread.php?t=71441)

elistraus 19-12-2010 08:04:33

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


La franja horaria es GMT +2. Ahora son las 20:46:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi