Longman\IPTools\Ip::processWithSlash PHP Method

processWithSlash() protected static method

Checks if an IP is part of an IP range.
protected static processWithSlash ( string $range ) : boolean
$range string IP range specified in one of the following formats: CIDR format: 1.2.3/24 OR 1.2.3.4/255.255.255.0
return boolean true if IP is part of range, otherwise false.
    protected static function processWithSlash($range)
    {
        list($range, $netmask) = explode('/', $range, 2);
        if (self::$isv6) {
            if (strpos($netmask, ':') !== false) {
                $netmask = str_replace('*', '0', $netmask);
                $netmask_dec = self::ip2long($netmask);
                return (self::ip2long(self::$ip) & $netmask_dec) == (self::ip2long($range) & $netmask_dec);
            } else {
                $x = explode(':', $range);
                while (count($x) < 8) {
                    $x[] = '0';
                }
                list($a, $b, $c, $d, $e, $f, $g, $h) = $x;
                $range = sprintf("%u:%u:%u:%u:%u:%u:%u:%u", empty($a) ? '0' : $a, empty($b) ? '0' : $b, empty($c) ? '0' : $c, empty($d) ? '0' : $d, empty($e) ? '0' : $e, empty($f) ? '0' : $f, empty($g) ? '0' : $g, empty($h) ? '0' : $h);
                $range_dec = self::ip2long($range);
                $ip_dec = self::ip2long(self::$ip);
                $wildcard_dec = pow(2, 32 - $netmask) - 1;
                $netmask_dec = ~$wildcard_dec;
                return ($ip_dec & $netmask_dec) == ($range_dec & $netmask_dec);
            }
        } else {
            if (strpos($netmask, '.') !== false) {
                $netmask = str_replace('*', '0', $netmask);
                $netmask_dec = self::ip2long($netmask);
                return (self::ip2long(self::$ip) & $netmask_dec) == (self::ip2long($range) & $netmask_dec);
            } else {
                $x = explode('.', $range);
                while (count($x) < 4) {
                    $x[] = '0';
                }
                list($a, $b, $c, $d) = $x;
                $range = sprintf("%u.%u.%u.%u", empty($a) ? '0' : $a, empty($b) ? '0' : $b, empty($c) ? '0' : $c, empty($d) ? '0' : $d);
                $range_dec = self::ip2long($range);
                $ip_dec = self::ip2long(self::$ip);
                $wildcard_dec = pow(2, 32 - $netmask) - 1;
                $netmask_dec = ~$wildcard_dec;
                return ($ip_dec & $netmask_dec) == ($range_dec & $netmask_dec);
            }
        }
        return false;
    }