简单来讲,设备指纹是指可以用于唯一标识出该设备的设备特征或者独特的设备标识。
设备指纹包括一些固有的、较难篡改的、唯一的设备标识。比如设备的硬件ID,像手机在生产过程中都会被赋予一个唯一的IMEI(International Mobile Equipment Identity)编号,用于唯一标识该台设备。像电脑的网卡,在生产过程中会被赋予唯一的MAC地址。这些设备唯一的标识符我们可以将其视为设备指纹。
同时,设备的特征集合可以用来当做设备指纹。我们将设备的名称、型号、形状、颜色、功能等各个特征结合起来用于作为设备的标识。这就类似于我们在记忆人的时候,通常是通过人的长相、面部特征来记忆。
随着移动互联网的时代全面来临,诈骗团伙已形成了年产值上千亿元的黑色产业链。同时,魔高一尺道高一丈,更多的反黑产前沿技术应运而生,获得互联网及移动端企业风控的青睐。其中呼声最高的当属设备指纹技术,几乎每一家反欺诈企业都将其作为大数据风控的关键技术之一。
2.技术原理
相似度的技术原理是寻找一个中心点,我们可以把这个中心点看着为一个均值线,然后计算各个设备与该均值的距离。
3.实施步骤
把标准点分为两大类,一个是IE,一个是其他类型
public static float similarity(String str1, String str2) {
//计算两个字符串的长度。
int len1 = str1.length();
int len2 = str2.length();
//建立数组,比字符长度大一个空间
int[][] dif = new int[len1 + 1][len2 + 1];
//赋初值,步骤B。
for (int a = 0; a <= len1; a++) {
dif[a][0] = a;
}
for (int a = 0; a <= len2; a++) {
dif[0][a] = a;
}
//计算两个字符是否一样,计算左上的值
int temp;
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
temp = 0;
} else {
temp = 1;
}
//取三个值中最小的
dif[i][j] = min(dif[i - 1][j - 1] + temp, dif[i][j - 1] + 1,
dif[i - 1][j] + 1);
}
}
return 1 - (float) dif[len1][len2] / Math.max(str1.length(), str2.length());
}
//得到最小值
public static int min(int... is) {
int min = Integer.MAX_VALUE;
for (int i : is) {
if (min > i) {
min = i;
}
}
return min;
}
比如A标准点的属性为(a1,b1,c1,d1......)
对应的需要计算的点B的对应属性为 B(a2,b2,c2,d2....)
那么算法为:
B相似度=W1*similarity(a1,a2)+W2*similarity(b1,b2)+W3*similarity(c1,c2)+......
W1,W2,W3...为对应属性的权重 W1+W2+W3...=1
这样可算出每个设备对应与标准点的相似度
Test Case 1(预想Case):
根据我的测试可能会出现一些问题,1:A与B相似度很高 C与A的相似度很高 但是出现的可能有C与B的相似度很低:
Test Case 2:
我们的相似度只能作为一种辅助手段,在我们找到对应的点之后,需要再进行一次相似的度的比较,我们也可以运用ES里面的匹配度算法直接计算两条记录的匹配程度