#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
//dichiarazione costanti simboliche
//costanti simboliche per la funzione "genera_account"
#define MASSIMO_ACCOUNT 2
#define LUNGHEZZA_CARATTERI 15
#define LUNGHEZZA_INDIRIZZO 25
#define LUNGHEZZA_EMAIL 40
#define LUNGHEZZA_PASSWORD 8
#define NUMERO_NOMI 12
#define NUMERO_COGNOMI 12
#define NUMERO_INDIRIZZO 12
#define NUMERO_DOMINI 7
#define GIORNO_MIN 1
#define GIORNO_MAX 31
#define MESE_MIN 1
#define MESE_MAX 12
#define ANNO_MIN 1950
#define ANNO_MAX 2019
//costanti simboliche per la funzione "generapassword"
#define CARATTERI_PASSWORD_SICURA 5
#define CARATTERI_PASSWORD_MENO_SICURA 3
#define CARATTERI_PASSWORD_NON_SICURA 5
// dichiarazioni delle struct
//dichiarazione struct data
typedef struct {
int giorno;
int mese;
int anno;
}data;
//dichiarazione struct data
typedef struct {
char nome[LUNGHEZZA_CARATTERI];
char cognome[LUNGHEZZA_CARATTERI];
char indirizzo[LUNGHEZZA_INDIRIZZO];
char email[LUNGHEZZA_EMAIL];
data data_nascita;
int password;
}account;
//funzioni
void genera_account(account accounts[]);
void genera_password(account accounts[]);
void genera_account1(account accounts[]);
int main(void) {
account accounts[MASSIMO_ACCOUNT];
genera_account(accounts);
genera_password(accounts);
genera_account1(accounts);
return 0;
}
void genera_account(account accounts[]){
int seed = (time(NULL));
srand(seed);
int i=0;
int indice = 0;
char* nomi [] = {"ALESSANDRO", "GIACOMO", "ALESSIO", "ANTONIO", "CARLO", "FABIO", "ALESSANDRA", "GIACOMA", "ALESSIA", "ANTONIA", "CARLA", "FABIA"};
char* cognomi [] = {"ROSSI", "BIANCHI", "NEGRO", "RIZZI", "CAMPESE", "IODICE", "ROSSIA", "BIANCHIA", "NEGROA", "RIZZIA", "CAMPESEA", "IODICEA"};
char* indirizzo [] = {"VIA ALDO MORO", "CORSO VITTORIO EMANUELE", "PIAZZA CADUTI IN GUERRA", "PIAZZA CASTELLO", "VIA CANOSA", "LARGO REGINA ELENA", "PIAZZA F.LLI CERVI", "VIA FIERAMOSCA", "VIA GOITO", "VIA IZZI", "CORSO AMENDOLA", "VIA ROMA"};
char* email[] = {"@gmail.com", "@gmail.it", "@hotmail.it", "@hotmail.it", "@aruba.it", "@aruba.com", "@libero.it"};
// RANDOM NOMI
for (i=0; i<MASSIMO_ACCOUNT; i++){
indice = 0;
indice = rand () % NUMERO_NOMI;
strcpy(accounts[i].nome, nomi[indice]);
indice = 0;
indice = rand () % NUMERO_COGNOMI;
strcpy(accounts[i].cognome, cognomi[indice]);
indice = 0;
indice = rand () % NUMERO_INDIRIZZO;
strcpy(accounts[i].indirizzo, indirizzo[indice]);
indice = 0;
indice = rand () % NUMERO_DOMINI;
strcat(accounts[i].email, accounts[i].nome);
strcat(accounts[i].email, accounts[i].cognome);
strcat(accounts[i].email, email[indice]);
//generazione controllo anno bistestile
accounts[i].data_nascita.anno = rand () % (2019 - 1950) + 1950;
accounts[i].data_nascita.mese = rand () % (12 - 01) + 01;
if(accounts[i].data_nascita.mese < 10){
}
if (accounts[i].data_nascita.mese==2 && accounts[i].data_nascita.anno%400==0 || (accounts[i].data_nascita.anno%4==0 &&!(accounts[i].data_nascita.anno%100==0))){
accounts[i].data_nascita.giorno = rand () % (29 - 01) + 01;
}
else if (accounts[i].data_nascita.mese==2){
accounts[i].data_nascita.giorno = rand () % (28 - 01) + 01;
}
else if (accounts[i].data_nascita.mese==1 || accounts[i].data_nascita.mese==3 || accounts[i].data_nascita.mese==5 || accounts[i].data_nascita.mese==7 || accounts[i].data_nascita.mese==8 || accounts[i].data_nascita.mese==10){
accounts[i].data_nascita.giorno = rand () % (31 - 01) + 01;
}
else {
accounts[i].data_nascita.giorno = rand () % (30 - 01) + 01;
}
//stampa
printf("Nome: \t\t%s\t\n", accounts[i].nome);
printf("COGNOME: \t%s\n", accounts[i].cognome);
printf("INDIRIZZO: \t%s\n", accounts[i].indirizzo);
printf("INDIRIZZO EMAIL: \t%s\n", accounts[i].email);
printf("DATA DI NASCITA: ");
if(accounts[i].data_nascita.giorno < 10){
printf("\t0%d\\", accounts[i].data_nascita.giorno);
}else
{
printf("\t%d\\", accounts[i].data_nascita.giorno);
}
if(accounts[i].data_nascita.mese < 10){
printf("0%d\\", accounts[i].data_nascita.mese);
}else
{
printf("%d\\", accounts[i].data_nascita.mese < 10);
}
printf("%d\n", accounts[i].data_nascita.anno);
//printf("DATA DI NASCITA: \t%d\\%d\\%d\n", accounts[i].data_nascita.giorno, accounts[i].data_nascita.mese, accounts[i].data_nascita.anno);
puts("***************************************************");
}
}
void genera_password(account accounts[]){
bool passwCorretta = false; //fin quando la password inserita non rispetta i requisiti rimane false
int i=0;
//int random = 0; //utilizzata per generazione password automatica
char menu_scelta[2]; //scelta utente inserimento automatico o manuale
char menu_scelta_sicurezza_password[2]; //scelta utente livello complessità
//Per ogni account chiede all’utente se vuole generare la password in automatico
//o se vuole inserirla a mano
for (i = 0; i < MASSIMO_ACCOUNT; i++) {
char password[LUNGHEZZA_PASSWORD];
passwCorretta = false;
puts("**INSERIMENTO PASSWORD**");
puts("\nSCEGLIERE LA MODALITA' DI INSERIMENTO DELLA PASSWORD\n");
//controllo input utente
//non esce dal ciclo fin quando l'utente non inserisce 1 o 2
do{
printf("1) GENERAZIONE AUTOMATICA DELLA PASSWORD\n");
printf("2) INSERIMENTO DELLA PASSWORD\n");
printf("l'opzione desiderata e' la: ");
scanf("%s", menu_scelta);
}while(strcmp(menu_scelta,"1") && strcmp(menu_scelta,"2"));
if (strcmp(menu_scelta,"1") == 0) { //inserimento automatico
do{
printf("\nSelezionare il livello di complessita'\n");
printf("1) Poco sicura (la password è composta da meno di 3 caratteri sia numerici sia simboli\n");
printf("2) Mediamente sicura\n(la password è composta dai 3 ai 5 caratteri sia numerici sia simboli\n");
printf("3) Sicura\n(la password è composta da almeno 5 caratteri sia numerici sia simboli\n");
puts("SELEZIONA IL TIPO DI PASSWORD DESIDERATA: ");
scanf("%s", menu_scelta_sicurezza_password);
}while(strcmp(menu_scelta_sicurezza_password,"1") && strcmp(menu_scelta_sicurezza_password,"2") && strcmp(menu_scelta_sicurezza_password,"3"));
printf("Password generata: ");
if(strcmp(menu_scelta_sicurezza_password,"1") == 0){
bool password_con_requisiti = false;
int i=0;
do{
int caratteri_numerici = 0;
int caratteri_speciali = 0;
int somma_caratteri_numerici_speciali = 0;
for(i=0; i<LUNGHEZZA_PASSWORD; i++){
bool password_corretta = false;
do {
accounts[i].password = '!' + rand() % 'z';
if ((accounts[i].password >= '!' && accounts[i].password < '&')
|| (accounts[i].password >= '0' && accounts[i].password <= '9')
|| (accounts[i].password >= 'a' && accounts[i].password <= 'z')
|| (accounts[i].password >= 'A' && accounts[i].password <= 'Z'))
password_corretta = true;
}while(!password_corretta);
}
for(i=0; i<LUNGHEZZA_PASSWORD;i++){
if (isdigit(accounts[i].password)) {
caratteri_numerici++;
somma_caratteri_numerici_speciali++;
} else if (ispunct(accounts[i].password)) {
caratteri_speciali++;
somma_caratteri_numerici_speciali++;
}
}
if ((somma_caratteri_numerici_speciali <= 2)) {
for(i=0; i<LUNGHEZZA_PASSWORD;i++){
printf("%c", accounts[i].password);
}
printf("\n");
password_con_requisiti = true;
}
}while(!password_con_requisiti);
} else if(strcmp(menu_scelta_sicurezza_password,"2") == 0){
bool password_con_requisiti = false;
int i=0;
do{
int caratteri_numerici = 0;
int caratteri_speciali = 0;
int somma_caratteri_numerici_speciali = 0;
for(i=0; i<LUNGHEZZA_PASSWORD; i++){
bool password_corretta = false;
do {
accounts[i].password = '!' + rand() % 'z';
if ((accounts[i].password >= '!' && accounts[i].password < '&')
|| (accounts[i].password >= '0' && accounts[i].password <= '9')
|| (accounts[i].password >= 'a' && accounts[i].password <= 'z')
|| (accounts[i].password >= 'A' && accounts[i].password <= 'Z'))
password_corretta = true;
}while(!password_corretta);
}
for(i=0; i<LUNGHEZZA_PASSWORD;i++){
if (isdigit(accounts[i].password)) {
caratteri_numerici++;
somma_caratteri_numerici_speciali++;
} else if (ispunct(accounts[i].password)) {
caratteri_speciali++;
somma_caratteri_numerici_speciali++;
}
}
if ((somma_caratteri_numerici_speciali >=3) && (somma_caratteri_numerici_speciali <=4)) {
for(i=0; i<LUNGHEZZA_PASSWORD;i++){
printf("%c", accounts[i].password);
}
printf("\n");
password_con_requisiti = true;
}
}while(!password_con_requisiti);
}else if (strcmp(menu_scelta_sicurezza_password,"3") == 0){
bool password_con_requisiti = false;
int i, k=0;
do{
int caratteri_numerici = 0;
int caratteri_speciali = 0;
int somma_caratteri_numerici_speciali = 0;
for(i=0; i<LUNGHEZZA_PASSWORD; i++){
bool password_corretta = false;
do {
accounts[i].password = '!' + rand() % 'z';
if ((accounts[i].password >= '!' && accounts[i].password < '&')
|| (accounts[i].password >= '0' && accounts[i].password <= '9')
|| (accounts[i].password >= 'a' && accounts[i].password <= 'z')
|| (accounts[i].password >= 'A' && accounts[i].password <= 'Z'))
password_corretta = true;
}while(!password_corretta);
}
for(i=0; i<LUNGHEZZA_PASSWORD;i++){
if (isdigit(accounts[i].password)) {
caratteri_numerici++;
somma_caratteri_numerici_speciali++;
} else if (ispunct(accounts[i].password)) {
caratteri_speciali++;
somma_caratteri_numerici_speciali++;
}
}
if (somma_caratteri_numerici_speciali >= CARATTERI_PASSWORD_SICURA) {
for(i=0; i<LUNGHEZZA_PASSWORD;i++){
//accounts[i].password = password[i];
printf("%c", accounts[i].password);
}
printf("\n");
password_con_requisiti = true;
}
}while(!password_con_requisiti);
}
} else if (strcmp(menu_scelta,"2") == 0) { //inserimento a mano
char password[LUNGHEZZA_PASSWORD];
int caratteri_numerici = 0;
int caratteri_speciali = 0;
bool password_corretta = false; //bool
int lunghezza_password=0;
int i =0;
do{
printf("Inserisci la password: ");
scanf("%s", password);
lunghezza_password = strlen(password);
if (lunghezza_password == 8) {
for (i = 0; i < LUNGHEZZA_PASSWORD; i++) {
//controllo se è presente almeno un numero o una maiuscola
if (isdigit(password[i])) {
caratteri_numerici++;
} else if (ispunct(password[i])) {
caratteri_speciali++;
}
}
if (caratteri_numerici > 0 && caratteri_speciali > 0) {
puts("LA PASSWORD E' MEMORIZZATA CORRETTAMENTE");
puts("\n");
password_corretta = true;
}
else {
printf("La password non contiene un numero o una lettera maiuscola\n");
}
}
else {
printf("Hai inserito %d caratteri! La password deve essere di 8 caratteri\n", lunghezza_password);
}
}while(!password_corretta);
}
}
int somma_caratteri_numerici_speciali = 0;
int caratteri_numerici = 0;
int caratteri_speciali = 0;
}
void genera_account1(account accounts[]){
int i = 0;
// printf("\n\n%-10s%-10s%-20s%-18s%-30s%-8s\n","NOME","COGNOME","DATA DI NASCITA","INDIRIZZO","EMAIL","PASSWORD");
for (int k=0; k < MASSIMO_ACCOUNT; k++){
for (i = 0; i < MASSIMO_ACCOUNT; i++) {
printf("Nome: \t\t%s\t\n", accounts[i].nome);
printf("COGNOME: \t%s\n", accounts[i].cognome);
printf("INDIRIZZO: \t%s\n", accounts[i].indirizzo);
printf("INDIRIZZO EMAIL: \t%s\n", accounts[i].email);
printf("DATA DI NASCITA: ");
if(accounts[i].data_nascita.giorno < 10){
printf("\t0%d\\", accounts[i].data_nascita.giorno);
}else
{
printf("\t%d\\", accounts[i].data_nascita.giorno);
}
if(accounts[i].data_nascita.mese < 10){
printf("0%d\\", accounts[i].data_nascita.mese);
}else
{
printf("%d\\", accounts[i].data_nascita.mese < 10);
}
printf("%d\n", accounts[i].data_nascita.anno);
//printf("DATA DI NASCITA: \t%d\\%d\\%d\n", accounts[i].data_nascita.giorno, accounts[i].data_nascita.mese, accounts[i].data_nascita.anno);
printf("password: ");
for(i=0; i<MASSIMO_ACCOUNT; i++){
for(int j=0; j<8;j++){
printf("%c", accounts[j].password);
}
}
}
}}