ciao a tutti, volevo chiedere se c'e un modo per creare, con la funzione srand, di generare giorno, mese e anno per poi controllare se la data è realistica? (anno bisestile eccc)

io ho provato a fare una bozza di codice che è:

codice:
...
typedef struct {	int giorno_di_nascita;
	int mese_di_nascita;
  int anno_di_nascita;
}data_di_nascita;


typedef struct {
	char nome[LUNGHEZZA_NOME];
	char cognome[LUNGHEZZA_COGNOME];
  data_di_nascita utente;
}account;


int generazione_nome ();
int generazione_cognome ();
int generazione_data_di_nascita ();


...
  int generazione_datanascita();
	//ciclo
	
	for (int i = 0; i<= LUNG_VETTORE; i++) {
	
		...
    profilo[i].utente.giorno_di_nascita = generazione_data_di_nascita ();
		
		...
		printf("\tGIORNO DI NASCITA: %d|%d|%d\n", profilo[i].utente.giorno_di_nascita, profilo[i].utente.mese_di_nascita, profilo[i].utente.anno_di_nascita);
		


   
		}
	return 0;
}


//funzioni


...


int generazione_data_di_nascita () {
int data_nascita, mese_nascita, anno_nascita = 0;
data_nascita = rand() % ( GIORNIMAX - GIORNIMIN ) + GIORNIMIN;
mese_nascita = rand() % ( 12 - 1 ) + 1;
anno_nascita = rand() % ( 2020 - 1950 ) + 1950;


return  data_nascita + mese_nascita + anno_nascita ;
  }
cosi facendo mi escono numeri grandi... mi potete dare una dritta?