Hola acá te dejo la función que uso:
Código PHP:
CREATE OR REPLACE FUNCTION fn_calculadvrut
(NUM IN INT)
RETURN varchar2
IS
NUMERO INT;
SUMA INT;
CUENTA int;
RESTO int;
DIGITO DECIMAL(2,0);
DIG INT;
C INT;
/*
DECLARE NUMERO BIGINT
SET NUMERO=13028581
*/
BEGIN
NUMERO := NUM;
SUMA := 0;
CUENTA := 2;
C:= TRUNC(9/2,0) * 2;
DIG:=NUMERO MOD 10;
WHILE NUMERO<>0
LOOP
IF NUMERO!=0 THEN
NUMERO := TRUNC(NUMERO/10,0);
SUMA := SUMA + (DIG * CUENTA);
/*IF SUMA NOT IN (2, 26) THEN
RETURN SUMA;
END IF;*/
CUENTA := CUENTA + 1;
IF CUENTA = 8 THEN
CUENTA := 2;
END IF;
DIG:=NUMERO Mod 10;
END IF;
END LOOP;
RESTO := SUMA Mod 11;
DIGITO:= 11- RESTO;
IF DIGITO = 10 THEN RETURN 'K';
ELSIF DIGITO = 11 THEN RETURN '0';
ELSE RETURN DIGITO;
END IF;
RETURN NULL;
END;
Saludos