1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| int str_to_long(const char *s, long *p)
{
int ret = 0; /* code d'erreur 0 : succès. */
if (*s == '\0')
ret = 1; /* code d'erreur 1 : la chaine a convertir est vide. */
else
{
char *end="";
*p = strtol(s, &end, 10);
if (errno != 0)
ret = 2; /* code d'erreur 2 : la fonction strtol a rencontre une erreur. */
else if (*end != '\0')
ret = 3; /* code d'erreur 3 : la conversion a échoué car un caractère invalide a été détecté. */
}
return ret;
}
int valide(char *c)
{
int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
long n1;
long n2;
long n3;
char c1[2];
char c2[2];
char c3[4];
c1[0]=c[0];
c1[1]=c[1];
c1[2]='\0';
int ret1 = str_to_long(c1, &n1);
if (ret1 != 0) return 0;
c2[0]=c[3];
c2[1]=c[4];
c2[2]='\0';
int ret2 = str_to_long(c2, &n2);
if (ret2 != 0) return 0;
c3[0]=c[6];
c3[1]=c[7];
c3[2]=c[8];
c3[3]=c[9];
c3[4]='\0';
int ret3 = str_to_long(c3, &n3);
if (ret3 != 0) return 0;
if(c[2]!='/' || c[5]!='/' || c[10]!='\0') return 1;
if(n3 % 400 == 0 || (n3 % 100 != 0 && n3 % 4 == 0))
day[1]=29;
if(n2>0 && n2<13 && n3>0)
{
if(n1>0 && n1<=day[n2-1])
return 1;
}
return 0;
} |
Partager