PDA

Visualizza la versione completa : [C] Generazione casuale di una stringa con caratteri maiuscoli, minuscoli, ecc.


palladino.al
05-04-2019, 21:12
ciao a tutti, volevo chiedervi se esiste un modo per generare in maniera automatica una stringa con, per esempio con una serie di caratteri maiuscoli, minuscoli e numeri.
per esempio questo codice Ŕ valido?

lettere[i] = a, b, c, d, f,...A, B, C, D, F...,@,#....[random () % 62]
dove 62 e la somma dell'alfabeto in maiuscolo piu l'alfabeto in minuscolo piu 8 caratteri?

palladino.al
28-04-2019, 23:09
ciao a tutti...mi sono bloccato in una cosa
sto "cercando di creare un programma che dato un numero di utenti mi deve generare le generalitÓ ad ogni utente, attraverso un menu devo scegliere se la password dovra essere impostata manualmente o automatica(utilizzando 3 diversi criteri)
il problema sta che selezionando l'opzione 1, la password deve contenere almeno 6 caratteri numerici e speciali, ma putroppo mi stampa senza ciclare fino quando la if Ŕ vera...questo e il codice:



#include "stdio.h"
#include "stdlib.h"
#include "time.h"


#include "string.h"
#include "ctype.h"






#define UTENTI 1
#define LUNGHEZZA_CARETTERI 25
#define LUNGHEZZA_INDIRIZZO 45
#define LUNGHEZZA_EMAIL 75
#define LUNGHEZZA_DOMINI 7










typedef struct {
int giorno;
int mese;
int anno;
}data;


typedef struct {
char nome[LUNGHEZZA_CARETTERI+1];
char cognome[LUNGHEZZA_CARETTERI+1];
data datanascita;
char password[8];
char passwordtemp[8];
}utenti;






//funzioni
void generaAnagrafica(utenti account[]);
void generaPassword_automatica_livello1(utenti account[]);
void generaPassword_automatica_livello2(utenti account[]);
void generaPassword_automatica_livello3(utenti account[]);
void stampaDatiCompleti(utenti accounts[]);




int main(){
setvbuf(stdout, NULL, _IONBF, 0);


utenti anagrafica[UTENTI];
for (int i=0; i<UTENTI; i++){
generaAnagrafica(anagrafica);
printf("\n%d░ ACCOUNT: \n", i + 1);
printf(" COGNOME: %s\n", anagrafica[i].cognome);
printf(" NOME: %s\n", anagrafica[i].nome);


printf("DATA DI NASCITA: ");
if(anagrafica[i].datanascita.giorno < 10){
printf("\t0%d\\", anagrafica[i].datanascita.giorno);
}else
{
printf("\t%d\\", anagrafica[i].datanascita.giorno);
}
if(anagrafica[i].datanascita.mese < 10){
printf("0%d\\", anagrafica[i].datanascita.mese);
}else
{
printf("%d\\", anagrafica[i].datanascita.mese < 10);
}
printf("%d\n", anagrafica[i].datanascita.anno);


char scelta[2];
char sceltaSicurezza[2];
do{
printf("1) Generare la password in automatico\n");
printf("2) Inserire la password manualmente\n");
printf("Effettui una scelta (1 o 2): ");
puts("\n*****************************************");
scanf("%s", scelta);
}while(strcmp(scelta,"1") && strcmp(scelta,"2"));
if (strcmp(scelta,"1") == 0) { //inserimento automatico
do{
printf("\nSelezionare il livello di complessita'\n");
printf("1) Poco sicura\n");
printf("2) Mediamente sicura\n");
printf("3) Sicura\n");
printf("Effettui una scelta: ");
scanf("%s", sceltaSicurezza);
}while(strcmp(sceltaSicurezza,"1") && strcmp(sceltaSicurezza,"2") && strcmp(sceltaSicurezza,"3"));


printf("Password generata: ");


if(strcmp(sceltaSicurezza,"1") == 0){


generaPassword_automatica_livello1(anagrafica);






} else if(strcmp(sceltaSicurezza,"2") == 0){


// generaPassword_automatica_livello2(anagrafica);


}else if (strcmp(sceltaSicurezza,"3") == 0){


// generaPassword_automatica_livello3(anagrafica);


}
} else if (strcmp(scelta,"2") == 0) { //inserimento a mano
printf("passwird generata manualmente");
}




//generaPassword_automatica_livello1(anagrafica);


for (int j=0; j<8; j++){
printf("%c", anagrafica[i].password[j]);




}




}




// stampaDatiCompleti(anagrafica);
return 0;
}


