Gerador de Dados Pessoais

Eu sempre vejo geradores de todo tipo de coisa poraí, mas quando voce precisa fazer cadastros imbecis em sites aleatórios, sempre tem aquele delay mental para criar dados fakes(afinal, voce nao vai sair dando suas informacoes pessoals para todo lugar na internet ne?). Assim sendo, baseando-me num gerador gringo, fiz uma versão nacional do Gerador de Dados Pessoais.

from random import randint,uniform
from string import lower,upper
from math import sqrt
alfanum = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
email = ['yahoo.com.br', 'hotmail.com', 'gmail.com', 'bol.com.br', 'terra.com.br', 'globo.com', 'ig.com.br']
emailsep = ['.','','_','-']
empregos = [['professor', 'motorista', 'gari', 'mecanico', 'engenheiro', 'advogado', 'desempregado', 'medico', 'empresario', 'enfermeiro', 'vendedor', 'bancario', 'estudante', 'taxista', 'gerente de vendas', 'cozinheiro', 'gogo-boy', 'programador', 'politico', 'animador', 'digitador'] , ['professora', 'motorista', 'gari', 'domestica', 'engenheira', 'advogada', 'desempregada', 'medica', 'empresaria', 'enfermeira', 'vendedora', 'bancaria', 'estudante', 'taxista', 'gerente de vendas', 'cozinheira', 'jornalista', 'prostituta', 'politica', 'animadora', 'digitadora']]
nomes = [['JOAO', 'LUCAS', 'GABRIEL', 'MATHEUS', 'PEDRO', 'LUIZ', 'JOSE', 'GUILHERME', 'CARLOS', 'RAFAEL', 'FELIPE', 'BRUNO', 'GUSTAVO', 'PAULO', 'MARCOS', 'LEONARDO', 'VINICIUS', 'DANIEL', 'LUIS', 'THIAGO', 'MATIAS', 'RICARDO', 'ALFREDO', 'ALESSANDRO'], ['MARIA', 'ANA', 'JULIA', 'LETICIA', 'LARISSA', 'BEATRIZ', 'JESSICA', 'BRUNA', 'AMANDA', 'GABRIELA', 'LUANA', 'SAMANTA', 'MAYARA', 'SAMARA', 'JAQUELINE', 'RACHEL', 'RAQUEL', 'LUCIA', 'DENISE', 'DANIELA', 'ERICA']]
sobrenomes = ['ABREU', 'ALVES', 'ALBINO', 'ALMEIDA', 'AMARAL', 'ARAUJO', 'ANDRADE', 'ANTUNES', 'AZEVEDO', 'ASSIS', 'BARRETO', 'BARROS', 'BAHR', 'BATISTA', 'BENTO', 'BRASIL', 'BRAGA', 'BRITO', 'CAMARGO', 'CAMPOS', 'CARDOSO', 'CANDIDO', 'CARVALHO', 'CASTRO', 'CHAGAS', 'COELHO', 'CORREIA', 'DUTRA', 'FAGUNDES', 'FERNANDES', 'FRAGA', 'FRANCA', 'FREITAS', 'JUSTINO', 'LEAL', 'LEITE', 'LIMA', 'LINHARES', 'LOPES', 'MACHADO', 'MACEDO', 'MACIEL', 'MARTINS', 'MATOS', 'MARQUES', 'MEDEIROS', 'MIRANDA', 'MORAES', 'MONTEIRO', 'NASCIMENTO', 'NEVES', 'OLIVEIRA', 'ONOFRE', 'PACHECO', 'PADILHA', 'PAIVA', 'PEREIRA', 'PESSOA', 'PINHO', 'PINTO', 'PIRES', 'PRADO', 'RABELO', 'RAMOS', 'RIBEIRO', 'ROCHA', 'RODRIGUES', 'ROSA', 'SALES', 'SABINO', 'SANTOS', 'SILVA', 'SILVEIRA', 'SOARES', 'TEIXEIRA', 'VARGAS', 'VASCONCELOS', 'VIEIRA', 'XAVIER']
sexo = ['M','F']
sangueT = ['A','B','AB','O']
sangueF = ['+','-']
logradouro = ['RUA','AVENIDA','TRAVESSA','ALAMEDA','PRACA']
ruas = ['PROFESSOR','DOUTOR','MAJOR','TIPOGRAFO','','DESEMBARGADOR','SARGENTO']
slDDD=['68', '82', '96', '92', '97', '71', '73', '74', '75', '77', '85', '88', '61', '27', '28', '62', '64', '98', '99', '65', '66', '67', '31', '32', '33', '34', '35', '37', '38', '91', '93', '94', '83', '41', '42', '43', '44', '45', '46', '81', '87', '86', '89', '21', '22', '24', '24', '84', '51', '53', '54', '55', '69', '95', '47', '48', '49', '11', '12', '13', '14', '15', '16', '17', '18', '19', '79', '63']
lsDDD= {  '68': ['AC','Rio Branco'],  '82': ['AL','Maceio'],  '96': ['AP','Macapa'],  '92': ['AM','Manaus'],  '97': ['AM','Interior'],  '71': ['BA','Salvador'],  '73': ['BA','Ilheus'],  '74': ['BA','Juazeiro'],  '75': ['BA','Feira de Santana'],  '77': ['BA','Vitoria da Conquista'],  '85': ['CE','Fortaleza'],  '88': ['CE','Interior'],  '61': ['DF','Brasilia'],  '27': ['ES','Vitoria'],  '28': ['ES','Interior'],  '62': ['GO','Goiania'],  '64': ['GO','Interior'],  '98': ['MA','Sao Luis'],  '99': ['MA','Interior'],  '65': ['MT','Cuiaba'],  '66': ['MT','Interior'],  '67': ['MA','Campo Grande'],  '31': ['MG','Belo Horizonte'],  '32': ['MG','Juiz de Fora'],  '33': ['MG','Gov Valadares'],  '34': ['MG','Uberlandia'],  '35': ['MG','P. de Caldas'],  '37': ['MG','Divinopolis'],  '38': ['MG','Montes Claros'],  '91': ['PA','Belem'],  '93': ['PA','Santarem'],  '94': ['PA','Maraba'],  '83': ['PB','Joao Pessoa'],  '41': ['PR','Curitiba'],  '42': ['PR','Ponta Grossa'],  '43': ['PR','Londrina'],  '44': ['PR','Maringa'],  '45': ['PR','Foz do Iguacu'],  '46': ['PR','Fco Beltrao'],  '81': ['PE','Recife'],  '87': ['PE','Interior'],  '86': ['PI','Teresina'],  '89': ['PI','Interior'],  '21': ['RJ','Rio de Janeiro'],  '22': ['RJ','C. dos Goytacazes'],  '24': ['RJ','Volta Redonda'],  '24': ['RJ','Petropolis'],  '84': ['RN','Natal'],  '51': ['RS','Porto Alegre'],  '53': ['RS','Pelotas'],  '54': ['RS','Caxias do Sul'],  '55': ['RS','Santa Maria'],  '69': ['RO','Porto Velho'],  '95': ['RR','Boa Vista'],  '47': ['SC','Joinville'],  '48': ['SC','Florianopolis'],  '49': ['SC','Chapeco'],  '11': ['SP','Sao Paulo'],  '12': ['SP','Sao Jose dos Campos'],  '13': ['SP','Santos'],  '14': ['SP','Bauru'],  '15': ['SP','Sorocaba'],  '16': ['SP','Ribeirao Preto'],  '17': ['SP','Sao Jose do Rio Preto'],  '18': ['SP','Presidente Prudente'],  '19': ['SP','Campinas'],  '79': ['SE','Aracaju'],  '63': ['TO','Palmas'],}
def calcCPF(num):
  somatorio = 0
  qtde = (len(num)+1)
  for i in xrange(qtde-1):
    somatorio += (num[i]*(qtde-i))
  resto = 11-(somatorio % 11)
  if resto < 10: return resto
  return 0

