Ver Mensaje Individual
  #87 (permalink)  
Antiguo 23/07/2010, 11:21
Avatar de mauriciolangea
mauriciolangea
 
Fecha de Ingreso: enero-2002
Mensajes: 59
Antigüedad: 22 años, 4 meses
Puntos: 0
Firebird 2.x

Tema: Firebird

Pregunta: ¿Cómo creo un procedimiento para validar RUT en Chile ?

Respuesta:

Mediante el siguiente procedimiento almacenado se puede validar el RUT en Chile mediante el uso del módulo 11.

Fuente:

http://www.dcc.uchile.cl/~mortega/mi...algoritmo.html

Código:
SET TERM ^ ;

CREATE PROCEDURE obtener_dgv 
 ( rut  integer )  RETURNS ( dgv char(1) )
AS 
DECLARE VARIABLE suma       integer; 
DECLARE VARIABLE factor     integer;
DECLARE VARIABLE rut_aux    integer;
DECLARE VARIABLE posicion   integer;
DECLARE VARIABLE largo      integer;
DECLARE VARIABLE result1    integer;
DECLARE VARIABLE result2    integer;
DECLARE VARIABLE dig        integer; 
DECLARE VARIABLE dv         integer; 

BEGIN
    suma     = 0;
    factor   = 2;
    posicion = 0;
    largo    = char_length(:rut);

    WHILE(posicion < largo ) do
        begin
            dig = substring(:rut from (largo-posicion) for 1);

            if (factor = 8) then factor = 2;

            suma     = suma + (dig * factor);

            factor   = factor + 1;
            posicion = posicion + 1;
            
        end

    result1 = suma /11;
    result2 = result1 * 11;
    dv = ((suma-result2)-11)*-1;

    if (dv not in(10, 11)) then dgv = dv;

    if (dv = 11) then dgv = 0;
    
    if (dv = 10) then dgv = 'K';
        
    suspend;

END^

SET TERM ; ^
para ejecutar éste :

SELECT * FROM obtener_dgv(12345678)