Validar un CUIT/CUIL con C#, Javascript y JQuery.Validate

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: ///

2: /// Calcula el dígito verificador dado un CUIT completo o sin él.

3: ///

4: /// El CUIT como String sin guiones

5: /// El valor del dígito verificador calculado.

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: ///

2: /// Valida el CUIT ingresado.

3: ///

4: /// Número de CUIT como string con o sin guiones

5: /// True si el CUIT es válido y False si no.

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:

Espero que a alguien le sea útil.

This article is part of the GWB Archives. Original Author: Ariel Popovsky

New on Geeks with Blogs