最近有个需求要校验IP掩码与输入的IP段是否重复,然后全网各种搜,终于集各家于大成。好了直接上代码【部分代码不记得出处了,没有标注,还望原作者见谅】
【JS部分】
//IP转成整型
function _ip2int(ip)
{
var num = 0;
ip = ip.split(".");
num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Number(ip[2]) * 256 + Number(ip[3]);
num = num >>> 0;
return num;
}
//整型解析为IP地址
function _int2iP(num)
{
var str;
var tt = new Array();
tt[0] = (num >>> 24) >>> 0;
tt[1] = ((num << 8) >>> 24) >>> 0;
tt[2] = (num << 16) >>> 24;
tt[3] = (num << 24) >>> 24;
str = String(tt[0]) + "." + String(tt[1]) + "." + String(tt[2]) + "." + String(tt[3]);
return str;
}
//ip掩码转IP段
function subnet_mask_change_ip_segment(ip_str) {
mark_len = 32;
if (ip_str.search("/")!=-1) {
var strs= new Array();
strs=ip_str.split("/");
}
ip = _ip2int(strs[0]);
mark_len = strs[1];
mark = 0xFFFFFFFF << (32 - mark_len) & 0xFFFFFFFF;
ip_start = ip & mark;
ip_end = ip | (~mark) & 0xFFFFFFFF;
return _int2iP(ip_start) +'-'+ _int2iP(ip_end);
}
var ip_str_du = subnet_mask_change_ip_segment("47.107.170.66/24");
document.write(ip_str_du,'<br>');
【PHP部分】
/**ip掩码转IP段
* @param $ip_str
* @return string
*/
function subnet_mask_change_ip_segment($ip_str) {
$mark_len = 32;
if (strpos($ip_str, "/") > 0) {
list($ip_str, $mark_len) = explode("/", $ip_str);
}
$ip = ip2long($ip_str);
$mark = 0xFFFFFFFF << (32 - $mark_len) & 0xFFFFFFFF;
$ip_start = $ip & $mark;
$ip_end = $ip | (~$mark) & 0xFFFFFFFF;
return long2ip($ip_start).'-'.long2ip($ip_end);
} var_dump(subnet_mask_change_ip_segment('47.107.170.66/24'));
来源:https://www.cnblogs.com/yysdm/p/11301659.html