3467
Comentário:
|
3528
|
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
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)