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;
}
}
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;
}
}
Muuuucho más simple:
ResponderEliminarpublic 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;
}
Hola Matias, podes revisar tu rutina mas simple, creo que NO FUNCA al menos para este CUIT 30709533270. La primer rutina SI.
ResponderEliminarDejo una funcion adaptada mucho mas simple y con verificacion de los 2 digitos iniciales, la variable a reemplazar con el cuit es ($_GET['cuit'])
ResponderEliminar$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
}
}