Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added phone number generator and normaliser script file #11

Merged
merged 18 commits into from
Jul 29, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Added phone number generator and normaliser script file
  • Loading branch information
marinepalyan committed Jul 16, 2020
commit 81120a7448e67d3b64c52e22534809374b5b167c
54 changes: 54 additions & 0 deletions src/scripts/osint/phone_num_generator/script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/usr/bin/env python3

import random
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если не ошибаюсь, то в скрипте из random используется только randint. В этом случае можно только randint и импортировать:

from random import randint

Или:

from random import randint as random_number
random_number(1, 9)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed



def rand_num_gen():
# генерирует случайный номер для теста
# args: none
# return: 11-digit number
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Когда пишем код, докстринги обязательно на английском! По формату докстрингов лучше придерживаться чего-то типа:

def rand_num_gen() -> str:
    """
    Generates random numbers for the test
    :return: string representation of the number
    """

Если аргументов нет, их можно не вносить в доки. И лучше добавлять аннотацию типов :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

ans = '8'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

К сожалению, данная логика будет работать только для +7-... или 8-... номеров, т.е. для России. В контексте ru номеров - ок, но в общем случае тяжеловато.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В принципе, для нас, для начала (как стартовая точка отсчета) - норм. В дальнейшем надо будет подумать как ставить код, или может использовать API какой-нибудь.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно попробовать погуглить, есть ли какие-нибудь онлайн сервисы генерации разных форматов.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed for now, might need a second review

for i in range(1, 11):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно немного проще:

for _ in range(10)

Т.к. i ты не используешь здесь, а просто генерируешь случайно.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

ans += str(random.randint(1, 9))
return ans
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно сделать так:

return "8" + "".join([str(random.randint(1, 9)) for _ in range(10)])

Попробуй разобраться в этой строке. Если не поймешь, посмотрим вместе. Тут python list comprehension, можешь погуглить.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

поняла и исправила, так что тоже fixed :)



def normalise(phone_num):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавить type annotation, какой тип у аргумента и какой возвращается

# приводит любой номер в определенный формат - 7xxxxxxxxxxx
# args: номер для нормализации в виде строки
# return: 7xxxxxxxxxxx
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заменить на английский комментарий, как в других скриптах.

    """
    description
    :param phone_num: 
    :return: 
    """

numbers = [digit for digit in phone_num if digit.isdigit()]
norm_num = "".join(numbers)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ага, как раз list comprehension. хорошо :)
Можно сразу сделать "".join([digit for digit ....

if len(norm_num) == 11:
norm_num = '7' + norm_num
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Смотри :)

778269923566

Это результат работы нормалайзера. Если мы говорим про ru номера, то у нас 11 знаков, а тут, получается, если у нас уже есть 11 знаков, мы добавляем 7.
Т.е., если разобрать, то выходит что-то типа:

7-8-913-881-11-11

Немножко неправильно :)

return norm_num


def gen_all(norm_num):
# генерирует все возможные варианты написания
# args: нормализированный номер
# return: список строк номеров
number_groups = [norm_num[0], norm_num[1:4], norm_num[4:7], norm_num[7:9], norm_num[9:11]]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok 👌
Можно ещё сделать так, чтобы не дублировать norm_num:

number_groups = [norm_num[first: second] for first, second in [(0, 1), (1, 4), (4, 7), (7, 9), (9, 11)]]

num_list = []
separators = ["", "-", "."]
for sep in separators: # автоматизированный процесс для некоторых
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И коммент лучше ставить над кодом, и на английском

# Automate some separations of numbers, etc...
for sep ...

num_list.append(sep.join(number_groups))
num_list.append("+" + sep.join(number_groups))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как пример:

        joined = sep.join(number_groups)
        num_list.extend((joined, f"+{joined}"))

Один раз собираем цифры, один раз делаем добавление в лист - вместо 2 джойнов 1, вместо 2 аппендов 1 экстенд)

# отдельный пример вне цикла
num_list.append(
number_groups[0] + "(" + number_groups[1] + ")" + number_groups[2] + number_groups[3] + number_groups[4])
num_list.append(
"+" + number_groups[0] + "(" + number_groups[1] + ")" + number_groups[2] + number_groups[3] + number_groups[4])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно сделать вот так до цикла for sep in separators:

    phone_w_brackets = "{prefix}({code}){rest}".format(
        prefix=number_groups[0],
        code=number_groups[1],
        rest="".join(number_groups[2:])
    )
    num_list.extend((phone_w_brackets, f"+{phone_w_brackets}"))


return num_list


# тест для проверки кода
def test():
rand_number_test = rand_num_gen()
normal_num = normalise(rand_number_test)
final_list = gen_all(normal_num)
print(final_list)
# этот цикл чтобы убедиться, что нормализатор работает на любых форматах
for number in final_list:
print(normalise(number))