/** * Convert a network specification in CIDR notation to an integer network and a number of bits */ public static function parseCIDR($range) { $parts = explode('/', $range, 2); if (count($parts) != 2) { return array(false, false); } $network = IP::toSigned($parts[0]); if ($network !== false && is_numeric($parts[1]) && $parts[1] >= 0 && $parts[1] <= 32) { $bits = $parts[1]; if ($bits == 0) { $network = 0; } else { $network &= ~((1 << 32 - $bits) - 1); } # Convert to unsigned if ($network < 0) { $network += pow(2, 32); } } else { $network = false; $bits = false; } return array($network, $bits); }