Создание номера телефона python

Not a duplicate of Making random phone number xxx-xxx-xxxx

My project uses python-phonenumbers and django-phonenumber-field for phone number validation. Within the project are vast lists of custom validation rules, for which naive approach like this will not be sufficient:

>>> import functools
>>> import random
>>> a = functools.partial(random.randint, 0, 9)
>>> gen = lambda: "+{}-{}{}{}-{}{}{}-{}{}{}{}".format(a(), a(), a(), a(), a(), a(), a(), a(), a(), a(), a())
>>> gen()
'+2-758-702-0180'  # Obviously wrong
>>> gen()
'+1-911-555-0180'  # Obviously wrong, it has 911 in it

So, without resorting to a brute-force while loop that has no upper bound, and without introducing an upper bound for such trivial problems, what better ways are there to generate valid phone numbers accepted by the validator itself?

from phonenumber_field.validators import validate_international_phonenumber
from django.core.exceptions import ValidationError

def generate_valid_number():
    while True:  # While loops are not desired, even with an upper bound!
        try:
            number = gen()
            validate_international_phonenumber(number)
            return number
        except ValidationError:
            pass

Project description

PyPI
PyPI - Python Version
PyPI - Implementation
Downloads

International phone number generation

This module was created exclusively for generating test data

Installation

Install using pip with

pip install phone-gen

Example

from phone_gen import PhoneNumber

phone_number = PhoneNumber("GB")  # ISO 3166-2
# or
phone_number = PhoneNumber("GBR")  # ISO 3166-3
# or
phone_number = PhoneNumber("Great Britain")  # Country name

# Get a phone number
number = phone_number.get_number()
print(number)  # +442908124840

# Get a country code
country_code = phone_number.get_code()
print(country_code)  # 44

# Get a phone number without a country code
number = phone_number.get_number(full=False)
print(number)  # 183782623

# Get a mobile phone number
number = phone_number.get_mobile()
print(number)  # +447911899521

# Get a national phone number
number = phone_number.get_national()
print(number)  # +442408055065
pytest fixture
import pytest
from phone_gen import PhoneNumber


@pytest.fixture
def phone_number():
    def wrap(code):
        return PhoneNumber(code).get_number()

    yield wrap


def test_one(phone_number):
    number = phone_number("DE")
    ...

Using the CLI

usage: phone-gen [-h] [-v] [-n] country [country ...]

International phone number generation

positional arguments:
  country         Country code or country name. Example: "GB" or "GBR" or "Great Britain"

optional arguments:
  -h, --help      show this help message and exit
  -v, --version   show program's version number and exit
  -f, --not-full  Get a phone number without a country code
  -m, --mobile    Get mobile phone number
  -n, --national  Get national phone number

Example

# Get a phone number

$ phone-gen DE
+49791774007056

$ phone-gen DEU
+499968635

$ phone-gen Germany
+49960335800


# Get a phone number without a country code
$ phone-gen -f DE
66999511

$ phone-gen -f Germany
877595

# Get mobile phone number
$ phone-gen -m DE
+491601376066

# Get national phone number
$ phone-gen -n DE
+4940381

Resources

  • Google’s libphonenumber
  • Modified strgen library

Changelog

  • CHANGELOG.md

Contributing

Contributions are very welcome.

How to build a version with libphonenumber below v8.12.3

Need Python 3.8 or more.

  1. git pull https://github.com/tolstislon/phone-gen.git
  2. cd phone-gen
  3. pip install requests
  4. python dev_tools/patterns_generator.py -t {Desired Tag}
  5. python setup.py install

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Source Distributions

Built Distribution

0 / 0 / 0

Регистрация: 24.03.2021

Сообщений: 19

1

Телефонный номер

15.05.2021, 22:15. Показов 14152. Ответов 9


На различных сайтах часто требуется ввести номер телефона в определённом формате. Напиши программу, которая будет преобразовывать российский номер телефона в формат +7(КОД)ЧЧЧ-ЧЧ-ЧЧ.
Программа должна получать на вход строку из 11 чисел — номер телефона. Строка может содержать двенадцатый символ — «+» перед номером и может начинаться с +7, 8 или 7. Программа должна выводить номер в заданном виде. Гарантируется, что в номере могут присутствовать только цифры и один знак + (перед номером).

Пример ввода: 89264557895
Вывод: +7(926)455-78-95

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

15.05.2021, 22:15

9

iSmokeJC

Нарушитель

Эксперт PythonЭксперт Java

14073 / 8256 / 2491

Регистрация: 21.10.2017

Сообщений: 19,730

15.05.2021, 22:27

2

Python
1
2
3
import re
 
print(re.sub(r'+?[78](d{3})(d{3})(dd)(dd)', r'+7(1)2-3-4', input()))



1



Zay

55 / 14 / 5

Регистрация: 08.08.2020

Сообщений: 210

16.05.2021, 08:07

3

Python
1
2
3
4
5
6
7
8
9
10
11
12
q1 = [str(i)for i in input("Введите номер телефона: ")]
q = q1[:]
q.insert(-2,"-")
q.insert(-5,"-")
q.insert(-9,")")
q.insert(-13,"(")
if q1[0] == "8":
    q[0] = "+7"
if q1[0] == "+" and q1[1] == "8":
    q.insert(1,"7")
    q.pop(2)
print(''.join(map(str,q)))



1



0 / 0 / 0

Регистрация: 24.03.2021

Сообщений: 19

16.05.2021, 10:11

 [ТС]

4

Добавлено через 1 минуту

Цитата
Сообщение от Zay
Посмотреть сообщение

