lunes, 10 de mayo de 2010

Validaciones: RIF en Venezuela

Para Validar RIF , código c#


public bool validarRif(string sRif)
        {
            bool bResultado = false;
            int iFactor = 0;

            sRif = sRif.Replace("-", "");
            if (sRif.Length < 10)
                sRif = sRif.ToUpper().Substring(0, 1) + sRif.Substring(1, sRif.Length - 1).PadLeft(9, '0');

             string sPrimerCaracter = sRif.Substring(0, 1).ToUpper();

            switch (sPrimerCaracter)
            {
                case "V": iFactor = 1; break;
                case "E": iFactor = 2; break;
                case "J": iFactor = 3; break;
                case "P": iFactor = 4; break;
                case "G": iFactor = 5; break;
            }
            if (iFactor > 0)
            {
                int suma = ((int.Parse(sRif.Substring(8, 1))) * 2)
                         + ((int.Parse(sRif.Substring(7, 1))) * 3)
                         + ((int.Parse(sRif.Substring(6, 1))) * 4)
                         + ((int.Parse(sRif.Substring(5, 1))) * 5)
                         + ((int.Parse(sRif.Substring(4, 1))) * 6)
                         + ((int.Parse(sRif.Substring(3, 1))) * 7)
                         + ((int.Parse(sRif.Substring(2, 1))) * 2)
                         + ((int.Parse(sRif.Substring(1, 1))) * 3)
                         + (iFactor * 4);

                float dividendo = suma / 11;
                int DividendoEntero = (int)dividendo;
                int resto = 11 - (suma - DividendoEntero * 11);
                if (resto >= 10 || resto < 1)
                    resto = 0;
                if (sRif.Substring(9, 1).Equals(resto.ToString()))
                {
                    bResultado = true;
                }

            }
          
            return bResultado;

        }

8 comentarios:

  1. por casualidad no es mas facil validarlo por expresiones regulares.

    ResponderBorrar
  2. Mas vale tarde que nunca, en efecto mi pana, esta expresion regular valida el rif:

    ^[JGVE][-][0-9]{8}[-][0-9]$

    No es n de lejos la mas refinada que hay pero espero que te sea de utilidad.

    ResponderBorrar
  3. La expresion regula te sireve para validar el formato del RIF.

    La funcion antes explicada te sirve para determinar si el RIF es valido funcionalmente.

    Aqui les dejo la funcion en Java

    public boolean validarRif(String sRif) {
    boolean bResultado = false;
    int iFactor = 0;

    sRif = sRif.replace("-", "");
    if (sRif.length() < 10) {
    sRif = sRif.toUpperCase().substring(0, 1) + padLeft(sRif.substring(1, sRif.length() - 1), "0", 9);
    }

    String sPrimerCaracter = sRif.substring(0, 1).toUpperCase();

    switch (sPrimerCaracter) {
    case "V": iFactor = 1; break;
    case "E": iFactor = 2; break;
    case "J": iFactor = 3; break;
    case "P": iFactor = 4; break;
    case "G": iFactor = 5; break;
    }
    if (iFactor > 0) {
    int suma;
    suma = ((Integer.parseInt(sRif.substring(8, 9))) * 2)
    + ((Integer.parseInt(sRif.substring(7, 8))) * 3)
    + ((Integer.parseInt(sRif.substring(6, 7))) * 4)
    + ((Integer.parseInt(sRif.substring(5, 6))) * 5)
    + ((Integer.parseInt(sRif.substring(4, 5))) * 6)
    + ((Integer.parseInt(sRif.substring(3, 4))) * 7)
    + ((Integer.parseInt(sRif.substring(2, 3))) * 2)
    + ((Integer.parseInt(sRif.substring(1, 2))) * 3)
    + (iFactor * 4);

    int resto = 11 - (suma % 11);
    if (resto >= 10 || resto < 1){
    resto = 0;
    }
    if (sRif.substring(9, 10).equals(Integer.toString(resto))) {
    bResultado = true;
    }
    }
    return bResultado;
    }

    public static String padLeft(String valor,String relleno,int longitud) {
    String resultado=valor;
    int x = longitud-valor.length(), i=0;
    while (i<x){
    resultado=relleno+resultado;
    i++;
    }
    return resultado;
    }

    ResponderBorrar
  4. J-11111881-1 este rif porq no es valido?

    ResponderBorrar
  5. /*
    este seria un patron mas correcto, con minimo 7 caracteres y un maximo de 9, despues del tipo de documento y antes del digito verificador

    ^[JGVEP][-][0-9]{7,9}[-][0-9]{1} de html

    el siguiente codigo se puede usar como validacion agregando la clase valida_rif a un input
    */


    let _elementosDOM = document.querySelectorAll('.valida_rif');
    //Recorremos cada uno de nuestros elementos DOM HTML con la clase valida_rif
    for(let i = 0; i < _elementosDOM.length; i++){
    _elementosDOM[i].addEventListener('keyup', function(pEvento){
    this.value = this.value.replace(/^[JGVEP][-][0-9]{7,9}[-][0-9]{1}$/gi, '');
    });
    };

    ResponderBorrar