Voici deux fonctions très simples :
- ip2checksum(): calcule la checksum d'une IP
- checksum2ip(): restrouve l'IP à partir de la checksum
Source / Exemple :
function ip_checksum($ip)
{
// Récupère les 4 segments de l'IP
$seg = explode('.', $ip);
// Calcule la checksum
$ret = 0;
$ret += ( $seg[0] * pow(256, 3) ) ;
$ret += ( $seg[1] * pow(256, 2) ) ;
$ret += ( $seg[2] * pow(256, 1) ) ;
$ret += ( $seg[3] * pow(256, 0) ) ;
return $ret;
}
function checksum2ip($checksum)
{
// Vérifie qu'il s'agit bien d'une chaine de chiffres
if(!ereg('^:digit:+$', $checksum))
return false;
$seq = array();
// Convertit la chaine en hexadecimal
$checksum = base_convert($checksum, 10, 16);
// Vérifie que la checksum pourra bien etre resituée en IP
if(strlen($checksum) != 8)
return false;
// Récupération des segments puis reconvertion en décimal
$seq[] = base_convert(substr($checksum, 0, 2), 16, 10);
$seq[] = base_convert(substr($checksum, 2, 2), 16, 10);
$seq[] = base_convert(substr($checksum, 4, 2), 16, 10);
$seq[] = base_convert(substr($checksum, 6, 2), 16, 10);
// Formattage de l'IPv4
return printf('%s.%s.%s.%s', $seq[0], $seq[1], $seq[2], $seq[3]);
}
Conclusion :
Rien de bien compliqué.
Je ne prends pas la peine de commenter le code parfaitement.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.