associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "VerificadorDeCnpjParaZope"

Diferenças entre as versões de 1 e 2
Revisão 1e 2007-12-10 11:27:52
Tamanho: 1648
Comentário:
Revisão 2e 2008-09-26 14:07:41
Tamanho: 1648
Editor: localhost
Comentário: converted to 1.6 markup
Nenhuma diferença encontrada!

Uma 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.

Este código roda no Zope.

   1 ## Script (Python) "valida_CNPJ"
   2 ##bind container=container
   3 ##bind context=context
   4 ##bind namespace=
   5 ##bind script=script
   6 ##bind subpath=traverse_subpath
   7 ##parameters=cnpj
   8 ##title=
   9 ##
  10 
  11 #Baseado nos códigos de Pedro Werneck e Michel Thadeu Sabchuk
  12 #http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCpf
  13 #http://www.pythonbrasil.com.br/moin.cgi/VerificadorDeCnpj
  14 #Adaptado para o Zope por Cleber J Santos
  15 
  16 cnpj = context.REQUEST.get('cnpj',None)
  17 cnpj_invalidos = [15*str(i) for i in range(10)]
  18 
  19 
  20 if not cnpj.isdigit():
  21     """ Verifica se o CPF contem pontos, hifens e Barras """
  22     cnpj = cnpj.replace(".", "")
  23     cnpj = cnpj.replace("-", "")
  24     cnpj = cnpj.replace("/", "")
  25 
  26 if (not cnpj) or (len(cnpj) < 14):
  27    return False
  28 
  29 elif cnpj in cnpj_invalidos:
  30    return False
  31 
  32 else:
  33    """ Pega apenas os 12 primeiros dígitos do CNPJ e gera os 2 dígitos que faltam """
  34    inteiros = map(int, cnpj)
  35    novoCnpj = inteiros[:12]
  36 
  37    prod = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
  38    while len(novoCnpj) < 14:
  39       r = sum([x*y for (x, y) in zip(novoCnpj, prod)]) % 11
  40       if r > 1:
  41          f = 11 - r
  42       else:
  43          f = 0
  44       novoCnpj.append(f)
  45       prod.insert(0, 6)
  46 
  47 
  48    """ Se o número gerado coincidir com o número original, é válido """
  49    if novoCnpj == inteiros:
  50       return bool(novoCnpj == inteiros)
  51    return False