** Check numeric format

Return TypeFunction nameArguments
unsigned intIsDate(unsigned int&,unsigned int&,unsigned int&,const char*,)

Declared in file: hzTextproc.h
Defined in file : hzDate.cpp

Function Logic:

0:START 1:D M Y 2:!i||i[0]==0 3:Return 0 4:IsDigit(i[0])&&IsDigit(i[1]) 5:IsDigit(i[2])&&IsDigit(i[3]) 6:i[4]==(char)47&&IsDigit(i[5])&&IsDigit(i[6])&&i[7]==(char)47&&IsDigit(i[8])&&IsDigit(i[9]) 7:Y M D 8:Return (Y>9999||!M||M>12||!D||D>(M==2?(!(Y%400)?1:!(Y%100)?0:!(Y%4)?1:0)?29:28:M==4||M==6||M==9||M==11?30:31))?0:10 9:IsDigit(i[4])&&IsDigit(i[5])&&IsDigit(i[6])&&IsDigit(i[7]) 10:Y M D 11:Return (Y>9999||!M||M>12||!D||D>(M==2?(!(Y%400)?1:!(Y%100)?0:!(Y%4)?1:0)?29:28:M==4||M==6||M==9||M==11?30:31))?0:8 12:*i; 13:IsDigit(*i) 14:items 15:*i==(char)47 16:items IsAlpha 17:IsAlpha(*i) 18:items 19:*i<=' ' 20:items 21:*i<=',' 22:items 23:Return 0 24:nDigit>4&&nAlpha>2&&nSpace>1 25:*i; 26:IsAlpha(*i) 27:dow==NULL_DOW 28:_isdow dow 29:M<=0 30:_ismonth M 31:IsAlpha(*i); 32:IsDigit(*i) 33:!D 34:IsDigit(*i); 35:D D 36:!Y 37:IsDigit(*i); 38:Y Y 39:Y&&M>0&&D>0 40:nDigit nSlash 41:*i; 42:*i==(char)47 43:items IsDigit 44:IsDigit(*i) 45:items 46:*i>(char)32&&*i!=(char)45 47:Return 0 48:i 49:nSlash==0 50:nDigit==8 51:Y M D 52:nSlash==2 53:IsDigit(*i); 54:D D 55:IsDigit(*i); 56:M M 57:IsDigit(*i); 58:Y Y 59:Return (Y>9999||!M||M>12||!D||D>(M==2?(!(Y%400)?1:!(Y%100)?0:!(Y%4)?1:0)?29:28:M==4||M==6||M==9||M==11?30:31))?0:len

Function body:

unsigned int IsDate (unsigned int& Y, unsigned int& M, unsigned int& D, const char* cpStr)
{
   const       char*   i = cpStr ;
   uint32_t    nDigit = 0;
   uint32_t    nSlash = 0;
   uint32_t    nAlpha = 0;
   uint32_t    nSpace = 0;
   uint32_t    nComma = 0;
   uint32_t    dow = NULL_DOW ;
   uint32_t    len = 0;
   Y = M = D = 0;
   if (!i || i[0]== 0)
       return 0;
   if (IsDigit(i[0])&& IsDigit(i[1]))
   {
       if (IsDigit(i[2])&& IsDigit(i[3]))
       {
           if (i[4]== CHAR_FWSLASH && IsDigit(i[5])&& IsDigit(i[6])&& i[7]== CHAR_FWSLASH && IsDigit(i[8])&& IsDigit(i[9]))
           {
               Y = ((i[0]-''0'')*1000)+((i[1]-''0'')*100)+((i[2]-''0'')*10)+(i[3]-''0'');
               M = ((i[5]-''0'')*10)+(i[6]-''0'');
               D = ((i[8]-''0'')*10)+(i[9]-''0'');
               return (Y > 9999||!M||M > 12||!D || D > monlen(Y, M)) ? 0: 10;
           }
           if (IsDigit(i[4])&& IsDigit(i[5])&& IsDigit(i[6])&& IsDigit(i[7]))
           {
               Y = ((i[0]-''0'')*1000)+((i[1]-''0'')*100)+((i[2]-''0'')*10)+(i[3]-''0'');
               M = ((i[4]-''0'')*10)+(i[5]-''0'');
               D = ((i[6]-''0'')*10)+(i[7]-''0'');
               return (Y > 9999||!M||M > 12||!D || D > monlen(Y, M)) ? 0: 8;
           }
       }
   }
   for (i = cpStr ; *i ; len++, i++)
   {
       if      (IsDigit(*i))           nDigit++ ;
       else if (*i == CHAR_FWSLASH)    nSlash++ ;
       else if (IsAlpha(*i))           nAlpha++ ;
       else if (*i <&eq; '' '')           nSpace++ ;
       else if (*i <&eq; '','')           nComma++ ;
       else
           return 0;
   }
   if (nDigit > 4&& nAlpha > 2&& nSpace > 1)
   {
       for (i = cpStr ; *i ; len++, i++)
       {
           if (IsAlpha(*i))
           {
               if (dow == NULL_DOW)
                   dow = _isdow(i) ;
               if (M <&eq; 0)
                   M = _ismonth(i) ;
               for (; IsAlpha(*i) ; i++) ;
           }
           if (IsDigit(*i))
           {
               if (!D)
                   for (; IsDigit(*i) ; i++)   { D *= 10;D += (*i - ''0'');}
               if (!Y)
                   for (; IsDigit(*i) ; i++)   { Y *= 10;Y += (*i - ''0'');}
           }
           if (Y && M > 0&& D > 0)
               break ;
       }
   }
   else
   {
       /*
       **  ** Check numeric format
       **           */
       nDigit = 0;
       nSlash = 0;
       for (i = cpStr ; *i ; len++, i++)
       {
           if (*i == CHAR_FWSLASH)
               nSlash++ ;
           else if (IsDigit(*i))
               nDigit++ ;
           else
               break ;
       }
       if (*i > CHAR_SPACE && *i != CHAR_MINUS)
           return 0;
       i = cpStr ;
       if (nSlash == 0)
       {
           if (nDigit == 8)
           {
               Y = ((i[0]-''0'')*1000)+((i[1]-''0'')*100)+((i[2]-''0'')*10)+(i[3]-''0'');
               M = ((i[4]-''0'')*10)+(i[5]-''0'');
               D = ((i[6]-''0'')*10)+(i[7]-''0'');
           }
       }
       if (nSlash == 2)
       {
           for (i = cpStr ; IsDigit(*i) ; len++, i++)  { D *= 10;D += (*i - ''0'');}
           for (i++ ; IsDigit(*i) ; len++, i++)        { M *= 10;M += (*i - ''0'');}
           for (i++ ; IsDigit(*i) ; len++, i++)        { Y *= 10;Y += (*i - ''0'');}
       }
   }
   return (Y > 9999||!M||M > 12||!D || D > monlen(Y, M)) ? 0: len ;
}