wtorek, 27 października 2009

funkcja sprawdzająca czy podany ciąg znaków jest adresem IPv4

function BOOL IsIPAdres(szIP)
BOOL bResult;
string tab,adr;         
string znak;
number lista;                               
INT i,nadr;
begin        
 bResult = TRUE;
 tab = "0123456789.";
 lista = ListCreate(STRINGLIST);
 //Sprawdzenie ilosci znakow
 if ((StrLength(szIP)<7) || (StrLength(szIP)>15)) then bResult = FALSE; endif;
 //sprawdzenie dozwolonych znakow
 for i=0 to (StrLength(szIP)-1) 
  StrSub(znak,szIP,i,1);
  if (StrFind(tab,znak)<0) then bResult = FALSE; endif;
 endfor;
 //Rozdzielenie na liste adresow
 StrGetTokens ( lista, szIP, "." ); 
 //Czy lista sklada sie z 4 pozycji
 if (ListCount(lista)!=4) then bResult = FALSE; endif; 
 //Sprawdzenie poszczegolnych elementow listy czy format poprawny 
 ListSetIndex(lista,LISTFIRST);
    for i=0 to ListCount(lista)-1  
      ListCurrentString ( lista, adr );
      if ((StrLength(adr)>3) || (StrLength(adr)=0)) then bResult = FALSE; endif;
      //Jezeli na pierwszym miejscu jest 0 
      if ((StrLength(adr)>1)&&(adr[0]=="0")) then bResult = FALSE; endif;   
      //Jezeli nie da sie zamienic na liczbe
      if (StrToNum(nadr,adr)<0) then 
       bResult = FALSE; 
      else //Jezeli wynik jest wiekszy niz 256
       if (nadr>256) then bResult = FALSE; endif;      
      endif;   
      ListSetIndex (lista, LISTNEXT);
    endfor;         
    
 ListDestroy(lista);
 
 return bResult;
end;  

Brak komentarzy:

Prześlij komentarz