Skip to content. | Skip to navigation

Cleber J Santos

Sections
Personal tools
Document Actions

Verificador de CNPJ para Zope

Por admin em 03-01-2009 11:56

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.

img1.jpg

img2.jpg

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
Related content