Splits a CIDR into network and prefix, converts the test IP and network to integers via ip2long, builds a mask as -1 shifted left by 32 minus the prefix, and compares the masked values. Prefix zero matches everything; invalid input throws.

PHP Code Editor

<?php
function ipInCidr(string $ip, string $cidr): bool {
[$subnet, $prefix] = explode('/', $cidr) + [1 => '32'];
$prefix = (int) $prefix;
$ipLong = ip2long($ip);
$subnetLong = ip2long($subnet);
if ($ipLong === false || $subnetLong === false) {
throw new InvalidArgumentException('Invalid IPv4 address');
}
if ($prefix < 0 || $prefix > 32) {
throw new InvalidArgumentException('Prefix must be 0 to 32');
}
if ($prefix === 0) {
return true;
}
$mask = -1 << (32 - $prefix);
return ($ipLong & $mask) === ($subnetLong & $mask);
}
var_dump(ipInCidr('192.168.1.50', '192.168.1.0/24')); // true
var_dump(ipInCidr('10.0.0.5', '192.168.0.0/16')); // false
var_dump(ipInCidr('172.16.4.9', '172.16.0.0/12')); // true
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PHP Version

Execution Result

Ready to execute

Click the "Run Script" button to see the output here