Contrôler la validité d'une chaine représentant une adresse IP
Voici une fonction qui permet de contrôler qu'une chaine représente une adresse IP valide. A noter que seule la représentation est testée, en aucun cas il n'y a vérification de l'existence physique de l'adresse sur le réseau.
Fonction de contrôle d'IP
(**
* Contrôle la chaine représente une adresse IP valide
* @param IP la chaine contenant l'adresse IP
* @return true si l'IP est valide
**)
function CheckIp(const Ip: String): Boolean;
var
i: Integer; // Indice de parcours de la chaine
c: Char; // Caractère en cours dans la chaine
NbChars: Integer; // Nombre de caractères composant le nombre
Dots: Integer; // Nombre de points dans la chaine
Number: Integer; // Valeur du nombre en cours
begin
// Si la chaine est vide, l'IP est invalide
Result := false;
if (Length(Ip) = 0) then exit;
// On initialise les valeurs
Number := 0;
Dots := 0;
NbChars := 0;
// Pour chaque caractère de la chaine
for i := 1 to Length(Ip) do
begin
c := Ip[i];
// S'il s'agit d'un point, on incrémente le compteur
// de points
if (c = '.') then
begin
// Si la chaine commence par un point, alors l'IP
// n'est pas valide
if (NbChars = 0) then exit;
NbChars := 0;
Number := 0;
inc(Dots);
// Il ne peut y avoir plus de 3 points dans une IP
if (Dots > 3) then exit;
end
else
begin
// S'il ne s'agit pas d'un nombre, on sort également
if ((c < '0') or (c > '9')) then exit;
// On ajoute la valeur du caractère au nombre
Number := Number * 10 + (Ord(c) - Ord('0'));
Inc(NbChars);
// S'il y a plus de 3 caractères, la chaine n'est
// pas valide
if (Boolean(NbChars shr 2)) then exit;
// Si le nombre dépasse 255, la chaine n'est pas
// valide non plus
if (Boolean(Number shr 8)) then exit;
end;
end;
// S'il n'y a aucun caractère dans le dernier nombre, la
// chaine n'est pas valide
if (NbChars = 0) then exit;
// Si on est arrivé jusqu'ici, c'est que l'IP est valide
Result := true;
end;
3 requête(s) SQL executée(s) en 0.001 Secs - Temps total de génération de la page : 0.006 Secs