q1 = [str(i)for i in input(«Введите номер телефона: «)]
q = q1[:]
q.insert(-2,»-«)
q.insert(-5,»-«)
q.insert(-9,»)»)
q.insert(-13,»(«)
if q1[0] == «8»:
    q[0] = «+7»
if q1[0] == «+» and q1[1] == «8»:
    q.insert(1,»7″)
    q.pop(2)
print(».join(map(str,q)))

Цитата
Сообщение от iSmokeJC
Посмотреть сообщение

import re
print(re.sub(r’+?[78](d{3})(d{3})(dd)(dd)’, r’+7(1)2-3-4′, input()))

не работает, к сожалению

Добавлено через 1 минуту

Цитата
Сообщение от iSmokeJC
Посмотреть сообщение

import re
print(re.sub(r’+?[78](d{3})(d{3})(dd)(dd)’, r’+7(1)2-3-4′, input()))

выдаёт ошибку ‘module’ object has no attribute ‘sub’

Добавлено через 46 секунд

Цитата
Сообщение от Zay
Посмотреть сообщение

q1 = [str(i)for i in input(«Введите номер телефона: «)]
q = q1[:]
q.insert(-2,»-«)
q.insert(-5,»-«)
q.insert(-9,»)»)
q.insert(-13,»(«)
if q1[0] == «8»:
    q[0] = «+7»
if q1[0] == «+» and q1[1] == «8»:
    q.insert(1,»7″)
    q.pop(2)
print(».join(map(str,q)))

ошибок нет, но как правильный код не засчитывает



0



954 / 340 / 113

Регистрация: 04.08.2018

Сообщений: 2,534

16.05.2021, 10:42

5

kapurdok, проверил, работает.



0



Zay

55 / 14 / 5

Регистрация: 08.08.2020

Сообщений: 210

16.05.2021, 11:26

6

kapurdok, наверное надо сделать ещё проверку на неправильный ввод, т.е если введенная последовательность короче или длиннее необходимой

Добавлено через 11 минут

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
q1 = [str(i)for i in input("Введите номер телефона: ")]
q = q1[:]
if len(q1) == 11 and q1[0] == "8"  or q1[0] == "+" and len(q1) == 12:
        q.insert(-2,"-")
        q.insert(-5,"-")
        q.insert(-9,")")
        q.insert(-13,"(")
        if q1[0] == "8":
            q[0] = "+7"
        if q1[0] == "+" and q1[1] == "8":
            q.insert(1,"7")
            q.pop(2)
        print(''.join(map(str,q)))
else:
    print("Неправильный ввод")



1



1487 / 461 / 52

Регистрация: 10.04.2009

Сообщений: 7,904

16.05.2021, 11:33

7

по хорошему начинать нужно
со строки удалить всё кроме знака +, и цифр
она должна быть из 11 или 12 знаков
первый знак должен быть +, 7, 8



0



0 / 0 / 0

Регистрация: 24.03.2021

Сообщений: 19

16.05.2021, 13:12

 [ТС]

8

Цитата
Сообщение от Zay
Посмотреть сообщение

q1 = [str(i)for i in input(«Введите номер телефона: «)]
q = q1[:]
if len(q1) == 11 and q1[0] == «8»  or q1[0] == «+» and len(q1) == 12:
        q.insert(-2,»-«)
        q.insert(-5,»-«)
        q.insert(-9,»)»)
        q.insert(-13,»(«)
        if q1[0] == «8»:
            q[0] = «+7»
        if q1[0] == «+» and q1[1] == «8»:
            q.insert(1,»7″)
            q.pop(2)
        print(».join(map(str,q)))
else:
    print(«Неправильный ввод»)

я нашёл одну деталь, из-за которой не проходил ответ. в задании написано «номер может начинаться на +7, 8 или 7», но при вводе номера с первым символом «7», например «79264557895» выводит «7(926)455-78-95» БЕЗ плюса в начале, с «8» или «+7» в начале всё хорошо



0



Zay

55 / 14 / 5

Регистрация: 08.08.2020

Сообщений: 210

16.05.2021, 13:22

9

Лучший ответ Сообщение было отмечено kapurdok как решение

Решение

3 и 8 строки

Python
1
2
3
if len(q1) == 11 and q1[0] == "8" or q1[0] == "7"  or q1[0] == "+" and len(q1) == 12:
 
if q1[0] == "8" or q1[0] == "7":



1



0 / 0 / 0

Регистрация: 24.03.2021

Сообщений: 19

16.05.2021, 13:24

 [ТС]

10

спасибо! всё работает!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

16.05.2021, 13:24

Помогаю со студенческими работами здесь

Телефонный справочник
Здравствуйте!

Столкнулся с некоторыми проблемами реализации телефонного справочника. Условия:

Телефонный справочник
Помогите, пожалуйста, написать программу. Я запуталась в ее написании(

Требования к программе:…

Написать программу — телефонный справочник (на основании словарей)
Здравствуйте, в общем нужно написать программу — телефонный справочник (на основании словарей)….

Как указать номер элемента в матрице и номер итерации в Python?
Привет!! Помогите, пожалуйста, не знаю как реализовать в питоне.
Рассматриваю алгоритм Тёрнбулла,…

Образует ли подстрока, начинающаяся с символа номер m и заканчивающаяся символом номер n, число 666?
совсем понять не могу, как это написать
условие: Дана строка. Определить, образует ли подстрока,…

Написать программу, которая вычисляет номер подъезда и номер этажа по номеру квартиры
Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению, когда диспетчер…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

10

Это тоже интересно:

  • Созвучные номера телефонов
  • Солигорский роддом номер телефона
  • Созвездие сыктывкар номер телефона
  • Солигорский горгаз номер телефона
  • Созвездие рыб сауна номер телефона

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии