pu

Buscar este blog

lunes, 6 de enero de 2014

Funcion Valida Rut Chile Oracle

/* Bueno aki le dejo una funcion para validar el rut en oracle espero les sirva */



Anotacion: Funcion Valida Rut Chile Oracle


hay momentos en que para que inventar la rueda y ya esta inventada o no? todos los jiles dicen eso... pero te reto a que construyas tu propio algoritmo de rut tomando las consideraciones basicas que exije este.. ojala lo hicieras en algún lenguaje que no sea conocido phyton, sap o cualquier tipo de lenguaje y lo compartas con nosotros.



create or replace FUNCTION VALIDARUT(RUT IN VARCHAR2)RETURN VARCHAR2

AS

TOTAL VARCHAR2(12); -- largo total del string a ingresar (rut)

VRUT VARCHAR2(12); -- rut modificado para ajustar el largo



UNO VARCHAR2(2); -- primer valor del rut

DOS VARCHAR2(2); -- segundo valor del rut

TRES VARCHAR2(2);-- tercer valor del rut

CUATRO VARCHAR2(2); -- cuarto valor del rut

CINCO VARCHAR2(2); -- quinto valor del rut

SEIS VARCHAR2(2); -- ..

SIETE VARCHAR2(2); -- ..

OCHO VARCHAR2(2); -- ..



DV VARCHAR2(2); -- digito verificador

ULTIMO VARCHAR2(2); -- ultimo valor del rut ingresado

ESTADO NUMBER(2); -- estado simulacion booleano



BEGIN



ESTADO := 0; -- iniciamos el estado por defecto en falso

TOTAL := LENGTH(RUT); -- tomamos el total de la cadena



IF TOTAL = 12 OR TOTAL = 11 THEN -- comprovamos que no sea mayor a 12 y menor a 11

IF TOTAL <= 11 THEN -- verificamos

VRUT:=LPAD(RUT,12,0); -- agregamos 0 para ajustar a la nececidad de 12 digitos

ELSE

VRUT := RUT; -- asignamos valor final

END IF;

-- En VRUT se guardara el RUT FINAL



-- FILTRO "AMATEUR" PARA QUE EL FORMATO SEA EL CORRECTO

-- SOLO SE PERMITE EL SIGUIENTE FORMATO XX.XXX.XXX-X SI NO ES ASI DEVUELVE 0.

-- BASADO EN LOS VALORES ASCII DE CADA DIGITO.

IF

ASCII(SUBSTR(TO_CHAR(VRUT),1,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),1,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),2,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),2,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),3,1))= 46 AND

ASCII(SUBSTR(TO_CHAR(VRUT),4,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),4,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),5,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),5,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),6,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),6,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),7,1))= 46 AND

ASCII(SUBSTR(TO_CHAR(VRUT),8,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),8,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),9,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),9,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),10,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),10,1)) <= 57 AND

ASCII(SUBSTR(TO_CHAR(VRUT),11,1))= 45 AND

ASCII(SUBSTR(TO_CHAR(VRUT),12,1))>=48 AND ASCII(SUBSTR(TO_CHAR(VRUT),12,1)) <= 57

OR ASCII(SUBSTR(TO_CHAR(LOWER(VRUT)),12,1))=107 THEN --K



-- ALGORTIMO 2 DE http://www.dcc.uchile.cl/~mortega/microcodigos/validarrut/algoritmo.html

UNO := (SUBSTR(VRUT,1,1)*8); -- 1

DOS := (SUBSTR(VRUT,2,1)*9); -- 1

TRES := (SUBSTR(VRUT,4,1)*4); -- 2

CUATRO := (SUBSTR(VRUT,5,1)*5); --2

CINCO := (SUBSTR(VRUT,6,1)*6); --2

SEIS := (SUBSTR(VRUT,8,1)*7); --3

SIETE := (SUBSTR(VRUT,9,1)*8); --3

OCHO := (SUBSTR(VRUT,10,1)*9); -- 3



TOTAL := UNO + DOS + TRES + CUATRO + CINCO + SEIS + SIETE + OCHO; --SUMAMOS TODOS LOS VALORES



DV :=MOD(TOTAL,11); -- OBTENEMOS EL DV



--####-K 10699370-K

ULTIMO:= SUBSTR(VRUT,12,1); -- OBTENEMOS EL ULTIMO DIGITO DEL RUT

--- K

IF ASCII(SUBSTR(TO_CHAR(SUBSTR(LOWER(VRUT),12,1)),1,1)) = 107 THEN --OBTENEMOS SI EL VALOR INGRESADO TERMINA EN K

IF DV = 10 THEN

RETURN(1);

END IF;

END IF;

 





IF ULTIMO = DV THEN --COMPROVAMOS SI EL ULTIMO DIGITO ES IGUAL AL DV

ESTADO:=1; -- CAMBIAOS EL ESTADO DE FALSO A VERDADERO

RETURN(ESTADO); -- RETORNAMOS EL ESTADO SI TODO ESTA OK

END IF;

END IF;

END IF; -- end if, si el largo esta en el rango de 11 u 12

RETURN(ESTADO); -- RETORNAMOS EL VALOR FALSO.

END;


dejen comentarios....

3 Semestre Taller Base De Datos Santiago Sur

Bueno este semestre fue difícil pero nada imposible aqui les cuento como me fue en la asignatura mas ctm con un profesor que no voy a nombrar hasta después de mi futura titulación jajajajaj (ha).

el ramo por lo general es la caga... pero se puede aprender con mucha practica y un buen profesor. por lo que puedo decir que tuve que esforzarme con practica, videos youtube, manuales internet y mucho blog. son el fruto de un 5,6 de promedio y puedo decir que varios de mis amigos quedaron en el camino.

aca les dejo un poquito de lo que paso el #$)=??¿"...


****Taller de Base de Datos****

Programas a utilizar:
-ORACLE VER.11G
-Power Designer VER.16 o superior

1° Evaluación (20%):
-Modelamiento
-Operaciones sobre tabla
-Consultas simples, resumen, anidadas



2° Evaluación (20%):
-Privilegios
-Roles
-Perfiles

3° Evaluación (20%):
-Procedimientos Almacenados documentacion
-Procedimientos documentacion
-funciones documentacion
-Cursores documentacion
-Trigger documentacion

4° Evaluación (40%):
-Proyecto (Liquidación de Sueldo)  aki mi proyectofinal


********************

Codifica un archivo en BASE64 para se enviado por WS II

eh aki en codigo de la decodificacion...-

public string DecodificarBase64(string sBase64, String StrNombreArchivo)
        {
            // Declaramos fs para tener crear un nuevo archivo temporal en la maquina cliente.
            // y memStream para almacenar en memoria la cadena recibida.
            string sImagenTemporal = @"C:\\PDF\\" + StrNombreArchivo;
            FileStream fs = new FileStream(sImagenTemporal, FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);
            byte[] bytes;
            try
            {
                bytes = Convert.FromBase64String(sBase64);
                bw.Write(bytes);
                return sImagenTemporal;
            }
            catch
            {
                //MessageBox.Show("Ocurrió un error al leer la imgen.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                return sImagenTemporal = @"C:\\PDF\\no_disponible.pdf";
            }
            finally
            {
                fs.Close();
                bytes = null;
                bw = null;
                sBase64 = null;
            }
        }


aki coloco el capitulo anterior donde lo codifico.

http://ingenieroinformaticainacap.blogspot.com/2012/10/codifica-un-archivo-en-base64-para-se.html