Python: como gerar um número de telefone Aleatório?

não é um duplicado de Fazendo número de telefone Aleatório xxx-xxx-xxxxx

o meu projecto usa python-phonenumbers e Django-phonenumber-field para a validação do número de telefone. Dentro do projeto estão vastas listas de regras de validação personalizadas, para as quais uma abordagem ingênua como esta não será suficiente:

>>> 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
Então, sem recorrer a uma força bruta enquanto o laço não tem limite superior, e sem introduzir um limite superior para problemas tão triviais, o que existem melhores formas de gerar números de telefone válidos aceites pelo próprio validador?

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
Author: Community, 2016-04-07

1 answers

Acho que a resposta que o davidn deu a esta pergunta deve funcionar especialmente porque já está a usar Python-phonenumbers

Eu recomendaria usar o pacote phonenumbers que é um python porto do número libphonen da Google, que inclui um conjunto de dados de telemóvel agora:

import phonenumbers 
from phonenumbers import carrier
from phonenumbers.phonenumberutil import number_type

number = "+49 176 1234 5678"
carrier._is_mobile(number_type(phonenumbers.parse(number))) 
Isto vai ... return True in case number is a mobile number or False otherwise. Notar que o número deve ser um número internacional válido ou uma excepção será lançado. Você também pode usar fonenumbers para processar o número de fononename dado uma dica de região.
 3
Author: mucle6, 2018-09-11 15:01:08