def getCPF():
  n = [randint(0,9) for i in xrange(9)]
  n.append(calcCPF(n))
  n.append(calcCPF(n))
  n.insert(3,'.')
  n.insert(7,'.')
  n.insert(11,'-')
  mm = ''.join([str(n[j]) for j in xrange(14)])
  return mm

def calcCC(num):
  somatorio = 0
  for i in range(len(num)):
    if ((i+1)%2==0):
      somatorio+=num[i]
    else:
      if ((num[i]*2)>9): somatorio += (2*num[i]-9)
      else: somatorio += (2*num[i])
  if ((somatorio%10)==0): return 0
  else: return (10-(somatorio%10))

def getCC():
  n = [randint(0,9) for i in xrange(15)]
  n[0] = randint(3,6)
  n.append(calcCC(n))
  n.insert(4,'.')
  n.insert(9,'.')
  n.insert(14,'.')
  mm = ''.join([str(n[j]) for j in xrange(19)])
  return mm

genero = randint(0,1)
ddd=slDDD[randint(0,len(slDDD)-1)]
nomec = '%s %s' % ( ' '.join([nomes[genero][randint(0 ,len(nomes[genero])-1)] for k in xrange(randint(1,2))]) , ' '.join([sobrenomes[randint(0,len(sobrenomes)-1)] for k in xrange(randint(1,3))]) )
print nomec
print '%s %s %s %s, %s' % ( logradouro[randint(0,len(logradouro)-1)],ruas[randint(0,len(ruas)-1)],nomes[0][randint(0,len(nomes[0])-1)],sobrenomes[randint(0,len(sobrenomes)-1)], str(randint(1,999)) )
cep = [str(randint(0,9)) for k in xrange(8)]
cep.insert(2,'.')
cep.insert(6,'-')
print '%s, %s, %s' % (upper(lsDDD[ddd][1]),lsDDD[ddd][0],''.join(cep))
print '\tTelefone: (%s)%s-%s' % (ddd,''.join([str(randint(0,9)) for k in xrange(4)]),''.join([str(randint(0,9)) for k in xrange(4)]))
print '\tSexo: %s' % sexo[genero]
print '\tCPF: %s' % getCPF()

