· 6 years ago · May 20, 2019, 05:12 PM
1import numpy
2import csv
3from faker import Faker
4import datetime
5from codicefiscale import build
6import random
7
8#Funzione in caso di Anagrafica Italiana
9def randomAnagraficaItaliana(fileNomi, fileCognomi):
10 with open(fileNomi, 'r') as csvfileNomi:
11 r = csv.reader(csvfileNomi)
12 n = numpy.random.choice(numpy.arange(0, 98))
13 if n < 50:
14 sex = "M"
15 else:
16 sex = "F"
17 for i in range(n):
18 next(r)
19 nome = next(r)
20
21 with open(fileCognomi, 'r') as csvfileCognomi:
22 r = csv.reader(csvfileCognomi)
23 n = numpy.random.choice(numpy.arange(0, 98))
24 for i in range(n):
25 next(r)
26 cognome = next(r)
27
28 fake = Faker()
29 dataNascita = fake.date_between(start_date='-1y', end_date="now")
30 giorno = dataNascita.day
31 mese = dataNascita.month
32 anno = numpy.random.choice(numpy.arange(1960, 2002))
33 dataNascita = [anno, mese, giorno]
34
35 ncode = numpy.random.choice(numpy.arange(19))
36 codeList = ['A271', 'A326', 'A345', 'A662', 'A944','B354','B519','C352','D612','D969','F205','F839','G273','G478','G942','H501','L219','L378','L424','L736']
37 code = codeList[ncode]
38 cf = build(nome[0], cognome[0], datetime.datetime(anno, mese, giorno), sex, code)
39
40 email = nome[0] + cognome[0].replace("'", '').replace(" ", '') + str(anno)[-2:] + '@gmail.com'
41
42 n = '0000000000'
43 while '9' in n[3:6] or n[3:6]=='000' or n[6]==n[7]==n[8]==n[9]:
44 n = str(random.randint(10**9, 10**10-1))
45 tel1 = n[:3] + n[3:6] + n[6:]
46
47 n = '0000000000'
48 while '9' in n[3:6] or n[3:6]=='000' or n[6]==n[7]==n[8]==n[9]:
49 n = str(random.randint(10**9, 10**10-1))
50 telfisso = n[:3] + '-'+ n[3:6] + n[6:]
51
52 return(nome[0],cognome[0], dataNascita, cf, email, 'Italia', tel1, telfisso)
53
54#Funzione per l'anagrafica estera
55def randomAnagraficaEstera(fileNomi, fileCognomi, nState):
56 stateList = ['Francia', 'Inghilterra', 'Germania', 'Grecia', 'Svizzera', 'Albania', 'Austria', 'Spagna']
57 rangeNomi = nState * 10
58
59 with open(fileNomi, 'r') as csvfileNomi:
60 r = csv.reader(csvfileNomi)
61 n = numpy.random.choice(numpy.arange(rangeNomi, rangeNomi+10))
62 for i in range(n):
63 next(r)
64 nome = next(r)
65
66 with open(fileCognomi, 'r') as csvfileCognomi:
67 r = csv.reader(csvfileCognomi)
68 n = numpy.random.choice(numpy.arange(0, 98))
69 for i in range(n):
70 next(r)
71 cognome = next(r)
72
73 fake = Faker()
74 dataNascita = fake.date_between(start_date='-1y', end_date="now")
75 giorno = dataNascita.day
76 mese = dataNascita.month
77 anno = numpy.random.choice(numpy.arange(1960, 2002))
78 dataNascita = [anno, mese, giorno]
79
80 email = nome[0] + cognome[0].replace("'", '').replace(" ", '') + str(anno)[-2:] + '@gmail.com'
81
82 n = '0000000000'
83 while '9' in n[3:6] or n[3:6]=='000' or n[6]==n[7]==n[8]==n[9]:
84 n = str(random.randint(10**9, 10**10-1))
85 tel1 = n[:3] + n[3:6] + n[6:]
86
87 n = '0000000000'
88 while '9' in n[3:6] or n[3:6]=='000' or n[6]==n[7]==n[8]==n[9]:
89 n = str(random.randint(10**9, 10**10-1))
90 telfisso = n[:3] + '-'+ n[3:6] + n[6:]
91
92 return(nome[0],cognome[0], dataNascita, "NULL", email, stateList[nState], tel1, telfisso)
93
94#Funzione che decide se generare uno straniero o un italiano:
95def randomAnagrafica():
96 n = numpy.random.choice(numpy.arange(1, 9), p = [0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.72])
97 if n == 8:
98 return randomAnagraficaItaliana('nomi.csv','cognomi.csv')
99 else:
100 return randomAnagraficaEstera('nomiEsteri.csv','cognomiEsteri.csv', n-1)
101
102#Main
103for i in range(10):
104 print(randomAnagrafica())