自動目錄

由於 IPv4 可以轉成十進位用推移的運算,但是 IPv6 要轉成十進位的話,會超過有效位數的顯示,另外由於ipv6本身是用十六進位表示,沒必要換成10進位。所以要用更漂亮的作法。我把他寫成 class  = =!!:

函式

/**

* ipv6 class by axer@ms1.boe.tcc.edu.tw

*/

class ipv6{

/**

* ExpandIPv6Notation2Bin()- Convert an ipv6 address to bin string

* @param string $ip6 - an ipv6 address

* @return return the binary string of an ipv6 address if parameter ip6 is an ipv6 address,

* else it return an empty string.

*/

public function ExpandIPv6Notation2Bin($ip6) {

if (strpos($ip6, '::') !== false)

$ip6 = str_replace('::', str_repeat(':0', 8 - substr_count($ip6, ':')).':', $ip6);

$ip6parts = explode(':', $ip6);

$res="";

foreach ($ip6parts as $part)

$res .= str_pad(base_convert( $part, 16, 2), 16, 0, STR_PAD_LEFT);

return $res;

}

/**

* MatchCIDR6 -- Check if an ipv6 address is in the CDIR6 subnet.

* @param string $cidr6 - an ipv6 subnet, ex 2001:288:5400/39 or 2001:288:5432:/64 or 2001:288:5478::/64..

* @param string $chkipv6 - an ipv6 address, ex ::1, 2001:288:5200::1, :: ,etc.

* @return return true if $chkipv6 is inside the $cidr6 subnet, or return false.

*/

public function MatchCIDR6( $cidr6, $chkipv6)

{

list($ip6, $prefixlen) = explode('/', $cidr6);

$cidrbin= substr( $this->ExpandIPv6Notation2Bin($ip6), 0, $prefixlen);

$chkip6bin= substr( $this->ExpandIPv6Notation2Bin($chkipv6), 0, $prefixlen);

if(! strcmp($cidrbin,$chkip6bin))return true;

return false;

}

}

用法

$cidr6 = "2001:288:5400/39";

$ip6= "2001:288:5300:000::72A:4BE7";

$o_ipv6 = new ipv6();

// 檢查是ip6 是否在網段內

if( $o_ipv6->MatchCIDR6($cidr6,$ip6))

print "Inside";

else

print "Outside";

備註:有參考別人的程式,不過來源佚失了

相關連結

原文 2009-11-26

php判断ipv6是否在范围内,[PHP] IPv6檢查IP是否在某個網段內 mtachcidr6相关推荐

  1. 利用叉乘快速判断点是否在三角形内

    利用叉乘快速判断点是否在三角形内 判断P是否在三角形ABC内: 向量: pa = P - A,  ca = C - A; ba = B - A; 如果向量 cross(ca, pa)与向量 cross ...

  2. 【Unity3D自学记录】判断物体是否在镜头内

    判断物体是否在镜头内. 其实很简单的方法 代码如下: [csharp] view plaincopy using UnityEngine; using System.Collections; publ ...

  3. 判断点是否处于多边形内的三种方法(转)

    1. 叉乘判别法(只适用于凸多边形)想象一个凸多边形,其每一个边都将整个2D屏幕划分成为左右两边,连接每一边的第一个端点和要测试的点得到一个矢量v,将两个2维矢量扩展成3维的,然后将该边与v叉乘,判断 ...

  4. 判断点是否在凸多边形内

    文章目录 判断点是否在凸多边形内 1,原理 2.右手坐标系 3.向量叉积 补充知识: 可以理解利用向量的叉积,很容易判定一个多边形的凹凸性.也可以判定点是否在多边形的内部. - 判定多边形的凹凸性 判 ...

  5. 判断网页是否为微信内置浏览器打开?

    文章目录 (两种方法)教你:"如何判断网页是不是在微信端内置浏览器打开?" 本文根据项目开发实际情况,着重探讨在微信内置浏览器中调用支付功能,遇到的几个坑! 目的: (方法一)全部 ...

  6. js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内...

    /** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对 ...

  7. 如何判断一个点在多边形内

    一.从三角形开始说起---怎么判断一个点在三角形内 三角形是最简单的多边形了.先说说三角形有哪些判断方法. 参考自:判断一个点是否在三角形内部 - 知乎 几种方法判断平面点在三角形内_独L无二的博客- ...

  8. 判断一点是否在多边形内(附Java实现代码)

    引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数射线法 时间复杂度:O(n) 适用范围:任意多边形 个人认为是非常不错的算法(不需考虑精度误差和多边形点给出的顺序),可以作为第一选择 ...

  9. 判断是否qq或者微信内置浏览器

    判断是否qq或者微信内置浏览器 *chrome wx,qq测试 ###安卓 QQ 内置浏览器 UA: Mozilla/5.0 (Linux; Android 5.0; SM-N9100 Build/L ...

最新文章

  1. LeetCode简单题之差的绝对值为 K 的数对数目
  2. [cocos2d-x]cocos2d和cocos2d-x的一些通用性
  3. 第十六届全国大学生智能车竞赛文化衫LOGO主图案设计
  4. Linux正确的关机方式
  5. 26.多线程join detach
  6. 在linux oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本
  7. java关闭窗口函数_2016年将是Java终于拥有窗口函数的那一年!
  8. [LeetCode]Plus One
  9. L1-030 一帮一 (15 分)
  10. 访问 Notes/Domino 数据的定制 DXL 框架
  11. wps中的word删除空白页
  12. 163手机邮箱如何注册登陆?
  13. tp5使用RabbitMQ的使用记录
  14. 【饥荒脚本】饥荒控制台代码自动输入
  15. K均值 - 案例实现(python)
  16. 知识图谱架构(Knowledge Graph)
  17. 计算机基础知识英文,计算机基础知识英文版-基础并不好,在电脑上学英语,什么软件最好用? 爱问知识人...
  18. html如何实现日期下拉菜单,实现一个日期下拉菜单
  19. Firefox和IE浏览器清除缓存方法
  20. 餐饮公关无小事,从防微杜渐到危机处理都需要重视

热门文章

  1. 在 Windows Azure 上部署预配置 Oracle VM
  2. 佳能发售曝光对应的「IXY DIGITAL 3000 IS」
  3. leetcode 1223 python
  4. 动态规划——删除并获得点数(Leetcode 740)
  5. PAT乙级(1036 跟奥巴马一起编程)
  6. 中兴服务器raid配置_HP服务器RAID配置
  7. SCN风波又起,2019年6月之前Oracle必须升级吗?
  8. 安全预警:独立发布的Oracle严重 CVE-2018-3110 公告
  9. 阿里双11大促秒杀活动下的缓存技术与高水位限流实现
  10. 今儿直白的用盖房子为例,给你讲讲Java建造者模式