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

Diferenças para "GeradorDeCpf"

Diferenças entre as versões de 2 e 3
Revisão 2e 2004-02-24 02:29:01
Tamanho: 2305
Editor: 200227116225-dial-user-ecp
Comentário:
Revisão 3e 2004-02-24 04:58:25
Tamanho: 3175
Editor: FelipeLessa
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 4: Linha 4:
Programa para gerar CPF. Escrito por ralobao ( Kandalf ). Programa para gerar números de CPF aleatoriamente. Escrito por ralobao ( Kandalf ) e com alterações de FelipeLessa.
Linha 10: Linha 10:
#!/usr/bin/env python
Linha 11: Linha 12:
import math
Linha 13: Linha 13:
# Mude para True para incluir debug
DEBUG = False

def debug(*string):
    """ Imprime para stderr (simples). """

    # Eu sei que imports dentro de funções é feio,
    # mas é para tirar a carga do import no caso de eu não querer debug
    import sys

    print >> sys.stderr, string
Linha 15: Linha 26:
    """ Funcao para gerar um inteiro randomico entre 0 e 9 """
    return random.randint(1,9)
    
def mod(dividendo,divisor):
    """ Funcao pra retornar o resto da divisao de dois numeros """
    x = dividendo - (math.floor(dividendo/divisor)*divisor)
    return round(x)
    """ Funcao para gerar um inteiro aleatório entre 0 e n """
    return random.randint(1, n)
Linha 39: Linha 45:
    #print n1,n2,n3,n4,n5,n6,n7,n8,n9     DEBUG and debug(n1, n2, n3, n4, n5, n6, n7, n8, n9)
Linha 55: Linha 61:
    d1 = 11 - (mod(d1,11))     d1 = 11 - (d1 % 11)
Linha 57: Linha 63:
    # Caso d1 for maior que 10, o que nao pode ele sera igualado a 0
    if d1>=10:
    # Caso d1 seja maior que 10, o que não pode, ele deve ser igualado a 0
    if d1 >= 10:
Linha 62: Linha 68:
    #print n1,n2,n3,n4,n5,n6,n7,n8,n9     DEBUG and debug(a1, a2, a3, a4, a5, a6, a7, a8, a9, d1)
Linha 78: Linha 84:
    d2 = 11 - (mod(d2,11))     d2 = 11 - (d2 % 11)
Linha 85: Linha 91:
    #print n1,n2,n3,n4,n5,n6,n7,n8,n9     DEBUG and debug(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, d2)
Linha 88: Linha 94:
    # o esperado print final ... que magavilha
    return "%d%d%d%s%d%d%d%s%d%d%d%s%d%d" % (n1,n2,n3,'.',n4,n5,n6,'.',n7,n8,n9,'-',d1,d2)
    
print cpf()
    # o esperado print final ... que maravilha
    return "%d%d%d.%d%d%d.%d%d%d-%d%d" % (n1, n2, n3, n4, n5, n6, n7, n8, n9, d1, d2)
 


 if __name__ == '__main__':
    message = "Bem-vindo ao Gerador de CPFs"
    print '\t%s\n' % message, '\t%s\n' % ('=' * len(message))

    user_response = raw_input('Ativar debug (responda "sim", "yes", "1" ou "true" para ativar)? ')
    if user_response.lower().strip() in ("sim", "yes", "1", "true"):
        DEBUG = True

    try:
        for i in xrange(int(raw_input('Quantos CPFs aleatórios devem ser gerados? '))):
            print cpf()
            if DEBUG:
                # Deixa o visual mais limpo
                print
    except ValueError, x:
        print 'Valor inválido ("%s")' % x
Linha 98: Linha 121:
import sys
Linha 109: Linha 131:
Ruivaldo Neto Ruivaldo Neto,
FelipeLessa (algumas alterações)

Receita: Gerador de CPF

Programa para gerar números de CPF aleatoriamente. Escrito por ralobao ( Kandalf ) e com alterações de FelipeLessa.

