业务的要求
· 限制或者只开放中国IP(需要判断该IP是否属于中国段)
· 时间复杂度尽量小,适用于请求量大的业务场景
· 不要请求第三方接口,防止出现网络异常
由于只需要判断到国家的维度,所以只需要去匹配中国的IP段,下面网站有个中国IP段的列表
http://ipblock.chacuo.net/down/t_txt=c_CN
可以看到IP段有2700多个,如果用二分查询法,时间复杂度是logN。基本上能够满足需求了。
摘取部位IP段
算法思路:
ip2long(36.223.255.255)=36*256^3+223*256^2+255*256+255
ip2long(36.96.0.0)=36*256^3+96*256^2
ip2long(36.223.255.255) - ip2long(36.96.0.0) + 1= 8388608 //+1为算上起始IP
对整个数组按left字段进行升序排序得到一个有序数组(php代码示例)
二分查找法
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有