Verificador de CNPJ para Zope
Que tal colocar um validador de CNPJ no seu site Zope/Plone?
Não é tão complicado como se parece, é claro que neste caso eu apenas fiz uma simples mistura do código do amigo Pedro Werneck em http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCpf e do amigo Michel Thadeu Sabchuk em http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCnpj, a idéia aqui é que você possa utilizar o validador diretamente na ZMI ao invés de ter que criar um External Method
isso é bom, pois existem provedores que não dão o acesso ao FileSytem, então vamos ao que nos interessa.
Bem, suponho que para estar criando um script em Python, você pelo menos sabe o que é a ZMI, então não vou ficar explicando como você deve acessá-la, então vamos lá, acesso a ZMI do seu Plone Site e vá direto para a pasta /portal_skins/custom, é aqui que iremos criar nosso script para poder acessá-lo de qualquer local de nosso site.Vamos chama-lo de cnpj_validator (Não é necessário colocar .py no final), vamos criar um script Python apenas, o intuito não é ficar explicando como funciona os validadores como (Controller Python Script, Controller Validator e etc...).
Ah, uma outra coisa, você notará que o script mencionado em http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCnpjParaZope é diferente, isso é para mostrar que para cada caso teremos um caso, no exemplo que vou mostrar preferi mudar ele, mas também já usei de forma totalmente diferente para outros sites.


Insira o conteúdo no nosso script Python:
isso é bom, pois existem provedores que não dão o acesso ao FileSytem, então vamos ao que nos interessa.Bem, suponho que para estar criando um script em Python, você pelo menos sabe o que é a ZMI, então não vou ficar explicando como você deve acessá-la, então vamos lá, acesso a ZMI do seu Plone Site e vá direto para a pasta /portal_skins/custom, é aqui que iremos criar nosso script para poder acessá-lo de qualquer local de nosso site.Vamos chama-lo de cnpj_validator (Não é necessário colocar .py no final), vamos criar um script Python apenas, o intuito não é ficar explicando como funciona os validadores como (Controller Python Script, Controller Validator e etc...).
Ah, uma outra coisa, você notará que o script mencionado em http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCnpjParaZope é diferente, isso é para mostrar que para cada caso teremos um caso, no exemplo que vou mostrar preferi mudar ele, mas também já usei de forma totalmente diferente para outros sites.


Insira o conteúdo no nosso script Python:
## Script (Python) "valida_CNPJ"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=cnpj,urlback
##title=
##
request = container.REQUEST
RESPONSE = request.RESPONSE
"""
Baseado nos códigos de Pedro Werneck e Michel Thadeu Sabchuk
http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCpf
http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCnpj
Adaptado para o Zope por Cleber J Santos
http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCnpjParaZope
"""
"""
Variável que irá guardar as mensagens de erro ou de acerto
"""
msg = {'msg':''}
cnpj = context.REQUEST.get('cnpj',None)
cnpj_invalidos = [15*str(i) for i in range(10)]
if not cnpj.isdigit():
""" Verifica se o CPF contem pontos, hifens e Barras """
cnpj = cnpj.replace(".", "")
cnpj = cnpj.replace("-", "")
cnpj = cnpj.replace("/", "")
if (not cnpj) or (len(cnpj) < 14):
msg['msg'] = 'CNPJ ERRADO'
request.set('msg',msg)
elif cnpj in cnpj_invalidos:
msg['msg'] = 'CNPJ ERRADO'
request.set('msg',msg)
else:
""" Pega apenas os 12 primeiros dígitos do CNPJ e gera os 2 dígitos que faltam """
inteiros = map(int, cnpj)
novoCnpj = inteiros[:12]
prod = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
while len(novoCnpj) < 14:
r = sum([x*y for (x, y) in zip(novoCnpj, prod)]) % 11
if r > 1:
f = 11 - r
else:
f = 0
novoCnpj.append(f)
prod.insert(0, 6)
""" Se o número gerado coincidir com o número original, é válido """
if novoCnpj == inteiros:
msg['msg'] = 'CNPJ CORRETO'
request.set('msg',msg)
else:
msg['msg'] = 'CNPJ ERRADO'
request.set('msg',msg)
return RESPONSE.redirect('%s/?msg=%s' %(urlback,request.msg['msg']))
[1]
2