Código

   1 #!/usr/bin/env python
   2 import random
   3 
   4 # Mude para True para incluir debug
   5 DEBUG = False
   6 
   7 def debug(*string):
   8     """ Imprime para stderr (simples). """
   9 
  10     # Eu sei que imports dentro de funções é feio, 
  11     # mas é para tirar a carga do import no caso de eu não querer debug
  12     import sys
  13 
  14     print >> sys.stderr, string
  15 
  16 def gera_random(n):
  17     """ Funcao para gerar um inteiro aleatório entre 0 e n """
  18     return random.randint(1, n)
  19 
  20 def cpf():
  21     """ Funcao pra gerar o bendito cpf """
  22     
  23     # Gera os numeros randonomicos ;)
  24     n = 9
  25     n1 = gera_random(n)
  26     n2 = gera_random(n)
  27     n3 = gera_random(n)
  28     n4 = gera_random(n)
  29     n5 = gera_random(n)
  30     n6 = gera_random(n)
  31     n7 = gera_random(n)
  32     n8 = gera_random(n)
  33     n9 = gera_random(n)
  34     
  35     # debugger purposes ;)
  36     DEBUG and debug(n1, n2, n3, n4, n5, n6, n7, n8, n9)
  37     
  38     # Contas e mais contas, dividir pra fica mais bonitinho
  39     a1 = n9 * 2
  40     a2 = n8 * 3
  41     a3 = n7 * 4
  42     a4 = n6 * 5 
  43     a5 = n5 * 6
  44     a6 = n4 * 7
  45     a7 = n3 * 8
  46     a8 = n2 * 9
  47     a9 = n1 * 10
  48     
  49     # Soma os resultados de todas as contas anteriores e faz 
  50     # outra continha.. tudo regra do cpf, para ele ser valido :P
  51     d1 = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9
  52     d1 = 11 - (d1 % 11)
  53     
  54     # Caso d1 seja maior que 10, o que não pode, ele deve ser igualado a 0
  55     if d1 >= 10:
  56         d1 = 0
  57     
  58     # debugger purposes
  59     DEBUG and debug(a1, a2, a3, a4, a5, a6, a7, a8, a9, d1)
  60     
  61     # Mesma coisa da de cima so que agora pra variavel d2
  62     a1 = d1 * 2
  63     a2 = n9 * 3
  64     a3 = n8 * 4
  65     a4 = n7 * 5
  66     a5 = n6 * 6
  67     a6 = n5 * 7
  68     a7 = n4 * 8
  69     a8 = n3 * 9
  70     a9 = n2 * 10
  71     a10 = n1 * 11
  72     
  73     # ... rola a barra de rolagem pra cima que tu vai entender :P
  74     d2 = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10
  75     d2 = 11 - (d2 % 11)
  76     
  77     # chega de repeticao de codigo :)
  78     if d2 >= 10:
  79         d2 = 0
  80     
  81     # debugger purposes
  82     DEBUG and debug(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, d2)
  83     
  84     
  85     # o esperado print final ... que maravilha
  86     return "%d%d%d.%d%d%d.%d%d%d-%d%d" % (n1, n2, n3,  n4, n5, n6,  n7, n8, n9,  d1, d2)
  87  
  88 
  89 
  90  if __name__ == '__main__':
  91     message = "Bem-vindo ao Gerador de CPFs"
  92     print '\t%s\n' % message, '\t%s\n' % ('=' * len(message))
  93 
  94     user_response = raw_input('Ativar debug (responda "sim", "yes", "1" ou "true" para ativar)? ')
  95     if user_response.lower().strip() in ("sim", "yes", "1", "true"):
  96         DEBUG = True
  97 
  98     try:
  99         for i in xrange(int(raw_input('Quantos CPFs aleatórios devem ser gerados? '))):
 100             print cpf()
 101             if DEBUG:
 102                 # Deixa o visual mais limpo
 103                 print
 104     except ValueError, x:
 105         print 'Valor inválido ("%s")' % x

Exemplo de uso

   1 # Exemplo de como usar
   2 import geradorcpf
   3 print geradorcpf.cpf()

Volta para CookBook.


Ruivaldo Neto, FelipeLessa (algumas alterações)