1.简介
随着各类社交网站的快速发展,越来越多的网红浮现出来。因而许多网红的高仿号也层出不穷,让人真假难辨。目前大多数的社交网站都保证用户名的候选码属性,即不允许两个用户使用同样的名称。尽管如此,许多高仿号仍然可以做到以假乱真,混淆视听。例如,图1,图2分别展示了钉钉的官方号和其中一个高仿号。
图1
除了级别上的差距以外,几乎看不出任何差别。后来在网友的提醒下我才注意到,高仿号中的talk并不是真正的talk,而是用大写的字母i代替了原先小写的L。
为了更好地甄别官方号和高仿号,在本文中我们开发了基于编辑距离计算的高仿号检测器。这里读者肯定要问了,你直接比较str1 == str2不就可以了吗,显然这种方式是可以的,但是这种方法只是做到了知其然,但没做到知其所以然。我们不但要识破高仿号,更要能彻底的揭穿高仿号的仿造手段,高仿号和官方号往往非常相似,只是在细小的地方做了手脚,我们的目的正是揪出这细小的细节。
2.算法回顾
编辑距离算法是经典的动态规划算法。编辑距离的定义是,假设有一个字符串s,欲使得字符串由s变为t,可以进行下列三种操作:
1)替换s中的某个字母
2)删除s中的某个字母
3)在s某处添加一个字母
每个操作只能操作一个字母,由s变为t所需的操作次数叫做编辑距离,所需的最少次数叫做最短编辑距离。
最短编辑距离编辑距离的动态转移方程可以写作
dp[i+1][j+1]=min(dp[i][j+1]+1,dp[i+1][j]+1,dp[i][j]+str1[i]==str2[j]?0:1dp[i+1][j+1] = min(dp[i][j+1]+1, dp[i+1][j]+1, dp[i][j] + str1[i] == str2[j] ? 0: 1dp[i+1][j+1]=min(dp[i][j+1]+1,dp[i+1][j]+1,dp[i][j]+str1[i]==str2[j]?0:1
其中str1, str2表示要比较的两个字符串,dp[i+1][j+1]表示字符串str1[0:i]和str[0:j]的最短编辑距离,其中规定
dp[0][i]=i,dp[i][0]=idp[0][i] = i, dp[i][0] = idp[0][i]=i,dp[i][0]=i
我们以官方号 “数学汤家凤” 和高仿号 “数学家汤凤” 为例,展示最短编辑距离的dp矩阵,如表1
表1
最终我们取表格最右下方的元素,即为编辑距离2.
现在我们只知道最短编辑路径是2,但却不知道最短编辑距离的路径。实际上最短编辑距离就蕴含在这张dp矩阵中。按照一定的策略进行回溯,我们就可以得到编辑路径:
表2
入图,向左上角回溯时,如果编辑距离不变,说明没有进行编辑操作,如果编辑距离减少,说明字符被替换。由此可知,汤和家两个字发生了替换操作
值得注意的是,回溯的方法并不唯一。实际上可以按照三条路径进行回溯。
如图,向左走表示进行删除,而向上代表插入字符。因此,编辑路径也可以认为是,先由“数学汤家凤”删除汤字得到“数学汤凤”,再通过新增“家”字得到“数学汤家凤”,编辑距离同样是2.
3.我的工作
对于检测高仿号的问题,通常来说替换操作使用最为频繁,因此我们在代码中做了改进,使算法在回溯时,在两个字符串等长情况下,优先考虑替换的情况,而非新增和删除的情况;不等长的情况下,优先考虑通过删除或新增字符,使得两个字符串等长。这样得到的编辑路径,更加适合于解释高仿号的高仿方法。
4.检测效果
如下图3,我们从bilibili上汤老师的动态中复制出汤老师官方的ID,以及一个疑似的高仿号“数学家汤凤”的ID,分别到检测器中。点击检测。
图3
即可看到真实的ID与虚假的ID的对比。
同时对于只修改了一个字符的高仿号,我们还提供了强力模式,彻底的抠出高仿之处。在展示结果的同时,我们直接对被修改的字符进行检索。
图4
从图4中我们可以一眼看出这个替换后的字母是I(大写的i)而不是l(小写L)。
5.访问地址
www.fgb2019.top/checkup
也可以点击下方阅读原文进行访问。
请尽可能复制粘贴ID到检测器中进行检测,以获得最佳效果。
6.尾声
本文采用严肃的技术和搞笑的创意相结合,纯属娱乐,并不针对任何高仿号或官方号,我们更不会因为高仿号的存在而举报社交平台。欢迎访问,理性评论。