Por necessidade, criei um validator para ser usado no Web2py:
class IS_CPF(object):
def __init__(self, format=True, error_message='Digite apenas os números!'):
self.format = format
self.error_message = error_message
def __call__(self, value):
def valida(value):
def calcdv(numb):
result = int()
seq = reversed(((range(9, id_type[1], -1)*2)[:len(numb)]))
#return (value,'to fundo1')
for digit, base in zip(numb, seq):
result += int(digit)*int(base)
dv = result % 11
#return (value,'to fundo1'+str(dv))
return (dv-10) and dv or 0
id_type = ['CPF', -1]
numb, xdv = value[:-2], value[-2:]
dv1 = calcdv(numb)
#return (value,'entrei'+str(dv1))
dv2 = calcdv(numb + str(dv1))
return (('%d%d' % (dv1, dv2) == xdv and True or False), id_type[0])
try:
cpf=str(value)
#return(cpf,'aquiok'+str(len(cpf)==11))
if len(cpf)>=11:
#return (value, 'cpf acima de 11')
c = []
for d in cpf:
if d.isdigit():
c.append(d)
cl = str(''.join(c))
#return (value, 'cpf incorreto'+str(cl))
if len(cl) == 11:
if valida(cl)[0] == True:
return(value,None)
else:
return (value, 'cpf inválido')
elif len(cl) < 11:
return (value, 'cpf incompleto')
else:
return (value, 'cpf tem mais de 11 dígitos')
if cpf[3] != '.' or cpf[7] != '.' or cpf[11] != '-' :
return (value, 'cpf deve estar no formato 000.000.000-00'+cpf[11])
else:
return (value, 'cpf deve estar no formato 000.000.000-00')
#return(cpf,'aquiok'+str(len(cpf)==11))
except:
return (value, 'algum erro'+str(value))
def formatter(self, value):
formatado = value[0:3]+'.'+value[3:6]+'.'+value[6:9]+'-'+value[9:11]
#formatado = value
return formatado
--
Atenciosamente
--
=========================
Alexandre Andrade
Hipercenter.com
Nenhum comentário:
Postar um comentário