Validar el número de CUIT (Argentina)

6036 vistas

El número de CUIT es el número que el estado le asigna a los contribuyentes de Argentina el cual se compone de dos digitos arbitrarios, más el DNI (8 dígitos), más un dígito verificador para dar un total de 11 dígitos.

El siguiente código verifica que un número de CUIT ingresado sea válido.

Es aplicable por ejemplo para que sea aceptado por los Controladores Fiscales.



delphi
  1. const
  2.   TablaMul:Array[1..10] of Integer=(5,4,3,2,7,6,5,4,3,2); {Tabla Arbitraria}
  3.  
  4. function EsCUITValido(Num:String):boolean;
  5. type
  6.   ArrayDe11=Array[1..11] of Integer;
  7. var
  8. R:ArrayDe11;    {Resultados de Multiplicar por la Tabla Arbitraria}
  9. CUIT:ArrayDe11;  {Para convertir cada digito}
  10. I:Integer;      {Indice}
  11. Sumatoria,      {Sumatoria de los Digitos menos el último}
  12. Dividendo,      {Resultado de la División}
  13. Producto,
  14. Diferencia,
  15. DigitoVerif:Integer; {Digito Verificador Calculado}
  16. begin
  17. result:=false;          { Asumir Invalido }
  18. if Length(Num) = 11 then
  19.   begin
  20.     try
  21.       { Convertir cada caracter a Número}
  22.       for i:=1 to 11 do CUIT[i]:=StrToInt(Num[i]);
  23.     except
  24.       { Si hay error de conversión es CUIT invalido}
  25.       Exit;                                       
  26.     end; { try }
  27. end else Exit; { if }  { Si no tiene 11 caracteres es CUIT invalido }
  28.  
  29. for i:=1 to 10 do            // Multiplicar cada digito por la
  30.   R[i]:=CUIT[i]*TablaMul[i];  // Tabla Arbitraria menos el último
  31.  
  32. Sumatoria:=0;
  33. for i:=1 to 10 do
  34.   Sumatoria:=Sumatoria+R[i];  // Calcular la sumatoria de los resultados
  35.  
  36. Dividendo:=Sumatoria div 11;    //  Dividir por 11  (división entera)
  37. Producto:=Dividendo * 11;          // El resultado multiplica por 11
  38. Diferencia:=Sumatoria - Producto;  // Obtener la diferencia
  39. if Diferencia > 0 then            // Si la dif. es mayor a cero
  40.     DigitoVerif:=11 - Diferencia  // El digito verificador es 11 menos la
  41. diferencia
  42. else DigitoVerif:=Diferencia;      // sino es Cero.
  43.  
  44. if DigitoVerif = CUIT[11] then result:=true;  // si el Digito Verificador es igual
  45. end;                                        //  al último digito del CUITel CUIT es Válido.



Para compilar esta función necesitaremos incluir en el uses la unidad SysUtils