void generaAnagrafica(utenti account[]){




int seed = (time(NULL));
srand(seed);
// randomizzo nomi, cognomi, indirizzo e email
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* email[] = {"@gmail.com", "@gmail.it", "@hotmail.it", "@hotmail.it", "@aruba.it", "@aruba.com", "@libero.it"};


int i;
for ( i=0; i<UTENTI; i++){
// RANDOM NOMI
int indice_nomi = 0;
indice_nomi = rand () % UTENTI;
strcpy(account[i].nome, nomi[indice_nomi]);


//RANDOM COGNOMI
int indice_cognomi = 0;
indice_cognomi = rand () % UTENTI;
strcpy(account[i].cognome, cognomi[indice_cognomi]);


account[i].datanascita.anno = rand () % (2019 - 1950) + 1950;
account[i].datanascita.mese = rand () % (12 - 01) + 01;
if(account[i].datanascita.mese < 10){


}


if (account[i].datanascita.mese==2 && account[i].datanascita.anno%400==0 || (account[i].datanascita.anno%4==0 &&!(account[i].datanascita.anno%100==0))){
account[i].datanascita.giorno = rand () % (29 - 01) + 01;
}
else if (account[i].datanascita.mese==2){
account[i].datanascita.giorno = rand () % (28 - 01) + 01;
}
else if (account[i].datanascita.mese==1 || account[i].datanascita.mese==3 || account[i].datanascita.mese==5 || account[i].datanascita.mese==7 || account[i].datanascita.mese==8 || account[i].datanascita.mese==10){
account[i].datanascita.giorno = rand () % (31 - 01) + 01;
}
else {
account[i].datanascita.giorno = rand () % (30 - 01) + 01;
}
int passwordrequisiti = 0;








}
}


void generaPassword_automatica_livello1(utenti account[]){




int passwordrequisiti;






int i,j;
setvbuf(stdout, NULL, _IONBF, 0);






do {




for(i=0; i< 2; i++){


for(j=0; j< 8; j++){


passwordrequisiti = 0;


do{
account[i].passwordtemp[j] = '!' + rand() % 'z';
if ((account[i].passwordtemp[j] >='!' && account[i].passwordtemp[j]< '&')
||(account[i].passwordtemp[j] >='?' && account[i].passwordtemp[j]< '@')
||(account[i].passwordtemp[j] >='0' && account[i].passwordtemp[j]< '9')
||(account[i].passwordtemp[j] >='a' && account[i].passwordtemp[j]< 'z')
||(account[i].passwordtemp[j] >='A' && account[i].passwordtemp[j]< 'Z'))
passwordrequisiti++;
} while(passwordrequisiti==0);
// printf("%c", account[i].passwordtemp[j]);
} //printf("\n");
}


//printf("\n\n");


int caratteri_numerici = 0;
int caratteri_speciali = 0;
int somma_caratteri_numerici_speciali = 0;


for(i=0; i< 2; i++){
for(j=0; j< 8; j++){


if (isdigit(account[i].passwordtemp[j])) {
caratteri_numerici++;
somma_caratteri_numerici_speciali++;
} else if (ispunct(account[i].passwordtemp[j])) {
caratteri_speciali++;
somma_caratteri_numerici_speciali++;
}
}}


if (somma_caratteri_numerici_speciali > 5) {


passwordrequisiti++;


printf("Rispettano i requisiti :\n");
for(i=0; i< 2; i++){
for(j=0; j< 8; j++){
account[i].password[j] = account[i].passwordtemp[j];
//printf("%c", account[i].password[j]);


}
printf("\n");
}
}


} while(passwordrequisiti==1);




}

denis76
29-04-2019, 11:06
Ciao, se posso darti un consiglio difficilmente qualcuno scaricherÓ l'intero codice per debuggartelo. Dovresti postare quelle tre o quattro righe in cui secondo te sta il problema.

alka
29-04-2019, 11:28
Ciao, se posso darti un consiglio difficilmente qualcuno scaricherÓ l'intero codice per debuggartelo. Dovresti postare quelle tre o quattro righe in cui secondo te sta il problema.

Quoto il suggerimento, e unisco la discussione a quella precedentemente aperta, visto che il problema Ŕ strettamente correlato.

palladino.al
29-04-2019, 18:08
quale?

oregon
01-05-2019, 14:20
Ne stai parlando in

https://www.iprogrammatori.it/forum-programmazione/cplusplus/piccolo-problema-t38802.html

hai anche postato su

masterdrive.it


... facendo questa confusione nessuno ti segue pi¨ e non hai molte risposte ....

Loading