2305
Comentário:
|
3175
|
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 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
Volta para CookBook.
Ruivaldo Neto, FelipeLessa (algumas alterações)