def genrg():
  rg = [randint(0,9) for i in range(8)]
  soma = sum([(2+i)*rg[i] for i in range(8)])
  rg = ''.join([str(x) for x in rg])
  for dv in range(10):
    if (soma + dv*100) % 11 == 0:
      break
  return rg + str(dv)

print '\tRG: %s SSP %s' % (genrg(),lsDDD[ddd][0])
print '\tData de Nascimento: %s/%s/%s' % (randint(1,30),randint(1,12),randint(1960,1999))
print '\tMae: %s %s' % ( ' '.join([nomes[1][randint(0 ,len(nomes[1])-1)] for k in xrange(randint(1,2))]) , ' '.join([sobrenomes[randint(0,len(sobrenomes)-1)] for k in xrange(randint(1,3))]) )
print '\tSangue: %s%s' % (sangueT[randint(0,len(sangueT)-1)],sangueF[randint(0,1)])
zimeiu = nomec.split(' ')
zumeiu = '%s%s%s@%s' % (zimeiu[0],emailsep[randint(0,len(emailsep)-1)],''.join([zimeiu[k][0] for k in range(1,len(zimeiu))]),email[randint(0,len(email)-1)])
zumeiu=lower(zumeiu)
print '\tEmail: %s' % zumeiu
print '\tSenha: %s' % ''.join([alfanum[randint(0,len(alfanum)-1)] for k in xrange(randint(4,11))])
print '\tCartao de Credito: %s' % getCC()
print '\tcvv: %s' % str(randint(100,999))
imc = uniform(19,29)
peso = uniform(42,89)
altura = sqrt(peso/imc)
print '\tpeso: %.2f kg' % peso
print '\taltura: %.2f m' % altura
print '\tEmprego: %s' % empregos[genero][randint(0,len(empregos[0])-1)]

É bem divertido(e nada útil LOL) e várias vezes esbarrei em gente que realmente existe.
Exemplo de saida:

$ python g.py
PEDRO RODRIGUES ANDRADE
AVENIDA DESEMBARGADOR PAULO ALVES, 472
PONTA GROSSA, PR, 54.663-607
	Telefone: (42)9322-7623
	Sexo: M
	CPF: 045.952.937-47
	RG: 387979311 SSP PR
	Data de Nascimento: 25/29/1970
	Mae: GABRIELA JAQUELINE ASSIS CARVALHO ARAUJO
	Sangue: AB+
	Email: pedro-ra@terra.com.br
	Senha: FviqKAxZgP
	Cartao de Credito: 6233.8988.3744.8953
	cvv: 240
	peso: 76.88 kg
	altura: 1.87 m
	Emprego: cozinheiro 

P.S.: Todos os dados são aleatórios, incluindo numeros de CPF, CC e Telefone, eles apenas sao formatados e validados para o padrão correto, podem até existir, mas nao estão definidos em local algum do script.
P.P.S.: O calculo de validação do RG é o do estado de Sao Paulo pois foi o único cuja descrição foi encontrada(Do Ceará, parece ser sequencial com o ano no início).

o/

11 comments

  1. O número do documento de identidade do estado do Rio Grande do Sul (SSP-RS) é composto por 10 posições, sendo o segundo número SEMPRE ZERO.

    Ademais, congratulações pelo excelente código.

  2. Rolou um CTRL+C, CTRL+V na hora de vc fazer o código. Veja linha 80 e ajuste o mês para obter o range de 1 a 12

    print ‘\tData de Nascimento: %s/%s/%s’ % (randint(1,30),randint(1,12),randint(1960,1999))

  3. Interessante,

    Eu escrevi um artigo para o iMasters com algumas bases de dados que talvez possam ajudar quem precisa de dados de exemplo, principalmente nomes. O link:

    http://imasters.com.br/artigo/3817/sql_server/cadastros_simples/

    Também publiquei um artigo na revista SQL Magazine que mostra como utilizar algumas ferramentas de geração de dados de código livre:

    http://www.devmedia.com.br/post-18937-Criando-uma-base-de-dados-de-teste.html

    Mauro Pichiliani

    1. Opa Mauro, muito interessante suas bases e realmente, integra-las ao gerador o tornaria muito próximo da realidade.
      Agradeço a sua cintribuição.
      Abraços.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s