Validador de CUIT en web2py


La Cuit es La Clave Única de Identificación Tributaria (CUIT) es una clave que se utiliza en el sistema tributario de la República Argentina para poder identificar inequívocamente a las personas físicas o jurídicas autónomas, susceptibles de tributar. Las claves son asignadas por la Administración Federal de Ingresos Públicos (AFIP), para poder confeccionar el registro o censo de las mismas, para efectos administrativos y tributarios.[0]

En mi caso particular necesitaba un validador para web2py que evitara el ingreso de CUITs erróneos. Usando parte del código que aparece en la wikipedia y otro poco mas de la documentación de web2py programé el siguiente validador:

# coding: utf8
#from gluon.validators import Validator
class ES_CUIT(object):
    """
    Chequea si el valor ingresado es un CUIT Válido.

    Args:
        Ninguno

    Examples:
        Chequear si el siguiente valor es un cuit válido:
        Field("Cuit", requires=ES_CUIT())
    """
    def __init__(self, error_message="CUIT inválido. Formato 12-12345678-12"):
        self.error_message = error_message

    def __call__(self, cuit):
        cuitentero=cuit
        error = None
        # validaciones minimas
        if len(cuit) != 13 or cuit[2] != "-" or cuit[11] != "-": return (cuit,self.error_message)

        base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]

        cuit = cuit.replace("-", "") # remuevo las barras

        # calculo el digito verificador:
        aux = 0
        for i in xrange(10):
            aux += int(cuit[i]) * base[i]

        aux = 11 - (aux - (int(aux / 11) * 11))

        if aux == 11:
            aux = 0
        if aux == 10:
            aux = 9
        comprobacion=aux==int(cuit[10])
        if comprobacion == False: return(cuitentero,self.error_message)
        if comprobacion == True: return(cuitentero,None)

¿Cómo se utiliza un validador?
Dentro de la carpeta modules se crea el archivo validators.py y en el mismo se van agregando los distintos validadores personalizados. Luego se importan los validadores al inicio del archivo db.py.

from validators import *

Para usarlo en un campo se debería agregar en requires, por ejemplo.

    Field("Cuit", requires=ES_CUIT()),

¡Y listo el pollo!
[0] https://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Identificaci%C3%B3n_Tributaria

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s