Geeks With Blogs

News Locations of visitors to this page

Ariel Popovsky's Blog Aventuras y desventuras con .net
Etiquetas de Technorati: ,,,,
 

Hace tiempo que quiero armar un blog técnico para compartir experiencias y cosas de interes para desarrolladores web y finalmente me decidí.
Para el primer post quiero empezar con algo útil que tuve que armar para una aplicación que estamos desarrollando. Se trata de rutinas de validación de CUIT/CUIL (Código Unico de Identificación Tributaria / Laboral de Argentina). Hay varios ejemplos en la web en distintos lenguajes pero al no ver algo en c# o Javascript decidí armar mi versión.
La validación se basa en calcular el dígito verificador y compararlo con el suministrado. El algoritmo es muy simple, se multiplica cada dígito por un factor específico, la suma de todos los términos se divide por 11 y el dígito es igual a 0 si el resto es 0, 9 si el resto es 1 o 11-resto en los demás casos.
Esta es la versión de .net para calcular el dígito:

 
   1:          /// <summary>
   2:          /// Calcula el dígito verificador dado un CUIT completo o sin él.
   3:          /// </summary>
   4:          /// <param name="cuit">El CUIT como String sin guiones</param>
   5:          /// <returns>El valor del dígito verificador calculado.</returns>
   6:          public static int CalcularDigitoCuit(string cuit)
   7:          {
   8:              int[] mult = new[] { 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 };
   9:              char[] nums = cuit.ToCharArray();
  10:              int total = 0;
  11:              for (int i = 0; i < mult.Length; i++)
  12:              {
  13:                  total += int.Parse(nums[i].ToString()) * mult[i];
  14:              }
  15:              var resto = total % 11;
  16:              return resto == 0 ? 0 : resto == 1 ? 9 : 11 - resto;
  17:          }

 

El código para validar simplemente compara el dígito suministrado con el calculado. Como mejora se podrían validar los primeros 2 dígitos que solo pueden tener ciertos valores pero preferí dejarlo afuera por ahora ya que quien sabe si el día de mañana no se agregan otros códigos.

   1:          /// <summary>
   2:          /// Valida el CUIT ingresado.
   3:          /// </summary>
   4:          /// <param name="cuit" />Número de CUIT como string con o sin guiones
   5:          /// <returns>True si el CUIT es válido y False si no.</returns>
   6:          public static bool ValidaCuit(string cuit)
   7:          {
   8:              if (cuit == null)
   9:              {
  10:                  return false;
  11:              }
  12:              //Quito los guiones, el cuit resultante debe tener 11 caracteres.
  13:              cuit = cuit.Replace("-", string.Empty);
  14:              if (cuit.Length != 11)
  15:              {
  16:                  return false;
  17:              }
  18:              else
  19:              {
  20:                  int calculado = CalcularDigitoCuit(cuit);
  21:                  int digito = int.Parse(cuit.Substring(10));
  22:                  return calculado == digito;
  23:              }
  24:          }

 

 La versión Javascript es muy similar aunque no separé la generación del dígito de la validación. La última línea registra el método de validación en JQuery Validator.

   1:  function validaCuit(cuit) {
   2:      if (typeof (cuit) == 'undefined')
   3:          return true;
   4:      cuit = cuit.toString().replace(/[-_]/g, "");
   5:      if (cuit == '')
   6:          return true; //No estamos validando si el campo esta vacio, eso queda para el "required"
   7:      if (cuit.length != 11)
   8:          return false;
   9:      else {
  10:          var mult = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
  11:          var total = 0;
  12:          for (var i = 0; i < mult.length; i++) {
  13:              total += parseInt(cuit[i]) * mult[i];
  14:          }
  15:          var mod = total % 11;
  16:          var digito = mod == 0 ? 0 : mod == 1 ? 9 : 11 - mod;
  17:      }
  18:      return digito == parseInt(cuit[10]);
  19:  }
  20:   
  21:  $.validator.addMethod("cuit", validaCuit, 'CUIT/CUIT Inválido');


Un ejemplo de uso del validador de Javascript:
   1:   <form id="test">
   2:      <input type="text" id="cuit" name="cuit" />
   3:   </form>

 

 

   1:      <script type="text/javascript">
   2:          $(function() {
   3:              $("#test").validate({
   4:                  rules: {
   5:                      cuit: "cuit"
   6:                  }
   7:              });
   8:              $("#cuit").keydown(function() {
   9:                  $(this).valid();
  10:              });
  11:          });
  12:      
  13:      </script>

Espero que a alguien le sea útil.

 
Posted on Monday, April 27, 2009 4:18 PM ASP.net | Back to top


Comments on this post: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Muchisimas gracias. Me ahorraste varias minutos de codificacion. Un abrazo y Gracias.
Left by Nahuel Alejandro Ramos on May 30, 2009 3:39 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Usalo tranquilo y modificalo a gusto (eso si, después no me eches la culpa si no anda ;) ).

