我们说我有一张公司表。 (ID,名称,......,多个IP范围)
每家公司都有一些IP范围(不同的IP范围数)
有些公司可能只有两个IP范围,比如1.1.1.1-2.2.2.2,3.3.3.3-4.4.4.4
其他公司可能有更多的IP范围。(1.1.1.1-2.2.2.2,3.3.3.3-4.4.4.4,5.5.5.5-6.6.6.6 ......)
我考虑了另一个IP范围表。 (一对多的关系)。
问题是,给出了一个任意的IP,我应该找到公司,它们的IP属于他们的IP范围。
我该怎么做?
如果我们只有两个IP范围(从_1,从_1,从_2到2),我们可以写$(document).ready(function(){
var form = $("#Form-3");
var FName = $("#fname"); //Creates Variables for elements in form
var Tele = $("#tele");
var Address = $("#address");
var Email = $("#email");
var Credit = $("#Card")
var regexp = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_.-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9.]+.[a-z]{2,4}$/; //ragex code- used to validate email
FName.blur(validateFName); //blur is a method which attaches a functiom to run when an event occurs
Email.blur(validateEmail);
Tele.blur(validateTele);
Address.blur(validateAddress);
Credit.blur(validateCard);
form.submit (function(){
if (validateFName() & validateTele() & validateEmail() & validateAddress() & validateCard()){ //If it passes all of these then return true
return true;
}
else {
return false;
}
});
function validateCard(){ //Validates Credit Card
var Visa = /^(?:4[0-9]{12}(?:[0-9]{3})?)$/; //Ragex code for Credit Cards
var MasterCard = /^(?:5[1-5][0-9]{14})$/;
var CC = Credit.val();
$("#Visa").click(function() { //Tick Radio Button
$("#Card").show();
if (Visa.test(CC) ){ // If user input is equal to both Visa Or Mastercard Then Valid
document.getElementById("CardError").textContent ="";
return true;
}
});
$("#Master").click(function() { //Checks MasterCard button.
$("#Card").show();
if(MasterCard.test(CC)){
document.getElementById("CardError").textContent =""; //Display Error
return true;
}
else {
document.getElementById("CardError").textContent ="Please Ensure Card Detail Is Correct"; //Display Error
return false;
}
});
}
});
。但我们有VARIANT IP范围。有些公司可能有3或4个IP范围。一种方法是为10个IP范围创建20列。从_1,到_1,从_2,到_2,从_3,到_3 ......还有其他方法吗?如果某个公司的IP范围超过10个怎么办?
答案 0 :(得分:0)
典型的IP是ABCD,每个A,B,C,D是1字节的int数,其值从0到255,因此您可以将IP视为四位数,基数为256.让&#39 ; s将其转换为整数:
A*255^3 + B*255^2 + C*255 + D
将IP范围的int值保存到db(2列,FROM和TO),示例范围为1.1.1.1 - 2.2.2.2,保存:
FROM = 1*255^3 + 1*255^2 + 1*255 + 1 = 16646656
TO = 2*255^3 + 2*255^2 + 2*255 + 1 = 33293312
现在使用给IP,也将它转换为如上所示的整数(假设int值为x),并查询:
SELECT Name FROM IP INNER JOIN COMPANY ON IP.CompanyId = COMPANY.Id
WHERE x BETWEEN `FROM` AND `TO`
示例:强>
公司 表
--------------------
| Id | Name |
--------------------
| 1 | Google |
--------------------
| 2 | Microsoft |
--------------------
IP 表
----------------------------------------
| Id | CompanyId | From | To |
----------------------------------------
| 1 | 1 | 16646656 | 33293312 |
----------------------------------------
| 2 | 1 | 11235468 | 15612545 |
例如,给定的IP是17654343,
SELECT * FROM IP INNER JOIN COMPANY ON IP.CompanyId = COMPANY.Id
WHERE 17654343 BETWEEN `FROM` AND `TO`
结果:
Google