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

Diferenças para "GeradorDeCpf"

Diferenças entre as versões de 5 e 6
Revisão 5e 2004-02-24 05:41:41
Tamanho: 3467
Editor: 200227116181-dial-user-ecp
Comentário:
Revisão 6e 2004-02-24 05:44:35
Tamanho: 3528
Editor: 200227116181-dial-user-ecp
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 131: Linha 131:
'' Valeu Felipe !, Abraços meu camagada -- ralobao '' '' Valeu Felipe !, Abraços meu camagada. Só pra consta tu testou o codigo após suas alterações ? -- ralobao ''

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     # Temos os holofotes em nós, somos a atração principal!
  92 
  93     message = "Bem-vindo ao Gerador de CPFs"
  94     print '\t%s\n' % message, '\t%s\n' % ('=' * len(message))
  95 
  96     user_response = raw_input('Ativar debug (responda "sim", "yes", "1" ou "true" para ativar)? ')
  97     if user_response.lower().strip() in ("sim", "yes", "1", "true"):
  98         DEBUG = True
  99 
 100     try:
 101         for i in xrange(int(raw_input('Quantos CPFs aleatórios devem ser gerados? '))):
 102             print cpf()
 103             if DEBUG:
 104                 # Deixa o visual mais limpo
 105                 print
 106     except ValueError, x:
 107         print 'Valor inválido ("%s")' % x

Exemplo de uso

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

Falta só alguém fazer um unittest entre este cookbook e o VerificadorDeCpf, esse aqui gerando um milhão de números e o outro checando. Hehehe. --FelipeLessa

Valeu Felipe !, Abraços meu camagada. Só pra consta tu testou o codigo após suas alterações ? -- ralobao

Volta para CookBook.


Ruivaldo Neto, FelipeLessa (algumas alterações)