python:检测冒名顶替者的用户名;匹配特定字符替换旁边的整个字符串

2024-09-20 23:04:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个小的检测脚本,找出python2中的“冒名顶替者”用户名/屏幕名。例如,使用“aIIison”(带2个大写字母i)来模拟用户名“allison”(小写字母L)。 条件是,名称的长度必须相同,所有字符都必须相同,除了被替换的字母0而不是大写O,或者相反,大写字母i代替小写字母L等等

这就是我到目前为止所拥有的,现在我只是迷路了。 我知道这里一团糟。有什么关于我应该如何正确构建逻辑的建议吗?在

mylist = ['allison', 'allisPn']
name_to_eval = 'aIIison'

for names in mylist:
    flag = 0
    if len(names) == len(name_to_eval):
        for i in range(len(name_to_eval)):
            err1 = name_to_eval[i] == 'I' and names[i] == 'l'
            cond1 = not err1 and name_to_eval[i] == names[i]
            if  err1 and cond1:
                print names 

Tags: andtonameinforlennameseval
2条回答

首先定义一个潜在替代品列表:

subs = {
  'I': 'l', 
  '0': 'O', 
  # ...
}

然后比较应用了所有替换的两个字符串:

^{pr2}$

使用您的代码:

mylist = ['Allison']
name_to_eval = 'AIIison'

for name in mylist:
  if compare(name, name_to_eval, subs):
    print('Conflicting names: {} and {}'.format(name, name_to_eval))
    break

定义一个字典映射“真”到“假”字符。假字符串也可以是较长的字符串,以防有多个可能的替换。然后,只需zipreal和{}用户名,并检查假名称f中的每个字符是否与真实字符r或其任何常见替换相对应。在

>>> subst = {"l": "I|", "o": "0", "s": "5$", ...}

>>> real, fake = "allison", "aI|i$0n"

>>> all(f == r or f in subst.get(r, '') for r, f in zip(real, fake))
True

这假设两个名称的长度相同,“真实”名称只包含“适当”字符,没有“leet speak”替换,尽管也可以通过相应地扩展substdict来支持字母。在

相关问题 更多 >

    热门问题