lia*_*dee 5 php string keyboard qwerty spam-prevention
我正在开发一个垃圾邮件检测系统,并被警告发现它无法检测这样的字符串 - “asdfsdf”。
我的解决方案是检测之前的键是否靠近键盘上的其他键。我没有从键盘获取输入(以检测来自的垃圾邮件),而是以字符串的形式获取它。
我只想知道一个角色与另一个角色的距离是一个键、两个键还是两个以上键。
例如,在现代 QWERTY 键盘上,字符“q”和“w”将相距 1 个键。字符“q”和“s”也是如此。人类可以从逻辑上解决这个问题,我如何在代码中做到这一点?
您可以简单地为标准 qwerty 键盘创建一个二维映射。基本上它可能看起来像这样:
map[0][0] = 'q';
map[0][1] = 'a';
map[1][0] = 'w';
map[1][1] = 's';
Run Code Online (Sandbox Code Playgroud)
等等。
当你得到两个字符时,你只需要在上面的数组“map”中找到它们的x和y,并且可以使用毕达哥拉斯简单地计算距离。它不能满足您的要求,因为“q”和“s”的距离为 1。而是 sqrt (1^2 + 1^2) 大约 1.4
公式为:
例如:
假设您得到字符c1 ='q' 和c2 ='w'。检查地图,发现“q”的坐标为 (x1,y1) = (0, 0),“w”的坐标为 (x2,y2) = (1, 0)。距离是
sqrt((1-0)^2 + (0-0)^2) = sqrt(1) = 1
Run Code Online (Sandbox Code Playgroud)