Páginas

martes, 2 de abril de 2013

Función para validar CUIT en Argentina en PHP

Como dice el título, dicha función tuve que hacerla en PHP ya que sólo encontraba en JS.
Devuelve un valor booleano, true si es verdadero...
Lo que sí, tenemos que tener en cuenta y controlar que no ingresen los guiones, eso lo pueden hacer con JS, es decir, que la función sólo acepta los 11 números válidos del CUIT para Argentina.



//FUNCION VALIDA CUIT
         function validarCUIT($cuit) {
            $cadena = str_split($cuit);

            $result = $cadena[0]*5;
            $result += $cadena[1]*4;
            $result += $cadena[2]*3;
            $result += $cadena[3]*2;
            $result += $cadena[4]*7;
            $result += $cadena[5]*6;
            $result += $cadena[6]*5;
            $result += $cadena[7]*4;
            $result += $cadena[8]*3;
            $result += $cadena[9]*2;

            $div = intval($result/11);
            $resto = $result - ($div*11);

            if($resto==0){
                if($resto==$cadena[10]){
                    return true;
                }else{
                    return false;
                }
            }elseif($resto==1){
                if($cadena[10]==9 AND $cadena[0]==2 AND $cadena[1]==3){
                    return true;
                }elseif($cadena[10]==4 AND $cadena[0]==2 AND $cadena[1]==3){
                    return true;
                }
            }elseif($cadena[10]==(11-$resto)){
                return true;
            }else{
                return false;
            }
        }

3 comentarios:

  1. Muuuucho más simple:

    public function isValid($value)
    {
    if (!is_numeric($value)) {
    return false;
    }

    if (strlen($value) != 11) {
    return false;
    }

    $prefijo = (int) substr($value, 0,2);
    if (!in_array($prefijo, array(20,23,24,27))) {
    return false;
    }

    $coeficiente = array(5,4,3,2,7,6,5,4,3,2);

    $sum=0;

    for ($i=0; $i < 10 ; $i++) {
    $sum=$sum+($value[$i]*$coeficiente[$i]);
    }

    $resto=$sum % 11;

    if ($value[10] != 11-$resto) {
    return false;
    }

    return true;
    }

    ResponderEliminar
  2. Hola Matias, podes revisar tu rutina mas simple, creo que NO FUNCA al menos para este CUIT 30709533270. La primer rutina SI.

    ResponderEliminar
  3. Dejo una funcion adaptada mucho mas simple y con verificacion de los 2 digitos iniciales, la variable a reemplazar con el cuit es ($_GET['cuit'])

    $array_dig2 = array(20,23,24,27,30,33,34);

    $digitos = explode('-',$_GET['cuit']);

    if(in_array($digitos[0],$array_dig2)){ //si los 2 primeros digistos son validos


    $coeficiente = array(5,4,3,2,7,6,5,4,3,2);

    $cuit2 = str_replace('-','',$_GET['cuit']);
    $cuit = str_split($cuit2);
    $verificador = array_pop($cuit);

    for ($i=0; $i <10; $i++) {

    $sum += ($cuit[$i]*$coeficiente[$i]);
    $resultado = $sum % 11;
    $resultado = 11 - $resultado;
    //saco el digito verificador
    $veri_nro = intval($verificador);
    }

    if ($resultado===11){$resultado=0;}else if($resultado===10){$resultado=9;}

    //echo $resultado;

    if ($veri_nro <> $resultado) {
    //cuit invalido
    } else {
    //cuit correcto
    }
    }

    ResponderEliminar