Saludos!
Left by Ariel Popovsky on Oct 28, 2009 5:48 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Capo! todavia no lo pude hacer andar pero muchas gracias igual!!!
Left by Juanito on Nov 10, 2009 2:52 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Muy buen post, gracias!!!

@mariano: si hiciste modificaciones que son necesarias, ¿que tal si las compartes con todos? ;) Gracias!
Left by Sharer on Jan 13, 2010 10:56 AM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Hay un error en la línea 15, en la función CalcularDigitoCuit(string cuit) en C#. en lugar de decir:

var resto = total % 11;

debería ser

int resto = total % 11;
Left by c#coder on Feb 03, 2010 12:42 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Muchas gracias por el aporte, la verdad que es muy util
Left by alfredo on Apr 04, 2010 7:44 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
en los ejemplos de c# faltaria validar que no sea tenga caracteres la cadena. y que los primeros 2 digitos sean si o si una de las siguientes opciones:
20, 23, 24, 27, o 30

Saludos
Left by julian on Apr 08, 2010 11:47 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
El tema de los prefijos no estaría mal agregarlo, no lo hice porque no estaba seguro de saber todos los posibles. Por ejemplo en tu lista falta el 33 que está en uso.
El tema de validar que no esté vacío, eso es a propósito.
Cuando trabajas con validadores, hay validadores específicos para campos obligatorios. Este validador valida que ingreses un CUIT valido, pero el CUIT podría no ser obligatorio. Si es obligatorio o no, tenés un validador específico que es el "required".
Left by Ariel Popovsky on Apr 09, 2010 9:47 AM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
No soy de comentar en los foros... exepto cuando hay algo verdaderamente simple y practico como estos script. saludos muy bueno el blog felicitaciones!
Left by GONZALO on Jun 04, 2010 8:04 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Excelente post! Muy útil
Left by Carlos on Jul 17, 2010 9:51 AM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Muchas gracias hermano!!
saludos de Brasil
Left by Pedrero on Jul 27, 2010 3:19 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
gracias, pero la verdad todos estos ejemplos nunca me sirven ya que no se programar.
entonces los miro de lejos.... osea... ojo . me pongo mal con lo que me pasa internamente, pero siempre digo que en la vida hay q seguir y meterle duro a las adversidades.
para mi la programacion siempre fue un karma, tuve 2 trabajos como programador y me hecharon al mes.
no se q onda,,, osea.. me keria hacer el poronga, viste osea.. ese tipo bil geits o esos loquitos...
pero la verdad es q el destino me la jugo por detras... pero bueno aca estoy dandole batalla.
saludos a todos los que me conocen, la radio esta muy buena.
aguante c sharp.
Left by carlos gomez on Oct 07, 2010 8:15 AM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Buenisimo!!!! Muchas gracias por el aporte
Left by Diego on Nov 24, 2010 1:14 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
FileUltimate is an ASP.NET file manager control which you can add directly to your existing ASP.NET (.aspx) pages. The control renders a user interface similar to "Windows Explorer" within the page and this user interface allows you to view the contents of the predefined root folders and allow complete file management actions within those folders. File management actions can be limited by predefined permissions and quota limits on each folder separately.
Left by asp.net file picker on Dec 10, 2010 7:00 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Sólo para contar que utilicé tu código como spec de mi impl en scala del cálculo del dígito verificador que quedó como sigue:


private val factors = Seq(5, 4, 3, 2, 7, 6, 5, 4, 3, 2)

def verifier(cuit: String): Digit = {
val digits = cuit.map(_.toString.toInt)
0.until(factors.length).map(i ⇒ digits(i) * factors(i)).reduceLeft(_ + _) % 11 match {
case 0 ⇒ 0
case 1 ⇒ 9
case x ⇒ 11 - x
}
}


Saludos y muchas gracias!
Left by Pablo on Feb 15, 2011 3:52 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
La linea 8 de la fn CalcularDigitoCuit lo correcto seria:

int[] mult = new int[] { 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 };

Saludos.
Left by Hernan on Oct 19, 2011 1:14 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Muchas gracias por compartir este código. Siempre es útil y necesario.

Saludos.
Left by Ramiro on Feb 01, 2012 12:56 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
replace ciut[10] for cuit.charAt(10) for IE compatibility
Left by Lucas Barros on Feb 23, 2012 1:00 PM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Gracias !
Left by Mariano on Apr 11, 2012 11:50 AM

# re: Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate
Requesting Gravatar...
Gracias, hoy me pidieron validar el cuil en un campo y esto me vino bárbaro.

Slds
Left by Lucas on Oct 24, 2017 6:39 PM

Your comment:
 (will show your gravatar)


Copyright © Ariel Popovsky | Powered by: GeeksWithBlogs.net