[JS] IPV6网址进行格式化转换(无“::“缩写格式)

用于PON设置ipv6 Pool范围时,校验ipv6 Pool范围是否为设置的ipv6前缀的子集
前提:ipv6地址格式合法(图中1、2格式)

化简原则:
+全0块“0000”,可以化简为“0”
+多个全0块,可以化简为“::”
+一个IPv6地址中只能出现一个“::”,出现多个全0块时,“::”要化简最长的一段,没有最长的要就近(左)
+“::”可以出现在地址开头或结尾

CompareAddrPoolRange("3001::","3001::1111:111");
function CompareAddrPoolRange(Prefix,ipv6Addr){//对比前缀与地址池起始地址前缀是否相同
  var addr_1 = Prefix.split("/");
  var addr_2 = ipv6Addr.split("/");
  var prefix = addr_1[0];
  var ipv6addr = addr_2[0];
  
  var prefix_fomart = convert2CompleteIpV6(prefix).substring(0,19);
  var prefix_ipv6 = convert2CompleteIpV6(ipv6addr).substring(0,19);
  console.log(prefix_fomart);
  console.log(prefix_ipv6);
  if(prefix_fomart != prefix_ipv6){
    return false;
  }
  return true;
}
//ipv6地址去简化
function convert2CompleteIpV6(ip){//将3001::1111:111拓展为3001:0000:0000:0000:0000:1111:111
    var ipV6 = ip;
    var ipv6Address;
    var index = ip.indexOf("::");
    if(index > 0){
      var size = 8-(ipV6.split(":").length-1);
      var tmp = "";
      for(var i = 0; i < size; i++){
        tmp += ":0000";
      }
      tmp += ":";
      ipV6 = ip.replace("::",tmp);
    }
    else if(index == 0){
      if(ip == "::"){
        ipV6 = "0000:0000:0000:0000:0000:0000:0000:0000";
      }
      else{
        ipV6 = ip.replace("::","0000:0000:0000:0000:0000:0000:0000:");
      }
    }
    ipv6Address = ipv6AddrFormart(ipV6);
    return ipv6Address;
  }
ipv6地址标准格式化
function ipv6AddrFormart(ipV6)
{
  //将3001:0000:0000:0000:0000:1111:111格式化3001:0000:0000:0000:0000:0000:1111:0111
  var ipv6Address = null;
  var parts = ipV6.split(":");
  for(var i = 0; i < parts.length; i++){
    if(parts[i].length < 4){
      parts[i] = parts[i].padStart(4,'0');
    }
    if(i == 0){
      ipv6Address = parts[i];
    }else{
      ipv6Address += ":" + parts[i];
    }
  }
   return ipv6Address;
}
参考:
https://www.cnblogs.com/fps2tao/p/10766422.html
https://blog.csdn.net/weixin_30853329/article/details/98959974
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值